Python中函数参数之必须参数和关键字参数(第2节)


在Python函数中,函数名后面括号里面的内容,就是用来定义参数的。在创建函数时,可以设置参数,也可以不设置参数。如果有多个参数,就用英文的逗号进行隔开,例如:

动手练一练:

def sum(a, b):  #  形参
    print(a+b)

sum(1, 2)  #  实参

执行以上代码,输出结果为:

3

上面的例子中,我们定义函数的时候,在函数名后面的括号里定义的参数叫做形参,而我们调用函数的时候传入的参数叫做实参,形参是用来接收实参的。

Python中的函数参数可以分成4种类型:必须参数、关键字参数、默认参数、可变参数。

1、必须参数

必须参数是指在调用函数时必须提供的参数,并且数量和顺序必须和定义函数时的参数保持一致。函数调用时,默认按位置顺序进行传递,并且要求参数的数量必须与定义函数时完全匹配。如果在调用函数时没有传递必须参数,Python解释器将会报错。例如:

动手练一练:

def sum(a, b):
    c = a + b
    print("a + b =", c)

sum(2, 3)

执行以上代码,输出结果为:

a + b = 5

上面的例子中,“a”和“b”就是必须参数,它们的顺序很重要,不能多传也不能少传。如果少传入一个参数,就会产生语法错误,例如:

动手练一练:

def str(a, b):
    print("第一个参数是", a)
    print("第二个参数是", b)

str(7)
str(7, 8, 9)

执行以上代码,输出结果为:

TypeError: str() missing 1 required positional argument: 'b'
TypeError: str() takes 2 positional arguments but 3 were given

上面的例子中,第一行执行结果告诉我们,调用函数时函数缺少一个必要参数“b”。第二行执行结果告诉我们,调用函数时多传入一个参数。

2、关键字参数

关键字参数允许我们使用参数名指定传递的值,可以不按函数定义时参数的顺序来调用函数,Python解释器能够根据函数定义时的参数名来匹配参数。这使得函数调用更加清晰易懂。例如:

动手练一练:

def student(name, age):
    print("学生姓名:", name)
    print("学生年龄:", age)

# 按顺序传递参数
student(name="张三", age=15)

print("-------这是虚线-------")

# 不按顺序传递参数
student(age=13, name="李四")

执行以上代码,输出结果为:

学生姓名 张三
学生年龄 15
-------这是虚线-------
学生姓名 李四
学生年龄 13

上面的例子中,通过使用参数名,我们可以明确地指定每个参数的值,按照任意顺序传递参数,提高了代码的可读性。但是这里需要注意的是,不能传入没有定义的参数,例如:

动手练一练:

def student(name):
    print("学生姓名:", name)

student(name="张三", age=15)

执行以上代码,输出结果为:

TypeError: student() got an unexpected keyword argument 'age'

上面的例子中,Python解释器输出错误信息“类型错误:student() 收到意外的关键字参数‘age’”。