为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

人到中年有点甜 2021-09-11 16:16:06
在 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 个块的狡猾的方法来做到这一点?***添加信息......我现在拥有的是一个可怕的代码:#block1f1()f2()f3()function01( par1=..., par2=..., par3=..., par4=...................)r1()r2()r3()#block2f1()f2()f3()function02( par43=..., par21=...)r1()r2()r3()#block3f1()f2()f3()function03( par17=..., par37=..., par11=...)r1()r2()r3()#block4...................................#block17.......17 个函数之一具有“无名”参数。:-S
查看完整描述

3 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

为什么不使用循环,像这样:


for i in range(17):

    f1()

    f2()

    ....


查看完整回答
反对 回复 2021-09-11
?
桃花长相依

TA贡献1860条经验 获得超8个赞

列出函数及其参数:


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_func02


new_pargs_func03=[10,20,"World"]

ff[2][1]= new_pargs_func03


查看完整回答
反对 回复 2021-09-11
?
森栏

TA贡献1810条经验 获得超5个赞

看看contextlib 模块。非常基本的例子


from contextlib import ContextDecorator


def 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 front1

print from front2

print from front3

print from foo

print from rear1

print from rear2

print from rear3

print from front1

print from front2

print from front3

print from bar

print from rear1

print from rear2

print from rear3


查看完整回答
反对 回复 2021-09-11
  • 3 回答
  • 0 关注
  • 200 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号