Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: JanNovak 10. 05. 2018, 17:17:37

Název: Python - volání funkce z proměnné
Přispěvatel: JanNovak 10. 05. 2018, 17:17:37
Ahoj,

mám poměrně dost začátečnickou otázku. Potřeboval bych volat funkci (nebo nějakou metodu) z proměné. Řekněmě, že mám několik funkcí jejiž jména mám v seznamu a tyto funkce bych chtěl postupně volat nějakým cyklem. Příklad:

Kód: [Vybrat]
"""Takhle to samozřejmě nefunguje """
seznamFunkci = [ "funkce1", "funkce2", "funkce3"]
for i in seznamFunkci:
     seznamFunkci[i]()

Jak bych to měl udělat?
Název: Re:python - volání funkce z proměné
Přispěvatel: gogo 10. 05. 2018, 17:29:40
zalezi na co to chces.
treba:
seznamFunkci = [ funkce1, funkce2 ]
for i in seznamFunkci:
  i()


nebo:
seznamFunkci = [ 'funkce1', 'funkce2' ]
for i in seznamFunkci:
  globals()()
Název: Re:python - volání funkce z proměné
Přispěvatel: gogo 10. 05. 2018, 17:32:49
jsem jelito. ta druha verze ma vypadat tak:
Kód: [Vybrat]
seznamFunkci = [ 'funkce1', 'funkce2' ]
for i in seznamFunkci:
  globals()[i]()
Název: Re:python - volání funkce z proměné
Přispěvatel: gll 10. 05. 2018, 17:33:07
jména funkcí napište bez uvozovek
Název: Re:Python - volání funkce z proměnné
Přispěvatel: JanNovak 10. 05. 2018, 17:55:24
Super to by šlo. Není to uplně estetické, ale funguje to. Jen to nefunguje při volání metody:
Kód: [Vybrat]
nazevTridy.globals()[i]()
Název: Re:Python - volání funkce z proměnné
Přispěvatel: JanNovak 10. 05. 2018, 18:43:22
Kód: [Vybrat]
class myClass:
      def f1(self):
            print("funguje to")

var = "f1" # nazev funkce ve třídě myClass
m = myClass()

""" ________________ """

m.var() # nefunguje
m.globals()[var]() # nefunguje

Potřeboval bych nějak nasměrovat. Vůbec ani nevím pod čím bych odpověď měl hledat.
Název: Re:Python - volání funkce z proměnné
Přispěvatel: gll 10. 05. 2018, 19:01:28
Potřeboval bych nějak nasměrovat. Vůbec ani nevím pod čím bych odpověď měl hledat.

__dict__

https://docs.python.org/3/reference/datamodel.html
Název: Re:Python - volání funkce z proměnné
Přispěvatel: gll 10. 05. 2018, 19:03:06

Kód: [Vybrat]
class myClass:
      def f1(self):
            print("funguje to")

var = "f1" # nazev funkce ve třídě myClass
m = myClass()

m.__dict__[var]()
Název: Re:Python - volání funkce z proměnné
Přispěvatel: BoneFlute 10. 05. 2018, 19:09:16
- máš-li název funkce, hledáš v patřičném slovníku
- znáš-li funkci, a jen ji chceš předávat, tak ji normálně použiješ, ale bez závorek
- funkci, kterou máš uloženou v proměnné zavoláš tak, že jí dáš závorky.


def a():
   return "A"

def b():
   return "B"

class Klass:
   def m(self):
      return "C"

inst = Klass()

xs = [a, b, inst.m]

for m in xs:
   print m()
print globals()["a"]()
print globals()["b"]()
print getattr(inst, "a")()
Název: Re:Python - volání funkce z proměnné
Přispěvatel: gll 10. 05. 2018, 19:11:21
getattr je lepší než moje rada s __dict__
Název: Re:Python - volání funkce z proměnné
Přispěvatel: JanNovak 11. 05. 2018, 09:58:33
gll, BoneFlute: To je super... moc vám děkuju.