当前位置: 代码迷 >> python >> 简单的Python变量范围
  详细解决方案

简单的Python变量范围

热度:112   发布时间:2023-06-13 14:04:12.0

在我看来,函数可以引用超出其范围的变量,但不能设置它们。 这个对吗? 我了解这个权利吗?

我还包括了全局变量的用法。 我知道它们不好,将避免它们。 我知道如何解决这个问题,但只是想清楚一点。

我的示例程序:

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()

正确。 好吧。 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]

是的,差不多。 请注意,Python中的“全局”变量实际上是模块级变量-它们的作用域是Python模块(也就是源文件),而不是整个程序,这与真正的全局变量一样。 因此,Python全局变量并不比C中的全局变量差。但是最好还是避免使用它们。