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不,最好使用显式映射。