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

Posted 超级可爱的夹心小朋友

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跟随小甲鱼up主学习Python——函数相关的知识,希望对你有一定的参考价值。

作用域: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 内置函数,是最没有地位的,只要起一个变量名和它一样,内置函数本身带有的属性就会被摧毁。所以不要起一些跟内置函数相同的变量名

以上是关于跟随小甲鱼up主学习Python——函数的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

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

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