Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用字符串定义函数名_Python_Python 3.x - Fatal编程技术网

Python 如何使用字符串定义函数名

Python 如何使用字符串定义函数名,python,python-3.x,Python,Python 3.x,我试图创建一个更加动态的程序,在这个程序中,我根据变量字符串定义函数名 尝试使用如下变量定义函数: \uuuu func\u name=“fun” 定义函数名称() 打印('Hello from'+\uuuuu func\u name\uuuuuu) 乐趣 希望将此输出: Hello from fun 我发现的唯一例子是: 您可以更新globals: >>> globals()["my_function_name"] = lambda x: x + 1 >>&g

我试图创建一个更加动态的程序,在这个程序中,我根据变量字符串定义函数名

尝试使用如下变量定义函数:

\uuuu func\u name=“fun”
定义函数名称()
打印('Hello from'+\uuuuu func\u name\uuuuuu)
乐趣
希望将此输出:

Hello from fun
我发现的唯一例子是:

您可以更新
globals

>>> globals()["my_function_name"] = lambda x: x + 1
>>> my_function_name(10)
11
但通常使用功能相关的词典更方便:

my_func_dict = {
    "__func_name__" : __func_name__,
}

def __func_name__():
  print('Hello')
然后使用dict以名称作为键取回函数:

my_func_dict["__func_name__"]()

这也应该做到,使用
globals
动态更新函数名

def __func_name__():
  print('Hello from ' + __func_name__.__name__)

globals()['fun'] = __func_name__

fun()
输出将是

Hello from __func_name__

您需要使用
exec
。但是不要。这不是一件好事。@rdas为什么不是一件好事?这不是“更具活力”-它只是不好。不要这样做。除了给RCE带来巨大风险之外,它并不比普通代码好:@isethi为什么你认为动态命名函数是你应该做的事情,为什么Python应该允许你这么做?这很危险/几乎毫无意义。。。巨蟒确实试图避免让你射中自己的脚。。。(虽然-如果你真的想的话,它确实可以让你…)呃。。。这比仅仅做一件事有什么好处:
fun=\uu func\u name\uu
?(虽然还不清楚……我感觉OP可能希望输出为“Hello from fun”…)是的,你是对的!让我修改一下答案,让它变得更好:)有没有办法像在普通结构化函数中一样在lambda中运行多行代码?@isethi,你最好只为此定义一个函数,我以lambda为例,但你可以使用任何可调用的对象。