我得到以下错误:
Warning (from warnings module):
File "C:\Python34\projectEuler\projectEuler.py", line 316
global primeSet, primeList, primeCap, primeRan
SyntaxWarning: name 'primeRan' is used prior to global declaration
对于代码:
^{pr2}$变量在分配之前不会写入。代码似乎起作用了。 语法消息是错误警报,还是应该在读取前声明全局消息?(而不是只在写之前声明)
代码:
def primeGen():
global primeRan
if primeRan:
primeList, primeMax = primeList, PrimeCap
global primeSet
else:
global primeSet, primeList, primeCap
primeRan = True
删除SyntaxWarning
。但是,对一个只被读取而不被写入的值进行全局减速似乎是错误的。在
我应该忽略语法警报吗?在
不,您不能忽略它,而且,从Python开始} and instead be updated to an error (^{}) 。所以您最好现在就修复它,或者面对它在未来版本中不执行的前景(
3.6
这个will cease to be a ^{>= 3.6
)。在请参阅^{} statement 上的文档:
正如您所注意到的,这不是在运行时生成的警告,它是在Python编译函数对象时生成的,并注意到一个包含名称(
primeRan
)的global
语句,该语句已被发现为本地的。在您应该在引用
primeRan
之前添加global
语句,并对同样问题的受害者primeList
执行相同的。在但是,对于
primeList
,您可以偷偷摸摸地利用这样一个事实,即global
必须首先解析。简而言之,切换条件,以便Python在赋值语句之前为其解析global
语句,然后再分析:由于
global
是解析器的一个指令,因此在没有警告的情况下会产生相同的行为。在当然,使用
globals
不是一个好的实践。我看不出有什么理由需要诚实地使用它们,最好不要使用globals
,而是使用参数和返回值与函数进行通信(从概念角度和执行速度角度来看)。在相关问题 更多 >
编程相关推荐