“x在全球声明之前使用”是什么意思? python 2

时间:2016-11-10 03:09:20

标签: python python-2.7

完整代码在此处:http://pastebin.com/gG4JLNsX

这是minimal, complete, verifiable example

import random

def newGame():
 curveSetup()
 printStatistics()

def curveSetup():
 global curve 
 curve = random.randint(12,35)
 global lvl
 lvl = 1

def printStatistics():
 global expMax
 expMax = (lvl*curve)
 global lvl
 print "Character Level: "+str(lvl)

newGame()

每当我运行程序时,我都会收到错误

Warning (from warnings module):
 File "D:\Code\PyRPG.py", line 64
  global lvl
SyntaxWarning: name 'lvl' is used prior to global declaration

有谁知道如何修复它?我已经尝试了所有的东西,我已经查看了这里提出的类似问题,在声明变量本身是全局之前,它们都是Python 3或定义为“x”。我在定义“x”之前声明它是全局的,因此我没有看到它有什么问题。

编辑:我在开始时也定义了lvl = 1,但它根本没有改变任何东西。我在curveSetup()函数中定义了lvl,它在其他所有函数之前运行。

2 个答案:

答案 0 :(得分:1)

您在lvl中声明全局之前使用printStatistics(),因此在全局声明之前使用“name'lvl'”。这只是一个警告,因为在函数中的任何位置都有global lvl使lvl全局。代码仍然有效。要消除警告,请在使用之前移动global

 global lvl
 expMax = (lvl*curve)

事实上,此功能根本不需要global lvl。只有在修改全局变量时才需要它。此处的值仅用于计算而不更改lvl本身。

请注意,您的程序可怕地滥用全局变量。如您所见,它使逻辑很难遵循。应该很少使用全局变量,理想情况下,对于不变更且不需要global声明的常量。更喜欢班级保持国家。

答案 1 :(得分:0)

global lvl表示您使用在函数外部定义的lvl变量。因此,lvl必须存在于函数之外。

但是,您永远不会定义lvl。在调用任何引用它的函数之前,你必须写一些像lvl = 0这样的地方。

请注意,lvl = lvl + 1 lvl的定义。