繁体   English   中英

在Python2中重新定义False? 如何将函数调用分配给变量名?

[英]Redefine `False` in Python2? How to assign a function call to a variable name?

我没有特别的理由希望这样做,我只是想偶尔看到FalseTrue

import random
def dice():
    return random.randint(1,3)==2 
False = dice()

这不会给我我想要的东西-我想象False在调用dice()初始化为某个值,并因此保留在该值上。 我怎样才能使它每次我检查False的值时就好像调用了dice()

如果有人有更好的措辞,请随时进行编辑。 谢谢。

您无法在Python 2或3中执行此操作。您可以在Python 2中为False赋值,但是您不能做的就是做到这一点,以便仅读取普通变量( False或其他任何值)的值就会调用a功能。

如果您正在读取的内容不是裸名变量而是某种表达式(例如属性访问),则可以执行此操作。 就是说,您可以做到这样,使得像ab这样的东西每次都会求值一个不同的值,但是不能这样,只是普通a每次都会求值一个不同的值。

为此,您需要比Python通常赋予您的名称查找过程更多的控制权。 您需要在使用您控制的名称查找规则的名称空间中执行代码,这意味着您必须使用exec

import random

class WeirdLocals(dict):
    def __getitem__(self, index):
        if index == 'False':
            return random.choice([True, False])
        return super(WeirdLocals, self).__getitem__(index)

exec '''
print False # Might print True
print False # Might print True
print False # Might print True
''' in globals(), WeirdLocals()

请注意,在exec内部定义的exec将忽略提供的本地名称以进行名称查找,即使您尝试提供带有怪异的__getitem__覆盖的全局字典,它们也可能会绕过它。

如果您可以忍受必须使用。 在您的变量名中,@ property装饰器可以为您提供所需的内容。

例:

import random

class Foo:
     def __init__(self):
             pass
     @property
     def True(self):
             return random.choice([True,False,True])

然后如果你这样做

 F=Foo() 
 print(F.True) #will return True 66% of the time and False 33% of
 the time.

您不能仅凭False来做到这一点; 如果要调用函数,则需要使用函数语法。 你可以做

False = dice
...
if my_value == False():
    ... action

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM