繁体   English   中英

如何用字符串调用 function? [复制]

[英]How can I call a function with a string? [duplicate]

我使用了以下代码:

from time import time
import datetime

now = datetime.datetime.now()
Report = now.strftime("%Y%m%d_%H%M%S") + "Prueba llamada de funciones" + ".txt"
modo=0



def llamar_funciones():
    if (modo==1):
        Alimentaciones_1(Report)
        Alimentaciones_2(Report)
    else:
        print("¿Que ensayos de alimentaciones quieres hacer?")
        Ensayo=input()
        Nombre_Ensayo= "Alimentaciones_" + Ensayo
        print(Nombre_Ensayo)
        Nombre_Ensayo(Report)
def Alimentaciones_1(Report):
    f = open(Report,"a")
    f.write("1.funtzioa")
    f.close()
def Alimentaciones_2(Report):
    f = open(Report,"a")
    f.write("\n2.funtzioa")
    f.close()
    
llamar_funciones()

我收到以下错误:

类型错误:'str' object 不可调用

如何根据变量“modo”的值调用 function 1 或 2?

您只需要另一个 if 语句。 您不能调用字符串,但可以基于它们进行分支。

if Ensayo == "1":
    Alimentaciones_1(Report)
elif Ensayo == "2":
    Alimentaciones_2(Report)
else:
    # ... Handle invalid user input here ...

对于它的价值,您可以调用名称为字符串的 function,但它的编码风格很差,而且极易出错。 需要明确的是,以下内容用于教育目的; 不要这样做 上面的代码片段是做这类事情的公认方式。

eval("Alimentaciones_{}".format(Ensayo))(Report) # <-- Bad idea

Python 有两个函数可能对您有所帮助,exec() 和 eval()。 他们都接受一个字符串并将其视为 python 代码(您可以使用输入中的字符串并运行它),并且行为略有不同。

但是,这很重要,不要使用它们。 完全没有。 这些函数非常危险,因为它们让用户根据需要从您的代码中调用每个 function,这是不好的做法。

我建议使用 if 案例来检查您想要的值,例如:

if my_str == "my_func":
    my_func(...)
elif my_str == "my_other_func":
    my_other_func(...)
...

这可能很乏味,但它会让您的用户调用他们需要的任何东西,而不是更多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM