Python 与变量引用相关的特定问题
现在,我想澄清一下,我不想将变量Python 与变量引用相关的特定问题,python,python-2.7,function,variables,reference,Python,Python 2.7,Function,Variables,Reference,现在,我想澄清一下,我不想将变量b作为函数g的参数。考虑到g是递归调用的,有没有其他方法可以重写这段代码?即使提到b=0并将其称为全局变量,似乎也无助于解决引用分配错误 global b b = 0 def g(x): if b < x: for i in range(10): if u == i: b += 1 g(x) #g is called recursively
b
作为函数g
的参数。考虑到g是递归调用的,有没有其他方法可以重写这段代码?即使提到b=0并将其称为全局变量,似乎也无助于解决引用分配错误
global b
b = 0
def g(x):
if b < x:
for i in range(10):
if u == i:
b += 1
g(x) #g is called recursively
for u in range(20):
b = 5
g(7)
global b
b=0
def g(x):
如果b#这是来自MSeifert(投票正确),@Chalid
b=0
第一个=[]
秒=[]
def g(x):
全局b#因此python知道您使用全局变量!
第一.附加(b)
如果b
global
用于明确希望使用和更新global
变量的情况。因此,您需要在函数内部而不是外部使用global b
:
b = 0
def g(x):
global b # So python knows you use the global variable!
if b < x:
for i in range(10):
if u == i:
b += 1
g(x)
for u in range(20):
b = 5
g(7)
b=0
def g(x):
全局b#因此python知道您使用全局变量!
如果b
由于在g
函数中使用b+=1
,因此需要将b
声明为global
。否则会出现UnboundLocalError
:
UnboundLocalError:赋值前引用了局部变量“b”
另见:
Python中局部和全局变量的规则是什么?
在Python中,仅在函数内部引用的变量是隐式全局变量。如果在函数体中的任何位置为变量赋值,则假定该变量为局部变量,除非显式声明为全局变量
虽然一开始有点令人惊讶,但经过片刻的考虑就可以解释这一点。一方面,对指定变量要求global
,提供了防止意外副作用的屏障。另一方面,如果所有global
引用都需要global
,那么您将一直使用global
。对内置函数或导入模块的组件的每个引用都必须声明为global
。这种混乱将破坏全局声明在识别副作用方面的作用
它可能会使人的头发竖立起来,但您可以将b
作为g
的属性添加
def g(x):
If g.b > x:
...
g.b = 5
....
但是每次我运行函数g
,我必须给它一些值来代替b,对吗?这可能会弄乱代码如果b与g相关是的,我的意思是你将b增加1,而不是用b的最后一个结果调用g
def g(x):
If g.b > x:
...
g.b = 5
....