“Python的变量作用域”的版本间的差异
来自CloudWiki
第5行: | 第5行: | ||
<p>全局变量可以通过关键字global来定义。这分为两种情况:</p> | <p>全局变量可以通过关键字global来定义。这分为两种情况:</p> | ||
*一个变量已在函数外定义,如果在函数内需要为这个变量赋值,并要将这个赋值结果反映到函数外,可以在函数内使用global将其声明为全局变量。 | *一个变量已在函数外定义,如果在函数内需要为这个变量赋值,并要将这个赋值结果反映到函数外,可以在函数内使用global将其声明为全局变量。 | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<nowiki>global a | <nowiki>global a | ||
第18行: | 第11行: | ||
global a | global a | ||
a = value | a = value | ||
+ | set_value(5) | ||
+ | print(a) | ||
+ | </nowiki> | ||
+ | *如果一个变量在函数外没有定义,在函数内部也可以直接将一个变量定义为全局变量,该函数执行后,将增加一个新的全局变量。 | ||
+ | <nowiki> | ||
def create_value(value): | def create_value(value): | ||
global b | global b | ||
b = value | b = value | ||
− | |||
− | |||
create_value(6) | create_value(6) | ||
print(b)</nowiki> | print(b)</nowiki> | ||
+ | <p>也可以这么理解:</p> | ||
+ | *在函数内只引用某个变量的值而没有为其赋新值,如果这样的操作可以执行,那么该变量为(隐式的)全局变量; | ||
+ | *如果在函数内任意位置有为变量赋新值的操作,该变量即被认为是(隐式的)局部变量,除非在函数内显式地用关键字global进行声明。 | ||
+ | |||
+ | *如果局部变量与全局变量具有相同的名字,那么该局部变量会在自己的作用域内隐藏同名的全局变量。 | ||
+ | |||
返回 [[Python函数和代码复用]] | 返回 [[Python函数和代码复用]] |
2018年4月9日 (一) 13:43的最新版本
- 变量起作用的代码范围称为变量的作用域,不同作用域内变量名可以相同,互不影响。
- 在函数内部定义的普通变量只在函数内部起作用,称为局部变量。当函数执行结束后,局部变量自动删除,不再可以使用。
- 局部变量的引用比全局变量速度快,应优先考虑使用。
全局变量可以通过关键字global来定义。这分为两种情况:
- 一个变量已在函数外定义,如果在函数内需要为这个变量赋值,并要将这个赋值结果反映到函数外,可以在函数内使用global将其声明为全局变量。
global a def set_value(value): # 告诉编译器我在这个方法中使用的a是刚才定义的全局变量a,而不是方法内部的局部变量. global a a = value set_value(5) print(a)
- 如果一个变量在函数外没有定义,在函数内部也可以直接将一个变量定义为全局变量,该函数执行后,将增加一个新的全局变量。
def create_value(value): global b b = value create_value(6) print(b)
也可以这么理解:
- 在函数内只引用某个变量的值而没有为其赋新值,如果这样的操作可以执行,那么该变量为(隐式的)全局变量;
- 如果在函数内任意位置有为变量赋新值的操作,该变量即被认为是(隐式的)局部变量,除非在函数内显式地用关键字global进行声明。
- 如果局部变量与全局变量具有相同的名字,那么该局部变量会在自己的作用域内隐藏同名的全局变量。