我是Python的初学者。我只是为了练习而编写如下代码。请查看它
i=1
def wrte():
global i
while i<5:
print "%s .Line..\n" %i
i+=1
def appnd():
j=i
while i in range(i,j+3):
print "%s .Line..\n" %i
i+=1
def Main():
wrte()
appnd()
Main()
输出如下所示
1 .Line..
2 .Line..
3 .Line..
4 .Line..
**Traceback (most recent call last):
Line 18, in <module>
Main()
Line 16, in Main
appnd()
Line 9, in appnd
j=i
UnboundLocalError: local variable 'i' referenced before assignment**
预期结果::下一个序列应该像
一样追加5. Line..
6. Line..
7. Line..
请帮帮我..
答案 0 :(得分:3)
您需要在使用该变量的每个函数中定义global
。
def appnd():
global i
注意:如果可能,将全局变量和相关函数移动到类中。
答案 1 :(得分:0)
添加
global i
前
j=i
应解决问题
答案 2 :(得分:0)
您的定义范围是本地的。如果在函数中将变量声明为全局变量,则并不意味着它将应用于所有函数。你必须在你的appnd()函数中声明我是全局的。 话虽如此,但这并不意味着你的风格是对的。您宁愿将变量传递给函数。
答案 3 :(得分:0)
下一个定义将起作用:
def appnd():
j=i
while i in range(i,j+3):
print "%s .Line..\n" %i
# it would print infinitely, but will work
在编译时,Python会查看函数中使用的变量方式,以定义查找范围的变量。在您对appnd
的定义中,它会看到为i
分配,从而试图将其威胁为局部变量。在我的代码中没有赋值,因此Python只是从父作用域获取i
的值 - 在这种情况下i
既不是本地也不是全局,它称为自由变量 。 Execution model - Scopes and Binding - 强烈推荐阅读。
答案 4 :(得分:0)
我想你知道什么时候应该使用global,否则它不会出现在你的写函数中。如果你只读取我认为你想要在你的追加函数中的变量,你可以省略它,但你有一个i + = 1,所以你做了修改。只需更改附加到:
for line in range(i, i + 3):
print "%s .Line..\n" % line
答案 5 :(得分:0)
在 appnd 函数中,必须将全局变量设置为 i 。
i=1
def wrte():
global i
while i<5:
print "%s .Line..\n" %i
i+=1
def appnd():
global i
j=i
while i in range(i,j+3):
print "%s .Line..\n" %i
i+=1
def Main():
wrte()
appnd()
Main()