Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 与变量引用相关的特定问题_Python_Python 2.7_Function_Variables_Reference - Fatal编程技术网

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
....