将参数传递给函数时如何定义条件? (在 python 中更有效地编码)
How to define a condition when passing arguments to a function? ( coding more efficiently in python)
在此代码中,我有两个函数 shoppingA 和 shoppingS 共享多行。但是,我通过的论点略有不同。一个需要两个额外的参数。我想知道如何通过仅具有一个购物功能来提高代码效率,如果 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个参数的值。
在此代码中,我有两个函数 shoppingA 和 shoppingS 共享多行。但是,我通过的论点略有不同。一个需要两个额外的参数。我想知道如何通过仅具有一个购物功能来提高代码效率,如果 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个参数的值。