Vyřešeno: Jak zavolat libovolnou funkci s jejím jménem jako řetězcem

Hlavním problémem souvisejícím s voláním funkce s jejím názvem jako řetězcem je to, že může vést k bezpečnostním chybám. S kódem totiž mohou manipulovat uživatelé se zlými úmysly, kteří mohou do řetězce vložit svůj vlastní kód a spustit jej. To by jim mohlo umožnit přístup k citlivým datům nebo dokonce spustit škodlivý kód na serveru. Navíc to ztěžuje ladění, protože kód nelze snadno vysledovat zpět k jeho zdroji.

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)

Řádek 1: Tento řádek definuje funkci nazvanou add, která přebírá dva parametry, a a b, a vrací součet těchto dvou.

Řádek 5: Tento řádek vytváří řetězcovou proměnnou s názvem func, která obsahuje název funkce „add“.

Řádek 6: Tento řádek vytváří dvě proměnné x a y s hodnotami 2 a 3. Ty budou použity jako argumenty pro funkci.

Řádek 8: Tento řádek používá getattr() k volání funkce s názvem jako řetězcem. První argument je sys.modules[__name__], který se používá k získání přístupu ke všem funkcím v aktuálním modulu (v tomto případě je to __name__). Druhý argument je func, který obsahuje název naší požadované funkce (v tomto případě je to „add“). Nakonec předáme x a y jako argumenty pro naše volání funkce.

Co je funkce v Pythonu

Funkce v Pythonu je blok kódu, který provádí konkrétní úkol. Může přebírat argumenty (vstupy) a návratové hodnoty (výstupy). Funkce pomáhají rozdělit velké programy na menší, lépe ovladatelné části. Umožňují také opětovné použití kódu, což pomáhá zkrátit množství času potřebného k vývoji a ladění programů.

Jak mohu zavolat funkci s jejím názvem jako řetězcem

V Pythonu můžete volat funkci, která má jméno jako řetězec pomocí funkce eval(). Funkce eval() vezme řetězec jako argument a vyhodnotí jej jako výraz Pythonu. Pokud máte například řetězec obsahující název funkce, můžete tuto funkci zavolat pomocí funkce eval():

my_func = "moje_funkce"
eval(my_func)

Související příspěvky:

Zanechat komentář