web-dev-qa-db-ja.com

pythonインタラクティブモードでTrue = Falseを元に戻すにはどうすればよいですか?

それで、私はネッド・デイリーが彼の答えで言及した「邪悪な」ことを試みました ここ 。これで、タイプTrueが常にFalseになりました。対話型ウィンドウ内でこれをどのように逆にしますか?

しないこと:

True = False

TrueはFalseで完全にオーバーライドされているため、バックトラックする明らかな方法はないようです。次のようなことができるTrueのモジュールはありますか?

True = <'module'>.True
90
horta

単純に del カスタム名を使用して、デフォルトに戻すことができます。

>>> True = False
>>> True
False
>>> del True
>>> True
True
>>>
138
iCodez

これは動作します:

>>> True = False
>>> True
False
>>> True = not False
>>> True
True

ただし、Falseもいじられている場合は失敗します。したがって、これは優れています:

>>> True = not None

as Noneは再割り当てできません。

これらは、TrueTrue5'foo'Falseなどに再割り当てされたかどうかに関係なく、Noneにも評価されます。

>>> True = True == True   # fails if True = float('nan')
>>> True = True is True
>>> True = not True or not not True
>>> True = not not True if True else not True
>>> True = not 0
48
101

別の方法:

>>> True = 1 == 1
>>> False = 1 == 2
38

完全を期すために、Kevinは、__builtins__から実際のTrueをフェッチすることもできると述べています。

>>> True = False
>>> True
False
>>> True = __builtins__.True
>>> True
True

しかし、そのTrueはオーバーライドすることもできます:

>>> __builtins__.True = False
>>> __builtins__.True
False

他のオプションのいずれかを使用することをお勧めします。

17
simonwo

これを行うだけです:

True = bool(1)

または、ブール値は本質的に整数であるため:

True = 1
12
Loovjo

オブジェクトリテラルを使用しないが、1 == 1。もちろん、Trueが定義されたらFalseを定義できるため、ソリューションをハーフペアとして提供します。

def f(): pass
class A(): pass
True = not f()
False = A != A
False = not (lambda:_).__gt__(_)
True = not (lambda:_).__doc__
2
PythonNut