Ez az egyszerű parancs miért nem működik?
Python 3.7.2 win7 idle
int(print('2'))
output:
2
Traceback (most recent call last):
File "C:\Users\xx\Desktop\Gyakorlás.py", line 1, in <module>
int(print('2'))
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'
A print('2') outputja 2, tehát olyan, mintha int(2)-t írtam volna a fő parancsba. Annak meg 2 az értéke. A program mégis hibaüzit küld. Miért nem lehet int parancsban print parancs? De print parancsban már lehet int parancs.
A print egy függvény, ami két dolgot csinál, és fontos világosan látni a különbséget.
1. Kiír valamit a konzolra. Ez nem visszatérési érték.
2. Visszatér None értékkel. Ez visszatérési érték.
A példád összekeveri a kettőt, a None-t próbálod integerré alakítani.
„Miért nem lehet int parancsban print parancs? De print parancsban már lehet int parancs.”
Nem ártana, ha ezeknek a „parancsoknak” az értelmével is foglalkoznál, ezek ugyanis jelentéssel bíró nyelvi elemek, és az, hogy egy nem egészen korrektül használt általános gumifogalommal lefeded őket, semmit nem változtat a szerepükön, vagyis nem jogosít fel arra, hogy tetszés szerinti sorrendben és összefüggésben hányd őket kazalba.
A kolléga szavait alátámasztandó, írd be a következőt:
>>> a = print(print('2'))
Az eredmény:
2
None
A kettes számjegy tiszta sor, azt a belső print írta ki. Az érdekesség a None, amelyet a külső print szolgáltat, amikor azt kéred tőle, hogy az iménti tevékenység értékét írja ki -- tehát, amit a másik print végrehajtása után kap. Ez pedig: Semmi.
Nem ismerem a Python-interpretert, ezért nem tudom, hogy ez tényleg pusztán annyit jelent, hogy egyáltalán nem kap vissza értéket, vagy azt, hogy van ilyen, de csak az értelmező számára fenntartott, speciális kód formájában, azonban mindegy is; A program szempontjából nincs -- csak mellékesen jegyzem meg, hogy ez nem azonos például a nullával, ami tárolható, felhasználható, vagyis a program szempontjából nagyon is létező számérték volna. Az int(print('2')) paranccsal tehát arra utasítod a Pythont, hogy a nagy semmit alakítsa egésszé. Hát, aranyszívem van, de egy ilyen felkérés ellen én is berzenkednék...
+ A fenébe, félálomban nem néztem meg, mit másolok ki. Fölösleges az „a =” értékadás, elég ennyi:
>>> print(print('2'))
Mert semmi értelme.
+1: ezek függvények, nem parancsok.
A print azért van, hogy a konzolba kiírja, ami a zárójelen belül van. Minek alakítanád át mégis intté?
Szerintem ne erőltesd. Vagy keress valami értelmes forrást a tanuláshoz, mert ha minden ennyire alap dolognál így leakadsz, az nem sok jót jelent.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!