有没有一种巧妙的方法来调用一个函数,该函数依次调用具有不同数量和类型的参数的多个函数?

在 Python 2.7 中,我有几个无法修改的函数,只能使用。其中三个是“前”的,三个是“后”的;让我们称它们为 f1()、f2()、f3()、r1()、r2()、r3()。而且我还有 17 个函数,它们具有不同数量和类型的参数,具有不同的名称关键字,例如:


function01( par1='hello' , par2=847, par3=True , par4=17.821 , ........... )

function02( par43=(8.3+17.9i) , par21='august' )

等等。


我需要这样称呼他们全部 17 个:


f1()

f2()

f3()

functionNN(............................)

r1()

r2()

r3()

该代码块 17 次(对于 NN=1 到 17)!


有没有不写 17 个块的狡猾的方法来做到这一点?


***添加信息......我现在拥有的是一个可怕的代码:


#block1

f1()

f2()

f3()

function01( par1=..., par2=..., par3=..., par4=...................)

r1()

r2()

r3()


#block2

f1()

f2()

f3()

function02( par43=..., par21=...)

r1()

r2()

r3()


#block3

f1()

f2()

f3()

function03( par17=..., par37=..., par11=...)

r1()

r2()

r3()


#block4

.......

.......

.......

.......

.......

#block17

.......

17 个函数之一具有“无名”参数。:-S


人到中年有点甜
浏览 201回答 3
3回答

FFIVE

为什么不使用循环,像这样:for i in range(17):    f1()    f2()    ....

桃花长相依

列出函数及其参数:ff=[ [function01, [10,20,"something"],  dict(par1='hello', par2=847, par3=True, par4=17.821)],     [function02, [],                   dict(par43=(8.3+17.9i), par21='august')],     [function03, [1,2,"hello"],        {}],     ...    ]for  i in range(17):        f1()        f2()        f3()        posargs=ff[i][1]        # positional args        kw=ff[i][2]             # keyword args for function_i        ff[i][0](*posargs,**kw) # calling function_i        r1()        r2()        r3()您也可以稍后更改参数。例如:ff[1][2]["par21"]="december"new_kw_func02= dict(par43=(1+2i), par21='december'])ff[1][2]= new_kw_func02new_pargs_func03=[10,20,"World"]ff[2][1]= new_pargs_func03

森栏

看看contextlib 模块。非常基本的例子from contextlib import ContextDecoratordef front1():    print('print from front1')def front2():    print('print from front2')def front3():    print('print from front3')def rear1():    print('print from rear1')def rear2():    print('print from rear2')def rear3():    print('print from rear3')class mycontext(ContextDecorator):    def __enter__(self):        front1()        front2()        front3()        return self    def __exit__(self, *exc):        rear1()        rear2()        rear3()        return False@mycontext()def foo():    print('print from foo')@mycontext()def bar():    print('print from bar')if __name__ == '__main__':    foo()    bar()    # or as alternative    # my_funcs = [foo, bar]    # for func in my_funcs:        # func()输出print from front1print from front2print from front3print from fooprint from rear1print from rear2print from rear3print from front1print from front2print from front3print from barprint from rear1print from rear2print from rear3
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python