我没有特别希望这样做的原因,我只想偶尔看一下False
为True
。
import random
def dice():
return random.randint(1,3)==2
False = dice()
这不会给我我想要的东西 - 我想假在调用dice()
时将False初始化为某个值,因此保留为其值。我怎样才能使每次检查False的值时,就好像我已经调用了dice()
?
如果有人有更好的方法来表达这一点,请随时提供编辑。感谢。
答案 0 :(得分:2)
您无法在Python 2或3中执行此操作。您可以在Python 2中为False
指定一个值,但您不能做的就是只读取普通变量的值( False
或其他任何东西)调用函数。
如果您正在阅读的内容不是裸名变量,而是某种表达式(如属性访问权限),则可以执行此操作。也就是说,你可以这样做,使a.b
之类的东西每次都评估为不同的值,但不是这样,只有普通的a
每次都会评估为不同的值。
答案 1 :(得分:2)
要做到这一点,您需要更多地控制名称查找过程,而不是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
中定义的函数将忽略提供的名称查找本地,即使您尝试使用奇怪的__getitem__
覆盖提供全局字典,它们也可能会绕过它。< / p>
答案 2 :(得分:1)
如果你能忍受不得不使用。在你的变量名中,@ 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.
答案 3 :(得分:0)
只有错误才能做到这一点;如果您正在调用函数,则需要使用函数语法。你可以做到
False = dice
...
if my_value == False():
... action