基于传递给外部函数的参数调用内部函数

2024-05-16 10:07:26 发布

您现在位置: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

我想调用函数del_b()del_c()del_d(),当我把a传递给 delete_alphabet(a), 调用函数del_a()del_c()del_d(),当我将b传递给 delete_alphabet(b), 调用函数del_a()del_b()del_d(),当我将c传递给 delete_alphabet(c), 调用函数del_a()del_b()del_c(),当我将d传递给 delete_alphabet(d)

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


Tags: to方法函数参数defcodedelete调用函数
1条回答
网友
1楼 · 发布于 2024-05-16 10:07:26

在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技巧要干净得多。你知道吗

相关问题 更多 >