Python global
本帖最后由 wuqramy 于 2020-3-27 10:55 编辑Python global
语法:
global varname
描述:
Python中定义函数时,若想在函数内部对函数外的变量进行操作,就需要在函数内部声明其为global。
实例:
>>> x = 1
>>> def fun1():
x = 2
>>> fun1()
>>> print(x)
1
>>> # 解析:在fun1函数中并未在x前面加global,所以fun1函数无法将x赋为2,无法改变x的值
>>> x = 1
>>> def fun1():
global x
x = 2
>>> fun1()
>>> print(x)
2
>>> # 解析:global需要在函数内部声明,若在函数外声明,则函数依然无法操作x
应该明确,"操作"是特指赋值,因为,在函数内部,在未使用 global 关键字对全局变量进行声明的情况下,是可以访问全局变量的,唯一的限制是全局变量不能出现在赋值语句的左边,也就是说,不能被赋值,如果赋值了,那就会新产生一个与全局变量同名的局部变量。而加上 global 关键字的声明之后,就没有这个限制了。 你知道这段代码为什么会报错吗{:5_97:}:
import random
def func(ok):
if ok:
return random.randint(1, 10)
else:
import random
return random.random()
func(True) 一个账号 发表于 2020-3-27 10:09
你知道这段代码为什么会报错吗:
{:10_258:}要在函数内部导入?
Traceback (most recent call last):
File "C:\Pythonstudy\test.py", line 10, in <module>
func(True)
File "C:\Pythonstudy\test.py", line 5, in func
return random.randint(1, 10)
UnboundLocalError: local variable 'random' referenced before assignment wuqramy 发表于 2020-3-27 10:11
要在函数内部导入?
import random 相当于在 func 里边定义了 random 这个变量,
根据 bleg 的顺序,覆盖了全局的 random。
但是进入第一个分支的时候 random 这个名字还没有被绑到模块上。 wuqramy 发表于 2020-3-27 10:11
要在函数内部导入?
改成这样就木有问题了:
import random
def func(ok):
global random
if ok:
return random.randint(1, 10)
else:
import random
return random.random()
func(True) 一个账号 发表于 2020-3-27 10:35
改成这样就木有问题了:
哦
页:
[1]