<
>

Python入门之Python函数

2020-06-28 14:44:40 来源:易采站长站 作者:易采站长站整理


我在 my_fun() 函数中的自身的局部变量n: 我是 my_fun() 的局部变量-n
我在 my_fun() 函数中调用全局变量time: 我是全局变量-time
我在函数外调用全局变量time: 我是全局变量-time

接下来就说一说如果局部变量和全局变量同名的问题是怎么处理的?因为 Python 解释器的原因,函数在执行时会引入一个用于函数局部变量的新符号表。更确切地说,函数中所有的变量赋值都将存储在局部符号表中,而变量引用会首先在局部符号表中查找,然后是外层函数的局部符号表,再然后是全局符号表,最后是内置名称的符号表,即

LEGB
原则。 因此,全局变量和外层函数的变量不能在函数内部直接赋值(除非是在 global 语句中定义的全局变量,或者是在 nonlocal 语句中定义的外层函数的变量),但是它们可以被引用。

测试如下:

n = 100  # 定义一个全局变量

def my_fun():
n = 200 # 定义一个局部变量 n,与全局变量同名
print(f'my_fun() 中变量 n 的值是{n}')

def my_fun_2():
print(f'my_fun_2() 中变量 n 的值是{n}')

my_fun()
my_fun_2()
print(f'函数外全局变量的值是{n}')

输出结果:
my_fun() 中变量 n 的值是200
my_fun_2() 中变量 n 的值是100
函数外全局变量的值是100

所以我们记住前面的 LEGB 原则就知道局部变量和全局变量的顺序问题了。

一般我们不会在函数中修改全局变量的值,如果你非要修改,Python 中提供了相关的操作,通过

global
关键字来实现在函数中修改全局变量。如果想在内部函数修改外部函数的局部变量可以使用
nonlocal
关键字,这里我们也不展开了,日后用到,查看官方文档即可。

函数标注

函数标注是我们自定义函数时使用的参数类型和返回值类型的完全可选的元数据信息,详细规则可以参阅PEP 3107 和 PEP 484。日后再总结一篇吧。

函数标注以字典的形式存放在函数的 annotations 属性中,并且不会影响函数的任何其他部分。

形参标注的定义方式是在形参名称后加上冒号(

:
),后面跟一个表达式,该表达式会被求值为标注的值。

返回值标注的定义方式是加上一个组合符号 (

->
),后面跟一个表达式,该标注位于形参列表和表示
def
语句结束的冒号之间。 下面的示例有一个位置参数,一个关键字参数以及返回值带有相应标注:

>>> def f(ham: str, eggs: str = 'eggs') -> str:
              
暂时禁止评论

微信扫一扫

易采站长站微信账号