在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’”。