Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 25, 2018 18:05:43

DamMercul
Зарегистрирован: 2017-11-26
Сообщения: 325
Репутация: +  13  -
Профиль   Отправить e-mail  

Тема на счет логики в Py 2.7

Недавно наткнулся на одну статью на Хабрахабре про пасхалки в python'е(в основном 2.x)
И в ней один пункт гласил, что в 2.7 версии лог. константы True и False не были константами,
и их можно менять. Я решил проверить:

 True_ = True
False_ = False
True = False_
False = True_  # Сделал так, чтобы переменные поменялись, так ка до этого присвоения True == False
# И тогда True и False будут = False
print([0, 1][True])
И тут он мне выдал 1. Я в шоке, ведь True = False, а False = True. Тут по идее должена была начаться “так называемая рекурсия”
Но этого не произошло. Почему?



____________________________________________________

 # Life loop
while alive:
    if (fun > boredom) and money:
        pass_day(fun, boredom, money)
        continue
    else: break

Офлайн

#2 Янв. 25, 2018 18:12:54

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Тема на счет логики в Py 2.7

 >>> True = 0
>>> False = 1
>>> True
0
>>> False
1
>>> if False:
...     print "WTF?"
... 
WTF?



Офлайн

#3 Янв. 25, 2018 18:16:29

DamMercul
Зарегистрирован: 2017-11-26
Сообщения: 325
Репутация: +  13  -
Профиль   Отправить e-mail  

Тема на счет логики в Py 2.7

А что насчет:

 print(True == False)



____________________________________________________

 # Life loop
while alive:
    if (fun > boredom) and money:
        pass_day(fun, boredom, money)
        continue
    else: break

Офлайн

#4 Янв. 25, 2018 18:58:36

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Тема на счет логики в Py 2.7

Да нет тут никакого шаманства. True и False - это целочисленные значения, и как любые другие неизменяемые значения они передаются и присваиваются по значению, а не по ссылке. Таким образом когда вы делаете True = 0, вы просто определяете новую переменную с именем True в локальной области видимости. Ни на что системное это не повлияет. И даже True == False все равно будет давать “системное” значение константы, а не то, которое вы определили в своем коде.



Офлайн

#5 Янв. 25, 2018 19:04:18

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Тема на счет логики в Py 2.7



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version