Správný zápis funkce v Pythonu

MaBo

Správný zápis funkce v Pythonu
« kdy: 26. 10. 2021, 21:43:22 »
Omlouvám se za dotaz začátečníka:
tohle funguje:

Kód: [Vybrat]
>>> def test(a):
...     print(a*a)
...

Tohle v .py souboru nefunguje(PyCharm):

Kód: [Vybrat]
def test(a):
    print(a * a)

Proč?
Moc díky za pomoc.
M.
« Poslední změna: 26. 10. 2021, 22:12:46 od Petr Krčmář »


_Jenda

  • *****
  • 1 606
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:správný zápis funkce v pythonu
« Odpověď #1 kdy: 26. 10. 2021, 22:02:03 »
Mně to funguje. Bude potřeba napsat co znamená nefunguje.
Kód: [Vybrat]
~> cat /tmp/a.py
def test(a):
    print(a * a)

test(666)
~> py3 /tmp/a.py
443556
~>

MaBo

Re:Správný zápis funkce v Pythonu
« Odpověď #2 kdy: 26. 10. 2021, 22:18:15 »
./testdef.py
./testdef.py: řádek 1: chyba syntaxe poblíž neočekávaného tokenu „(“
./testdef.py: řádek 1: `def test(a):'

Někde hold dělám chybu, ale nevím kde.
M.

Re:Správný zápis funkce v Pythonu
« Odpověď #3 kdy: 26. 10. 2021, 22:30:22 »
Jak to spoustis?
Ta hlaska vypada jako by to zkousel interpretovat shell(nebo cmd na windows) misto pythonu.

Mozna bude potreba pridat na zacatek souboru shebang (https://stackoverflow.com/questions/6908143/should-i-put-shebang-in-python-scripts-and-what-form-should-it-take)

nebo spoustet python a predat mu ten soubor jako argument a ne spoustet primo ten script.

edit: aha koukam pycharm... to by asi melo bejt chytry... ale stejne... jak to teda poustis?

MaBo

Re:Správný zápis funkce v Pythonu
« Odpověď #4 kdy: 26. 10. 2021, 22:36:32 »
mám tam
#!/usr/bin/python3

Je to ubuntu 20.10

buď
python testdef.py

nebo
./testdef.py




Re:Správný zápis funkce v Pythonu
« Odpověď #5 kdy: 26. 10. 2021, 23:00:57 »
Jestli dobre ctu tu chybu tak to rika, ze na radku 1 mas "def test(a):" tak kde mas to #!/usr/bin/python3?

a je na te ceste opravdu ten python?
co vypise: "/usr/bin/python3 --version"?

a co "python --version"?

MaBo

Re:Správný zápis funkce v Pythonu
« Odpověď #6 kdy: 26. 10. 2021, 23:19:05 »
sh -vx ./testdef.py
#!/usr/bin/env python3
def test(a):
./testdef.py: 2: Syntax error: "(" unexpected
a není výstup, ale když zkusím mimo def x(), např. níže uvedené, tak to funguje

a = input("Zadej délku strany čtverce: ")
a = float(a)
o = a * 4
S = a ** 2
print("Obvod čtverce: ", o)
print("Obsah čtverce: ", S)

Jde o to, že neumím zprovoznit funkci.

Re:Správný zápis funkce v Pythonu
« Odpověď #7 kdy: 27. 10. 2021, 07:34:31 »
To by moh bejt bordel v odsazení.
Chtělo by to vidět tu funkci v kontextu okolo.

Re:Správný zápis funkce v Pythonu
« Odpověď #8 kdy: 27. 10. 2021, 08:39:58 »
Funkce je v poradku.
problem je ta exekuce.... ted sem to vyzkousel
Mam soubor testdef.py
Kód: [Vybrat]
#!/usr/bin/python
def test (a):
    print (a * a)

test (5)

a tady vystup z konzole:
Kód: [Vybrat]
[lstpr@mframe tmp]$ sh -vx testdef.py
#!/usr/bin/python
def test (a):
testdef.py: line 2: syntax error near unexpected token `('
testdef.py: line 2: `def test (a):'
[lstpr@mframe tmp]$ python testdef.py
25
[lstpr@mframe tmp]$ chmod u+x testdef.py
[lstpr@mframe tmp]$ ./testdef.py
25
[lstpr@mframe tmp]$

Kdyz to spoustis tim sh -vx tak to ignoruje ten shebang.

Kdyby to byla chyba v tom pythonu tak to vypada trochu jinak. Napriklad:
Kód: [Vybrat]
  File "/home/lstpr/tmp/./testdef.py", line 2
    def test [a]:
             ^
SyntaxError: invalid syntax

MaBo

Re:Správný zápis funkce v Pythonu
« Odpověď #9 kdy: 27. 10. 2021, 08:45:41 »
/usr/bin/python3 --version
Python 3.9.7
...
python --version
Python 2.7.18

Tady jsou dvě verze, ale protože tomu nerozumím, nevím, jestli je to špatně nebo ne.

Re:Správný zápis funkce v Pythonu
« Odpověď #10 kdy: 27. 10. 2021, 08:54:06 »
/usr/bin/python3 --version
Python 3.9.7
...
python --version
Python 2.7.18

Tady jsou dvě verze, ale protože tomu nerozumím, nevím, jestli je to špatně nebo ne.
Je to v poradku.
python 3 prinesl nejaky nekompatibilni zmeny takze spousta systemu potrebuje obe verze.

Zkus tomu souboru pridat to pravo na spusteni "chmod u+x testdef.py" a spustit ho primo "./testdef.py"

MaBo

Re:Správný zápis funkce v Pythonu
« Odpověď #11 kdy: 27. 10. 2021, 09:00:41 »
Nastavil jsem tedy chmod u+x testdef.py  a v bash žádný výstup. Už před tím jsem to ale udělal i ručně a nemá to na exekuci žádný vliv.

Re:Správný zápis funkce v Pythonu
« Odpověď #12 kdy: 27. 10. 2021, 09:27:14 »
kdybeste nam ukazal cely soubor, tak by byl problem davno vyresen.

_Jenda

  • *****
  • 1 606
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:Správný zápis funkce v Pythonu
« Odpověď #13 kdy: 27. 10. 2021, 09:50:05 »
sh -vx ./testdef.py
Tohle znamená, že to spouštíš shellem, nikoli Pythonem. sh je úplně jiný programovací (skriptovací) jazyk a funkce se v něm nedefinují pomocí def a dvojtečky na konci, takže to samozřejmě nefunguje.
Nastavil jsem tedy chmod u+x testdef.py  a v bash žádný výstup.
Pokud je v tom souboru jenom definice funkce, ale žádný příkaz co by tu funkci spouštěl/co by něco vypisoval, tak logicky žádný výstup nebude.

MaBo

Re:Správný zápis funkce v Pythonu
« Odpověď #14 kdy: 27. 10. 2021, 10:12:00 »
Ten soubor je
#!/usr/bin/python
def test (a):
    print (a * a)

exekuci provádím ./testdef.py. Čekal jsem, že se odřádkuje a já napíšu např.  test(55) a vyjde výstup, ale dělám to asi špatně. Jaký je tedy správný postup pro exekuci .py souborů v bash?