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)