跟随小甲鱼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——函数的主要内容,如果未能解决你的问题,请参考以下文章