如何用两个可能的参数变体定义函数?

时间:2018-06-21 18:18:18

标签: python function

我正在尝试在python中定义一个函数,其中该函数具有两个可能的参数集。我正在编写代码以确定整体课程成绩,并取决于它们是否更改标准课程权重取决于我有多少个参数要发送到计算成绩的功能。如果他们不更改标准权重,我只想传递两个参数(测试成绩和实验室成绩)。如果他们改变权重,我想传递四个参数(测试分数,实验室分数,实验室权重和测试权重)。总的来说,我不确定如何定义所述函数,因为通常的做法是将所有参数都放入功能开始。

GradeWeight=raw_input('Enter C to change weights or D to use default weights.')
GradeWeight=GradeWeight.upper()
if GradeWeight=='D':
    grade_calculator(a=LabScores,b=TestScores)
elif GradeWeight=='C':
    LabWeight=float(input('What is the lab weight percentage?(without the %)'))
    TestWeight=float(input('What is the test weight percentage?(without the %)'))
    grade_calculator(a=LabScores,b=TestScores,c=LabWeight,d=TestWeight)
def grade_calculator():

2 个答案:

答案 0 :(得分:1)

可能:

def grade_calculator(**kwargs):
  if 'c'  in kwargs or 'd' in kwargs:
    #do your thing
  else:
    # do your other thing

答案 1 :(得分:-1)

我认为您来自允许重载的语言,可以让您执行以下操作:

public int test(int one, int two)
public int test(int one, int two, int three)

不幸的是,Python不允许这样做。最简单的方法如下。

def my_method(self, parameter_A, parameter_B=None):
   if isinstance(parameter_B, int):
     print parameter_A * parameter_B
   else:
     print parameter_A
     if parameter_B is not None:
       print parameter_B

基本上,您正在测试中是否已指定第二个参数。如果未给定(或给定为None,Python等于null),则它不使用此参数。但是,如果有,则代码对其进行评估。本质上,这是一个if和else if语句的游戏。

您可以阅读here更多有关Python中缺少函数重载的信息。这很麻烦,特别是因为它是OOP语言应具有的东西,但这是Python的少数缺点之一。