问题描述
在我看来,函数可以引用超出其范围的变量,但不能设置它们。 这个对吗? 我了解这个权利吗?
我还包括了全局变量的用法。 我知道它们不好,将避免它们。 我知道如何解决这个问题,但只是想清楚一点。
我的示例程序:
import foo
# beginning of functions
# this one works because I look at the variable but dont modify it
def do_something_working:
if flag_to_do_something:
print "I did it"
# this one does not work because I modify the var
def do_something_not_working:
if flag_to_do_something:
print "I did it"
flag_to_do_something = 0
# this one works, but if I do this God kills a kitten
def do_something_using_globals_working_bad_ju_ju:
global flag_to_do_something
if flag_to_do_something:
print "I did it"
flag_to_do_something = 0
# end of functions
flag_to_do_something = 1
do_something_working()
do_something_not_working()
do_something_using_globals_working_bad_ju_ju()
1楼
正确。
好吧。
当flag_to_do_something = 0
您未在修改变量,而是在创建新变量。
在函数中创建的flag_to_do_something
将是指向同一对象的单独链接(在这种情况下)。
但是,如果您使用的函数或运算符在适当位置修改了变量,则该代码将起作用。
例:
g = [1,2,3]
def a():
g = [1,2]
a()
print g #outputs [1,2,3]
g = [1,2,3]
def b():
g.remove(3)
b()
print g #outputs [1,2]
2楼
是的,差不多。 请注意,Python中的“全局”变量实际上是模块级变量-它们的作用域是Python模块(也就是源文件),而不是整个程序,这与真正的全局变量一样。 因此,Python全局变量并不比C中的全局变量差。但是最好还是避免使用它们。