编写几行Python代码,X,它不引用任何全局变量,例如
def method():
X
print(a)
method()打印1但是
def method():
X
X
print(a)
method()打印2。
所以,我不想成为一个粘人的人,但似乎vars和locals实际上是Python中的全局变量:
def test_global_1():
global vars, locals
vars = lambda: 2
locals = lambda: 3
def test_global_2():
print(vars())
print(locals())
test_global_1()
test_global_2()而且,看起来人们希望看到这样的拼图的客观获胜标准。代码长度在这里感觉不太对,所以也许我们可以为代码的各种新特性建立一个布朗尼点系统?我不确定这些可能是什么,但这里有一个开始:
vars或locals)如果你能想到更多,你可以编辑这个问题来添加到列表中。
这个问题能否在不使用异常的情况下得到解决,也不需要使用像vars和locals这样的全局变量?我想是可以的,虽然我还没弄清楚到底是怎么回事.
发布于 2015-07-30 19:59:31
def method():
if 'a' not in vars():a=0
a+=1
if 'a' not in vars():a=0
a+=1
print(a)只有在变量表中尚未初始化的情况下,才将变量a初始化为0。然后,增加它。
更简单地说(感谢len的组织格拉特):
def method():
a=len(vars())+1
a=len(vars())+1
print(a)如果X的两个副本可以在同一条线上,我们可以这样做
a=0;a+=1;a双倍到
a=0;a+=1;aa=0;a+=1;a与“牺牲羔羊”aa吃了第二个变量分配。
发布于 2015-07-30 21:33:20
考虑到这个解决方案,因为try和except是我第一次想到确定变量是否存在的方法。
def method():
try:a+=1
except:a=1
print(a)发布于 2015-07-30 21:56:32
def method():
exec'';locals()['a']=locals().get('a',0)+1
exec'';locals()['a']=locals().get('a',0)+1
print a
method()基本上,当在Python2中遇到exec时,它会从method.func_code.co_flags中移除一个特殊标志(0x01),这使得locals赋值产生了影响。我利用它来实现nonlocalPython 2中的支持 (修改标志的xor请参见第43行)。
https://codegolf.stackexchange.com/questions/54082
复制相似问题