Správný zápis funkce v Pythonu

Re:Správný zápis funkce v Pythonu
« Odpověď #15 kdy: 27. 10. 2021, 10:25:49 »
Zruš mezeru mezi test a (5)


MaBo

Re:Správný zápis funkce v Pythonu
« Odpověď #16 kdy: 27. 10. 2021, 10:39:12 »
Zkoušel jsem zadat do tohotéž souboru i jiný z netu ukradený zdroják funkce, třeba
#!/usr/bin/python
def mocnina(m, n=3):
       print(m**n)

a po ./testdef.py se nic neděje.

Re:Správný zápis funkce v Pythonu
« Odpověď #17 kdy: 27. 10. 2021, 10:47:45 »
Zkoušel jsem zadat do tohotéž souboru i jiný z netu ukradený zdroják funkce, třeba
#!/usr/bin/python
def mocnina(m, n=3):
       print(m**n)

a po ./testdef.py se nic neděje.
Protoze jsi tu funkci definoval, ale nezavolal.

MaBo

Re:Správný zápis funkce v Pythonu
« Odpověď #18 kdy: 27. 10. 2021, 10:50:56 »
Díky, a jak ji mám zavolat?

Re:Správný zápis funkce v Pythonu
« Odpověď #19 kdy: 27. 10. 2021, 10:56:19 »
...
 Čekal jsem, že se odřádkuje a já napíšu např.  test(55) a vyjde výstup, ale dělám to asi špatně.
...

Tohle je chybne ocekavani...
bud si pustim python repl kam muzu psat to volani: python
nebo pustim program ktery je v souboru: python testdef.py
ale pak to jen probehne program a nic se nepocita/nezavola... protoze tam neni volani...

To co cekas se da udelat pomoci: python -i testdef.py

Coz znamena: spust mi python repl a naimportuj kod ze souboru testdef.py



Re:Správný zápis funkce v Pythonu
« Odpověď #20 kdy: 27. 10. 2021, 11:00:21 »
Díky, a jak ji mám zavolat?

volani funkce je to: test(55) co chces psat rucne... muze to byt i primo v tom souboru:
Kód: [Vybrat]
#!/usr/bin/python

def test (a):
    print (a * a)

test (55) # <- tohle je volani

MaBo

Re:Správný zápis funkce v Pythonu
« Odpověď #21 kdy: 27. 10. 2021, 11:10:40 »
Moc díky listoper a vlastně všem za pomoc. Psal jsem tu funkci špatně a nikde jsem se tohle nedočetl. To
#!/usr/bin/python3
def test(a):
       print(a * a)
test(55)

i python -i testdef.py funguje. Jak mám tedy napsat fci v .py souboru, abych mohl v bash po ./tesdef.py zadat do test(...) libovolné číslo? Opravdu moc se omlouvám za ty dotazy; v manuálech na netu jsem se nic z toho, co jste tu napsali, nedočetl.

_Jenda

  • *****
  • 1 601
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:Správný zápis funkce v Pythonu
« Odpověď #22 kdy: 27. 10. 2021, 11:24:29 »
i python -i testdef.py funguje. Jak mám tedy napsat fci v .py souboru, abych mohl v bash po ./tesdef.py zadat do test(...) libovolné číslo?
Můžeš na začátek napsat
Kód: [Vybrat]
#!/usr/bin/env -S python3 -inebo
Kód: [Vybrat]
#!/usr/bin/python3 -iNicméně je to velmi nestandardní a nikdo to nedělá. Normálně se tohle řeší tak, že si pustíš ideálně ipython (což lidi používají mnohem raději než vestavěný REPL bez funkcí) a napíšeš from testdef import test.

Re:Správný zápis funkce v Pythonu
« Odpověď #23 kdy: 27. 10. 2021, 11:37:04 »
Moc díky listoper a vlastně všem za pomoc. Psal jsem tu funkci špatně a nikde jsem se tohle nedočetl. To
#!/usr/bin/python3
def test(a):
       print(a * a)
test(55)

i python -i testdef.py funguje. Jak mám tedy napsat fci v .py souboru, abych mohl v bash po ./tesdef.py zadat do test(...) libovolné číslo? Opravdu moc se omlouvám za ty dotazy; v manuálech na netu jsem se nic z toho, co jste tu napsali, nedočetl.

Ty chces v bash zavolat fukci kterou mas definovanou v pythonu....
Myslim, ze tvuj zivot bude jednodussi kdyz to chtit nebudes  ;)

Myslim, ze jsou lepsi cesty....

Co treba takhle:
Kód: [Vybrat]
#!/usr/bin/python
import sys

def test (a):
    return (a * a)

if __name__ == "__main__":
    arg = sys.argv [1]
    print(test (int (arg)))


pak to muzu volat z bash takhle:
Kód: [Vybrat]
./testdef.py 5
a 5 vymen za libovolne cislo...

MaBo

Re:Správný zápis funkce v Pythonu
« Odpověď #24 kdy: 27. 10. 2021, 12:27:20 »
Moc díky listoper! Opravdu moc.
Takže jestli to správně chápu, tak musím nastudovat, jak vlastně python iniciuje skripty; zatím o tom vím kulový. Ale jestli máš ještě čas, mohl bys mi vysvětlit

if __name__ == "__main__":
    arg = sys.argv [1]
    print(test (int (arg)))


Re:Správný zápis funkce v Pythonu
« Odpověď #25 kdy: 27. 10. 2021, 12:49:38 »
Moc díky listoper! Opravdu moc.
Takže jestli to správně chápu, tak musím nastudovat, jak vlastně python iniciuje skripty; zatím o tom vím kulový. Ale jestli máš ještě čas, mohl bys mi vysvětlit

if __name__ == "__main__":
    arg = sys.argv [1]
    print(test (int (arg)))

Pokud voláš modul jako program, pak je podmínka splněna a spustí se ten blok. Bežně se to tedy používá, pokud chceš aby modul fungoval i jako program. V podstatě tak funguje dost balíků/modulů v zakladní knihovně. Např. modul `venv`, který by ses určitě měl naučit používat. Python spustí modul venv a předá mu parametr `virtual_env_name`.

```
python -m venv virtual_env_name
``` 

Mrkni třeba tady:  https://github.com/python/cpython/blob/82a662e5216a9b3969054c540a759a9493468510/Lib/venv/__init__.py#L503

a dokumentace https://docs.python.org/3/library/__main__.html

MaBo

Re:Správný zápis funkce v Pythonu
« Odpověď #26 kdy: 27. 10. 2021, 13:00:11 »
uetoyo:
Tak tímhle jsem měl začít. Škoda, že tohle není popsáno v manuálech hned v lekcích o zápisech funkcí.
Moc díky.

Re:Správný zápis funkce v Pythonu
« Odpověď #27 kdy: 27. 10. 2021, 13:05:02 »
Moc díky listoper! Opravdu moc.
Takže jestli to správně chápu, tak musím nastudovat, jak vlastně python iniciuje skripty; zatím o tom vím kulový. Ale jestli máš ještě čas, mohl bys mi vysvětlit

if __name__ == "__main__":
    arg = sys.argv [1]
    print(test (int (arg)))

uetoyo to rika dobre.
Zkusim to vysvetlit jeste selsky...
Tohle if __name__ == "__main__": rika pokud je tenhle soubor spustenej jako program a ne treba importnutej nejakym jinym souborem....

Diky tomu ze to tam napises muzes tehle soubor primo spustit, ale i importovat jinym programem ktery chce taky pouzit funkci test....
Protoze v tom pripade ten vyraz bude false a:
Kód: [Vybrat]
    arg = sys.argv [1]
    print(test (int (arg)))
se nevykona takze tam zustane jen ta definice te funkce... a ne nejake nechtene vypisy na stdout


MaBo

Re:Správný zápis funkce v Pythonu
« Odpověď #28 kdy: 27. 10. 2021, 13:36:09 »
listoper:
Neocenitelné rady. Díky.