我最近注意到一些我在python中没有想到的事情,可以检查/访问在主作用域中声明的函数中的变量,例如:
def my_func(mval):
print ("parameter:", mval)
print ("myvar:", myvar)
#myvar = "value" this is not allowed
print ("IN MAIN")
myvar = "123"
my_func(999)
输出:
IN MAIN
parameter: 999
myvar: 123
my_func
可以访问myvar
?那为什么它失败了呢
试图更改值?你知道吗myvar
没有定义?你知道吗我知道我们可以使用global
来实现这一点,这是有意义的,因为我们明确地说在我们想要访问的函数范围之外有一个变量。你知道吗
我觉得这很棘手,因为它可能会导致错误。。你知道吗
myvar
在全局范围内,因此无论您是否声明它,它都是全局的。读取时,python查看函数的局部作用域,然后返回到定义变量的模块全局作用域。编写python时有一个问题。它应该在局部函数作用域还是全局作用域中分配变量?在函数中使用global
关键字并告诉该函数如何解决该问题。变量从不声明为全局变量,函数被告知将该变量视为全局变量。你知道吗当您定义函数时,只对语法的正确性进行而不是评估,因此不会引发任何问题。一旦调用函数
myvar
就已经在全局范围内定义了,因此该函数是有效的。另外,如果取消注释myvar = 'value'
my_func
,只要在调用函数之前定义了myvar
,那么my_func
也将毫无例外地进行计算。你知道吗当您在
my_func
中显示myvar
的内容时,它将检查全局变量表,查看它是否以前在执行中定义过,这就是它工作的原因。然后,当您试图在函数中通过取消对myvar = "value"
的注释来为它赋值时,它会尝试将myvar
定义为my_func
的局部变量,这会隐藏对myvar
全局实例的引用。你知道吗我不确定使用
global
关键字会导致什么问题,但它应该按预期工作。下面是一个如何使用它的示例:输出:
如果您真的不想使用
global
关键字,可以通过将myvar
作为my_func
的参数传递来实现所需的行为,并返回修改后的值以在主作用域中重新分配它:输出:
如果已经构建了
my_func
来返回一个值,请记住,在Python中可以返回多个值。因此,假设my_func
将返回一个名为returnvar
的变量,上面的代码可以写成:输出:
相关问题 更多 >
编程相关推荐