【问题标题】:python can declare global variable in local scope?python可以在局部范围内声明全局变量吗?
【发布时间】:2012-08-19 01:25:35
【问题描述】:

python可以在局部范围内声明全局变量吗?

有效:

def main():
    # do some... for files varible
    for file in files:
       result = func(file)
    print result

我无法理解。 有人告诉我为什么在for 循环之外可以看到result

谢谢。

【问题讨论】:

  • 你需要澄清你在问什么,因为到目前为止你还不清楚。
  • 我添加了一些修改。

标签: python scope


【解决方案1】:

for 语句不启动新范围。只有模块、类声明和函数定义开始一个新的作用域。

【讨论】:

  • 除非它们在列表推导 (Py3k) 或生成器表达式(顺便说一句是函数)中
【解决方案2】:

我没有看到全局变量声明。 result 是一个局部变量,file 也是。你是在说files吗?这看起来像一个全局变量,但我没有看到它在本地声明。

根据@DSM 的有用评论更新:

如果您说 resultfor-loop 中本地声明,那么它在 Python 中不起作用,for-loop 不会创建本地范围。

【讨论】:

  • 我的猜测是 OP 很惊讶 result 逃脱了 for 循环。
  • @DSM 也许 .. 很难说 .. 尽管如此,我还是更新了我的答案 - 谢谢。
  • 看起来我和 IVA 都可能猜错了:现在看来 OP 更惊讶files 存在于范围内,并且“声明”是指“引用”之类的东西。 .谁能说? :)
  • @JamesDev 如果我能提供帮助,我很高兴。我不确定我会称你的问题“愚蠢”,但也许有点不清楚。不过,您最近对帖子的更新确实澄清了这一点。祝你好运。
【解决方案3】:

如果您的函数使用赋值 = 或 augemnted assignemnt(即 +=),则默认情况下该变量被视为 local。但是,如果您想分配 global,请使用 global 关键字。

foo = 2
def bar():
    foo = 3 # foo is locally defined here

def car():
    global foo
    foo = 4 # foo is globally reassigned here

bar() # foo is still 2
car() # foo is now 4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-19
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多