de-vraag
  • Klausimai
  • Žymos
  • Vartotojai
Pranešimai
Apdovanojimai
Registracija
Užsiregistravę gausite pranešimus apie atsakymus ir komentarus į savo klausimus.
Prisijungti
Jei jau turite paskyrą, prisijunkite ir patikrinkite naujus pranešimus.
Už pridėtus klausimus, atsakymus ir komentarus bus skiriami apdovanojimai.
Daugiau
Šaltinis
Redaguoti
 ricree
ricree
Question

Modulio funkcijos iškvietimas naudojant jos pavadinimą (eilutę)

Kaip geriausiai iškviesti funkciją, jei programoje "Python" yra eilutė su funkcijos pavadinimu. Tarkime, turiu modulį foo ir eilutę, kurios turinys yra "bar". Kaip geriausia iškviesti foo.bar()?

Man reikia gauti funkcijos grįžtamąją vertę, todėl nenoriu tiesiog naudoti eval. Supratau, kaip tai padaryti naudojant eval apibrėžti laikinąją funkciją, kuri grąžina tos funkcijos iškvietimo rezultatą, bet tikiuosi, kad yra elegantiškesnis būdas tai padaryti.

1553 2008-08-06T03:36:08+00:00 3
Tommy Herbert
Tommy Herbert
Redaguotas klausimas popietr sausis 2019 в 3:03
Programavimas
python
object
Šis klausimas turi 1 atsakymas atsakymų anglų kalba, norėdami juos perskaityti prisijunkite prie savo paskyros.
Solution / Answer
Patrick Johnmeyer
Patrick Johnmeyer
priešpietr rugpjūtis 2008 в 3:57
2008-08-06T03:57:16+00:00
Daugiau
Šaltinis
Redaguoti
#8408535

Daroma prielaida, kad modulis foo su metodu bar:

import foo
method_to_call = getattr(foo, 'bar')
result = method_to_call()

Galite sutrumpinti 2 ir 3 eilutes iki:

result = getattr(foo, 'bar')()

jei tai būtų prasmingiau jūsų naudojimo atvejui.

Tokiu būdu getattr galite naudoti su klasės egzemplioriumi susietiems metodams, modulio lygmens metodams, klasės metodams... sąrašą galima tęsti.

 Boris
Boris
Redaguotas atsakymas popietr spalis 2019 в 8:24
1861
0
 sastanin
sastanin
popietr gegužė 2009 в 12:45
2009-05-07T12:45:13+00:00
Daugiau
Šaltinis
Redaguoti
#8408537
locals()["myfunction"]()

arba

globals()["myfunction"]()

locals grąžina žodyną su dabartine vietinių simbolių lentele. globals grąžina žodyną su pasauline simbolių lentele.

494
0
 HS.
HS.
priešpietr rugpjūtis 2008 в 11:35
2008-08-07T11:35:23+00:00
Daugiau
Šaltinis
Redaguoti
#8408536

Patrick's sprendimas yra bene švariausias. Jei reikia dinamiškai paimti ir modulį, galite jį importuoti taip:

module = __import__('foo')
func = getattr(module, 'bar')
func()
Ben Hoyt
Ben Hoyt
Redaguotas atsakymas popietr vasaris 2017 в 6:08
308
0
Pridėti klausimą
Kategorijos
Visi
Technologijos
Kultūra / poilsis
Gyvenimas / Menai
Mokslas
Profesionalus
Verslas
Vartotojai
Visi
Naujas
Populiarus
1
Elena Nudel
Registruota prieš 9 valandas
2
firdaus faizal
Registruota prieš 10 valandų
3
Виталий Теслюк
Registruota prieš 2 dienas
4
shokir qochqorov
Registruota prieš 2 dienas
5
Roxana Elizabeth CASTILLO Avalos
Registruota prieš 1 savaitę
DA
DE
EL
ES
FR
ID
IT
JA
LT
LV
NL
PT
RU
SL
TR
ZH
© de-vraag 2022
Šaltinis
stackoverflow.com
pagal licenciją cc by-sa 3.0 nurodant autorystę