4

我今天刚开始使用 Python 2.7 学习 Python,在这里我有一个关于全局变量 True 和 False 的问题:

看来我可以像这样覆盖 True 和 False 的值:

False = True
# now the value of variable False is also true.
True = False
# because the value of False is true, after this the value of True is still true.

if True(or False):
    print 'xxxx'
else:
    print 'yyyy'

现在无论我们将 True 或 False 作为 if 条件,它总是打印“xxxx”。

那么如何从这种故障情况中恢复呢?我想我们可以使用类似的东西:

True = 1==1
False = 1!=1

但这对我来说似乎有点狡猾。有没有更好的方法来做到这一点?

谢谢。

(另外,在 Python 3.3 中似乎不再允许此操作?)

4

3 回答 3

4

它们不是这样的“全局”变量——它们是内置的……它们在__builtin__(no s ) 中可用——你可以“开玩笑”地做你想做的事。请注意,做这种事情主要是为了模拟/分析器和类似的事情......

不,你不能在 3.x 系列中这样做,因为TrueandFalse是关键字,而不是像 2.x 中的(某种)单例

于 2012-12-02T03:05:22.870 回答
3

从中“恢复”的方法是不要让它发生。

也就是说,您始终可以使用该bool()类型来访问TrueFalse再次访问。(bool()总是返回两个布尔单例之一。)

例子:

>>> bool
<type 'bool'>
>>> bool(1)
True
>>> bool(1) is bool('true')
True
>>> True = False
>>> True
False
>>> True is False
True
>>> False is bool()
True
>>> True = bool(1)
>>> True is bool(1)
True
>>> True is False
False
>>> True is bool()
False
>>> bool()
False
>>> True is bool(2)
True
>>> True is bool('true')
True
>>> 

如果这是一个简单的True = 'something'绑定,那么会True在当前命名空间中创建一个新名称——__builtins__模块不会改变。在这种情况下,您可以简单地删除(取消绑定)名称空间中的“True”名称。然后 Python 将__builtins__再次使用定义的那个。

>>> dir()
['__builtins__', '__doc__', '__name__', '__package__']
>>> True is __builtins__.True
True
>>> True = 'redefined'
>>> __builtins__.True is True
False
>>> del True
>>> __builtins__.True is True
True

这在 Python 3 中是不可能的,因为TrueandFalse不再是名称(变量)而是关键字。

于 2012-12-02T03:05:13.823 回答
3

如果情况还不错,您可以设置True = __builtins__.True.

于 2012-12-02T03:01:27.200 回答