Python 根据传递给外部函数的参数调用内部函数

Python 根据传递给外部函数的参数调用内部函数,python,Python,我有一个带一个参数的函数,在函数内部,有一个带可能参数的内部函数,可以传递给外部函数 def delete_alphabet(del_apha): def del_a(): # code to delete a def del_b(): # code to delete b def del_c(): # code to delete c def del_d(): # code to delete d

我有一个带一个参数的函数,在函数内部,有一个带可能参数的内部函数,可以传递给外部函数

def delete_alphabet(del_apha):
    def del_a():
        # code to delete a
    def del_b():
        # code to delete b
    def del_c():
        # code to delete c
    def del_d():
        # code to delete d
当我将
a
传递到时,我想调用函数
del_b()
del_c()
del_d()
删除字母表(a)
, 当我将
b
传递到时,调用函数
delu a()
delu c()
delu d()
删除字母表(b)
, 当我将
c
传递到时,调用函数
delu a()
delu b()
delu d()
删除字母表(c)
, 当我将
d
传递到时,调用函数
delu a()
delu b()
delu c()
删除字母表(d)


有人能给我一个解决这个问题的方法吗?

在Python中,函数只是对象。您的方法可以如此简单:

In [22]: def del_a(): print('deleting a')

In [23]: def del_b(): print('deleting b')

In [24]: def del_c(): print('deleting c')

In [25]: def del_d(): print('deleting d')

In [26]: funcs = {'a':(del_a, del_c, del_d), 'b': (del_a, del_b, del_d)}

In [27]: def delete_alphabet(del_alpha, funcs=funcs):
    ...:     for f in funcs[del_alpha]:
    ...:         f()
    ...:

In [28]: delete_alphabet('a')
deleting a
deleting c
deleting d

In [29]: delete_alphabet('b')
deleting a
deleting b
deleting d
编辑 因此,鉴于评论中的澄清,我的方法如下:

In [30]: funcs = [('a', del_a), ('b', del_b), ('c', del_c), ('d', del_d)]

In [31]: def delete_alphabet(del_alpha, funcs=funcs):
    ...:     for c, f in funcs:
    ...:         if c != del_alpha:
    ...:             f()
    ...:

In [32]: delete_alphabet('a')
deleting b
deleting c
deleting d

In [33]: delete_alphabet('b')
deleting a
deleting c
deleting d

In [34]: delete_alphabet('c')
deleting a
deleting b
deleting d

In [35]: delete_alphabet('d')
deleting a
deleting b
deleting c

保持从字符串到函数的某种映射比使用一些
eval
hack要干净得多。

什么是
b
?什么是
a
?“删除”是什么意思?希望不是
del
。。。但为什么这些函数都是闭包呢?它们不能在外部定义吗?更多详细信息,请
a
b
可以是我想从某个文件中删除的任何字符串。不
del
。为什么不
delete_字符串(x)
其中
x
可以是
a
b
?如果有疑问,请使用
dict
。函数可以是dict的值。如果我有20多个有效参数要传递,它将增加代码中的行数,这看起来不太好,因此需要采取一些替代方法来避免重复调用函数
funcs={'a':(del_a,del_c,del_d),'b':(del_a,del_b,del_d)}
这是我必须为所有20多个参数编写的。@亲爱的,除了列举给定参数要调用的函数之外,还有什么其他方法呢?Python无法读懂你的心思。。。是否有某种方式将
'a'
与您可以通过编程获得的函数联系起来?如果是这样的话,你还没有在你的问题中具体说明。@Sweety啊。我知道你现在想要什么了。我没有意识到,
delu a
没有被调用
'a'
。我看到了这种模式……我可以考虑使用eval或其他方法将字符串作为函数调用,但无法找到确切的解决方案。@Sweety不,最好使用显式映射。