将参数传递给函数时如何定义条件? (在 python 中更有效地编码)

How to define a condition when passing arguments to a function? ( coding more efficiently in python)

在此代码中,我有两个函数 shoppingAshoppingS 共享多行。但是,我通过的论点略有不同。一个需要两个额外的参数。我想知道如何通过仅具有一个购物功能来提高代码效率,如果 model_index == 0 我可以传递前两个参数并传递四个参数如果model_index == 1.

我应该注意,因为这些参数将在其他函数中使用,所以我不想定义 GLOBAL。

model_index = 0

def shoppingA(agemean,agestd):
    global sum_prod, sum_sales
    age = agemean - agestd
    sum_prod += 1
    sum_sales += 20
    if sum_prod < 5 and age < 7:
        print("insufficient")
    
    
def shoppingS(agemean,agestd,randstd,randmean):
    global sum_prod, sum_sales
    age = agemean * randmean - agestd * randstd
    sum_prod += 1
    sum_sales += 1
    if sum_prod < 5 and age <7:
        print("insufficient")    
############################
def main(parameters):
    global sum_prod, sum_sales
    sum_prod = 0
    sum_sales = 0
    agemean = parameters[0]
    agestd = parameters[1]
    if model_index != 0: 
        randstd = parameters[2]
        randmean = parameters[3]
    if model_index == 0:
        shoppingA(agemean,agestd)
    else:
        shoppingS(agemean,agestd,randstd,randmean)       
###########################        
if model_index == 0:
    agemean = 5     
    agestd = 0.508           
    parameters = [agemean,agestd]
if model_index == 1:
    agemean = 8      
    agestd = 0.4       
    randstd = 9  
    randmean = 24.7    
    parameters = [agemean,agestd,randstd,randmean]   
if __name__ == "__main__":
    obj = main(parameters)

换句话说,我想做一些类似于您在下面看到的事情,其中​​参数可以以灵活的方式传递。

model_index = 0

def shopping():
    if model_index == 0:
        shopping(agemean,agestd)
    else:
        shopping(agemean,agestd,randstd,randmean)
    global sum_prod, sum_sales
    if model_index == 0:
        age = agemean - agestd
    else:
        age = agemean * randmean - agestd * randstd
    sum_prod += 1
    sum_sales += 20
    if sum_prod < 5 and age < 7:
        print("not_insufficient")

    
############################
def main(parameters):
    global sum_prod, sum_sales
    sum_prod = 0
    sum_sales = 0
    agemean = parameters[0]
    agestd = parameters[1]
    if model_index != 0: 
        randstd = parameters[2]
        randmean = parameters[3]
    shopping()  #####Only one shopping function
      
###########################        
if model_index == 0:
    agemean = 5     
    agestd = 0.508           
    parameters = [agemean,agestd]
if model_index == 1:
    agemean = 8      
    agestd = 0.4       
    randstd = 9  
    randmean = 24.7    
    parameters = [agemean,agestd,randstd,randmean]   
if __name__ == "__main__":
    obj = main(parameters)

非常感谢

在这两种情况下您都可以传递 4 个参数。但是,如果 model_index 为 0,则将 1 作为最后 2 个参数传递,如下所示:

shoppingS(agemean,agestd,1,1);

因为您将 agemean 乘以第三个参数,将 agestd 乘以第四个参数,然后进行减法。所以当第3和第4个参数为1时,乘法不会改变第1和第2个参数的值。