Ratkaistu: Kuinka kutsua mitä tahansa funktiota, jonka nimi on merkkijono

Viimeisin päivitys: 09/11/2023

Suurin ongelma, joka liittyy funktion kutsumiseen sen nimellä merkkijonona, on, että se voi johtaa tietoturva-aukoihin. Tämä johtuu siitä, että pahantahtoiset käyttäjät voivat manipuloida koodia, ja he voivat syöttää oman koodinsa merkkijonoon ja suorittaa sen. Tämä voi antaa heille mahdollisuuden päästä käsiksi arkaluontoisiin tietoihin tai jopa suorittaa haitallista koodia palvelimella. Lisäksi se tekee virheenkorjauksesta vaikeaa, koska koodia ei voida helposti jäljittää sen lähteeseen.

You can use the built-in function getattr() to call a function with its name as a string.

Example: 
def add(a, b): 
	return a + b 
  
# Driver code 
func = 'add' # String containing name of the function 
x, y = 2, 3 # Arguments to pass to the function 
  
# Calling the function using getattr() method 
getattr(sys.modules[__name__], func)(x, y)

Rivi 1: Tämä rivi määrittää funktion nimeltä add, joka ottaa kaksi parametria, a ja b, ja palauttaa näiden kahden summan.

Rivi 5: Tämä rivi luo merkkijonomuuttujan nimeltä func, joka sisältää funktion "add" nimen.

Rivi 6: Tämä rivi luo kaksi muuttujaa x ja y, joiden arvot ovat 2 ja 3. Näitä käytetään funktion argumentteina.

Rivi 8: Tämä rivi käyttää getattr()-funktiota kutsumaan funktiota sen nimellä merkkijonona. Ensimmäinen argumentti on sys.modules[__name__], jota käytetään pääsyyn kaikkiin nykyisen moduulin toimintoihin (tässä tapauksessa se on __nimi__). Toinen argumentti on func, joka sisältää haluamamme funktion nimen (tässä tapauksessa se on "add"). Lopuksi välitämme x:n ja y:n argumentteina funktiokutsullemme.

Mikä on funktio Pythonissa

Pythonin funktio on koodilohko, joka suorittaa tietyn tehtävän. Se voi ottaa argumentteja (syötteitä) ja palauttaa arvoja (ulostuloja). Toiminnot auttavat hajottamaan suuret ohjelmat pienempiin, paremmin hallittaviin osiin. Ne mahdollistavat myös koodin uudelleenkäytön, mikä auttaa vähentämään ohjelmien kehittämiseen ja virheenkorjaukseen kuluvaa aikaa.

Kuinka voin kutsua funktiota, jolle sen nimi on annettu merkkijonona

Pythonissa voit kutsua funktiota, jonka nimi on annettu merkkijonona, käyttämällä eval()-funktiota. Funktio eval() ottaa merkkijonon argumenttina ja arvioi sen Python-lausekkeena. Jos sinulla on esimerkiksi merkkijono, joka sisältää funktion nimen, voit kutsua funktion eval()-funktiolla:

my_func = "oma_toiminto"
eval(my_func)

Related viestiä: