Konwersja typow

0

@Shalom napisal na blogu o operatorze porownania w php == vs ===.

Czy w Pythonie tego typu porownania/konwersje typow też mają takie neispodzianki ?

0
>>> 1 == True
True
2

Python jest silnie typowany, zarówno PHP jak i JS są słabo typowane. W Pythonie raczej nie ma takich jazd. W Pythonie 2 można było zrobić np.:

True = False
True == False // True

Ale w Pythonie 3 zarówno True i False są już słowami kluczowymi, więc tak się nie da. Silne typowanie nie pozwala na takie patologie.

0

Python nie pozwala na takie automatyczne konwersje. Ba, jest w tym nawet bardziej szczegółowy niż taka java. Jak zrobisz "ala"+1 to python zaprotestuje:

TypeError: unsupported operand type(s) for +: 'str' and 'int'

Musisz rzutować explicite.

0

Ciekawe jest, że w wypadku użycia if, puste sekwencje zwracają false. Dlatego nie trzeba używać metod isEmpty albo porównywać długość sekwencji do 0, a wystarczy:

if not seq:
if seq: 

ale o magicznych błędach języka podobnych do tego PHPowego, nie słyszałem.

0

@big_y Bo to działa w ten sposób, że:

if seq:
    pass

Jest równoważne:

if bool(seq):
    pass

A nie tak jak mogłeś myśleć, że:

if seq == True:
    pass
0

Py 2.7 (IDLE):

>>> 1 == True
True
>>> 1 is True
False
>>> bool(1)
True
>>> bool('1')
True
>>> bool('0')
True
>>> bool(int('0'))
False
>>>

Jak widać 1 == True daje zupełnie inny wynik niż 1 is True.

Natomiast takie coś

if 1 == True:
    pass

po sprawdzeniu parserem PEP8 daje komunikat:

E712 comparison to True should be 'if cond is True:' or 'if cond:'

0

Na https://www.python.org/dev/peps/pep-0008/ jest napisane aby do porównywania booli używać samego if

Don't compare boolean values to True or False using == .

Yes: if greeting:
No: if greeting == True:
Worse: if greeting is True:

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.