4

私は今日Python2.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__sなしで)利用可能です-そしてあなたは「冗談のために」あなたがすることをすることができます。この種のことを行うのは、主にモック/プロファイラーとその種類のものであることに注意してください...

いいえ、3.xシリーズではそれを行うことはできません。これは、TrueFalseがキーワードであり、2.xのような(一種の)シングルトンではないためです。

于 2012-12-02T03:05:22.870 に答える
3

状況がそれほど悪くなければ、を設定できますTrue = __builtins__.True

于 2012-12-02T03:01:27.200 に答える
3

これから「回復」する方法は、それを起こさせないことです。

とは言うものの、いつでもbool()タイプを使用してアクセスTrueしたり、False再度アクセスしたりできます。(bool()常に2つのブールシングルトンのうちの1つを返します。)

例:

>>> 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

TrueFalseは名前(変数)ではなくキーワードであるため、Python3ではこれは不可能です。

于 2012-12-02T03:05:13.823 に答える