跟随小甲鱼up主学习Python——函数(4)

作用域:scope,指一个变量可以被访问的范围,作用域总是由代码中被赋值的位置决定。

局部作用域:如果一个变量定义的位置在函数里面,那么作用域仅限该函数中,称之为局部变量。

>>> def myfunc():
    x = 520                                 //局部变量,位置在函数内部
    print(x)

    
>>> myfunc()
520
>>> print(x)                             //在函数外部访问内部变量会报错
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    print(x)
NameError: name 'x' is not defined

全局作用域:在任何函数的外部定义一个变量

>>> x = 880
>>> def myfunc():
    print(x)

    
>>> myfunc()
880

在函数中存在一个跟全局变量同名的局部变量时,调用函数时,局部变量会覆盖全局变量。

>>> x = 880
>>> def myfunc():
    x = 520
    print(x)

    
>>> myfunc()
520
>>> print(x)
880

一般情况下:在Python保护机制下:全局变量可以在函数内部访问到,但是无法在函数中修改全局变量的值,实在要修改全局变量的值,则可以使用global语句,但是一般不建议修改全局变量的值,容易出现bug。

>>> x = 880
>>> def myfunc():
    
global x
    x = 520
    print(x)

    
>>> myfunc()
520
>>> print(x)
520

嵌套函数:函数里面还有函数

>>> def funA():
    x = 520
    def funB():
        x = 880
        print('in funB,x=', x)
    print('in funA,x=', x)

>>> funB()                                                    //内部函数无法直接被调用
Traceback (most recent call last):
  File "<pyshell#37>", line 1, in <module>
    funB()
NameError: name 'funB' is not defined  
 

>>> def funA():
    x = 520
    def funB():
        x = 880
        print('in funB,x= ', x)
    funB()
    print('in funA,x= ', x)

>>> funA()                                                   //通过调用外部函数可以调用内部函数
in funB,x= 880
in funA,x= 520

非要在内部函数修改外部函数变量的时候,则可以使nonlocal语句,实现僭越,但是Python一般不建议使用,容易出现bug。

>>> def funA():
    x = 520
    def funB():
        
nonlocal x
        x = 880
        print('in funB,x=', x)
    funB()
    print('in funA,x=', x)

    
>>> funA()
in funB,x= 880
in funA,x= 880                 //成功的在内部修改了外部作用域的值,把520变成了880

LEGB规则:掌握Python的解析机制,方便记忆成:leg+b

L(local):局部作用域

E(enclosed):嵌套函数的外层函数作用域

G(global):全局作用域

B(build-in):内置作用域

当局部作用域与全局作用域发生冲突的时候,Python会使用局部作用域的变量,除非使用了global语句进行特别申明。

当嵌套函数发生的时候,局部作用域与覆盖外层函数作用域,除非nonlocal语句进行申明。

build-in function BIF 内置函数,是最没有地位的,只要起一个变量名和它一样,内置函数本身带有的属性就会被摧毁。所以不要起一些跟内置函数相同的变量名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值