Python 在IF语句之后如何重复两个相同的过程?

Python 在IF语句之后如何重复两个相同的过程?,python,python-3.x,if-statement,Python,Python 3.x,If Statement,在我定义了一些函数之后,我希望两个函数在IF循环中调用它们,只要满足一些条件: if __name__== "__main__": if args['param'] == None: fun_1(x, y, z) fun_4(x, y, z) fun_2(x, y, z) #SAME fun_a(x, y, z) fun_b(x, y, z) fun_c(x, y, z) elif args['param'] == 'yes' or

在我定义了一些函数之后,我希望两个函数在IF循环中调用它们,只要满足一些条件:

if __name__== "__main__":
if args['param'] == None:

    fun_1(x, y, z)
    fun_4(x, y, z) 
    fun_2(x, y, z)
    #SAME
    fun_a(x, y, z)
    fun_b(x, y, z)
    fun_c(x, y, z)

elif args['param'] == 'yes' or args['param'] == 'y' and param == True:
    fun_1(x, y, z)
    fun_3(x, y, z) 
    fun_6(x, y, z)
    #SAME
    fun_a(x, y, z)
    fun_b(x, y, z)
    fun_c(x, y, z)

elif args['param'] == 'no' or args['param'] == 'n' and param == True:

    fun_a(x, y, z)
    fun_b(x, y, z)
    fun_c(x, y, z)
但是,这是多余的,因为我调用了相同的函数:

    fun_a(x, y, z)
    fun_b(x, y, z)
    fun_c(x, y, z)
在第一个和第二个IF语句中。在这里如何称呼fun_a、fun_b和func_c:

if __name__== "__main__":
if args['param'] == None:

    fun_1(x, y, z)
    fun_4(x, y, z) 
    fun_2(x, y, z)
    #SAME
    fun_a(x, y, z)
    fun_b(x, y, z)
    fun_c(x, y, z)

elif args['param'] == 'yes' or args['param'] == 'y' and param == True:
    fun_1(x, y, z)
    fun_3(x, y, z) 
    fun_6(x, y, z)
    #SAME
    fun_a(x, y, z)
    fun_b(x, y, z)
    fun_c(x, y, z)

您可以按如下方式重写它:

if __name__== "__main__":
    if args['parm'] is None:
        fun_1(x, y, z)
        fun_4(x, y, z) 
        fun_2(x, y, z)   
    elif args['parm'] == 'yes' and param:
        fun_1(x, y, z)
        fun_3(x, y, z) 
        fun_6(x, y, z)

    if args['parm'] is None or (param and args['parm'] in ['yes', 'no']):
        fun_a(x, y, z)
        fun_b(x, y, z)
        fun_c(x, y, z)

请注意,您应该使用
foo is None
,而不是
foo==None
,并且
foo==True
foo

相同。您可以使用初始化为
True
的布尔标志,并且只有在不满足任何所需条件时才设置
False
,并且仅当标志为
True
时才运行公共函数:

postprocessing = True
if args['param'] == None:
    fun_1(x, y, z)
    fun_4(x, y, z) 
    fun_2(x, y, z)
elif args['param'] == 'yes' or args['param'] == 'y' and param == True:
    fun_1(x, y, z)
    fun_3(x, y, z) 
    fun_6(x, y, z)
elif not (args['param'] == 'no' or args['param'] == 'n' and param == True):
    postprocessing = False
if postprocessing:
    fun_a(x, y, z)
    fun_b(x, y, z)
    fun_c(x, y, z)

if-elif-else语句的格式不是如下所示:

if args['parm'] == None:
    #do something
elif args['parm'] == 'yes' and param == True:
    #do something else
else ##args['param'] == 'no' and param == True:
    #do something left
我从未见过关键字else后面的条件

在这里如何称呼fun_a、fun_b和func_c:

if __name__== "__main__":
if args['param'] == None:

    fun_1(x, y, z)
    fun_4(x, y, z) 
    fun_2(x, y, z)
    #SAME
    fun_a(x, y, z)
    fun_b(x, y, z)
    fun_c(x, y, z)

elif args['param'] == 'yes' or args['param'] == 'y' and param == True:
    fun_1(x, y, z)
    fun_3(x, y, z) 
    fun_6(x, y, z)
    #SAME
    fun_a(x, y, z)
    fun_b(x, y, z)
    fun_c(x, y, z)
在if-else分支中,实际上每个函数只调用一次

但是,正如Ami Tavory所示的例子,您可以使用if-elif而不是其他方法重构代码

if args['parm'] is None:
    # do something 
elif args['parm'] == 'yes' and param:
    # do something else
fun_a(x, y, z)
fun_b(x, y, z)
fun_c(x, y, z)

你有语法错误,
else
不能有条件我知道@OlivierMelançon,还有什么方法可以不重复地重新格式化语句?请先修复它,它会使你想做的事情模棱两可请澄清你想做的事。适用于这里。在您发布MCVE代码并准确指定问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中,并重现您指定的问题。StackOverflow不是编码、评论或教程资源。。。。什么是
IF循环
如果
是一个条件语句,循环是的
语句…我不知道这个是什么,你能详细说明一下吗?@anon看看如果我再加一个值会怎么样?。。。检查我的更新版本谢谢你的帮助!很高兴能帮上忙。添加另一个值与此答案中的操作无关。关键是要根据条件设置标志,因此条件在这里并不重要。这是一个更直观的好答案!
no
n
参数如何?