if函数python作用_当函数中的if语句对python全局变量求值时,它在函数中不起作用...

本文探讨了Python中函数内的if语句如何处理全局变量的问题。通过示例1和示例2,解释了为何直接在函数内修改全局变量会导致UnboundLocalError。在示例3和4中,展示了如何正确地访问和修改全局变量。文章还提到了使用`globals()`函数来解决这一问题,并指出Python中关于变量作用域的一些特性。
摘要由CSDN通过智能技术生成

例1:a=1

def b():

print a

a=2

print a

例2:

^{pr2}$

示例1按预期工作,示例2失败

UnboundLocalError:赋值之前引用了局部变量“a”

在第一个印刷品上

有人能解释一下为什么会这样吗?是错误还是特征?在

第二个例子不是很有用,但我不明白为什么它不起作用。

我希望函数b首先打印全局a,然后检查全局a是否为1。如果这是真的,局部a将被设置为2。然后要么打印全局a,要么打印局部a,这取决于全局a的值。在示例中,全局a是1,所以我希望看到局部a的值是2。在

例3:a=1

def b():

print a

作品

例4:a=1

def b():

print a

a=2

失败,正如正确注释的示例1一样,我实际上只测试了示例3,并认为它与示例1相同。在

现在我明白了关于整个范围经常重复的事情。这对我来说是全新的,下面的例子(Ipython)让我很开心:In [13]: a=1

In [14]: def b():

....: a=2

....: global a

:3: SyntaxWarning: name 'a' is assigned to before global declaration

:3: SyntaxWarning: name 'a' is assigned to before global declaration

:3: SyntaxWarning: name 'a' is assigned to before global declaration

....: print a

:3: SyntaxWarning: name 'a' is assigned to before global declaration

:3: SyntaxWarning: name 'a' is assigned to before global declaration

:3: SyntaxWarning: name 'a' is assigned to before global declaration

....:

:3: SyntaxWarning: name 'a' is assigned to before global declaration

:3: SyntaxWarning: name 'a' is assigned to before global declaration

:3: SyntaxWarning: name 'a' is assigned to before global declaration

:3: SyntaxWarning: name 'a' is assigned to before global declaration

:3: SyntaxWarning: name 'a' is assigned to before global declaration

:3: SyntaxWarning: name 'a' is assigned to before global declaration

:3: SyntaxWarning: name 'a' is assigned to before global declaration

:3: SyntaxWarning: name 'a' is assigned to before global declaration

:3: SyntaxWarning: name 'a' is assigned to before global declaration

:3: SyntaxWarning: name 'a' is assigned to before global declaration

:3: SyntaxWarning: name 'a' is assigned to before global declaration

:3: SyntaxWarning: name 'a' is assigned to before global declaration

:3: SyntaxWarning: name 'a' is assigned to before global

declaration

global a

In [15]: b()

2

In [16]: print a

2

所以这个机制不同于声明一个函数或类似的东西,我只能在更改状态之后才能访问它。在

python中还有其他类似的操作吗-穿越时间?在

为了使示例正常工作,可以使用globals():

示例1工作:a=1

def b():

print globals()["a"]

a=2

print a

示例2工作:a=1

def b():

global_a=globals()["a"]

print global_a

if global_a==1:

a=2

print a

例4工作:a=1

def b():

print globals()["a"]

a=2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值