一.实参与形参
1.形参
定义函数时,小括号中的参数,用来加收参数用的
2.实参
调用函数时,小括号中的参数,用来传递给函数用的
- 形参与实参的个数和类型要对应相等
- 如果个数不对应,会报错,TypeError
- 如果类型不对应,python解释器无法检查出来,但是可能会在后续程序中出错,但是很难找出错误的地方,因此要进行数据类型检查,通过使用内置函数 ***isinstance()***实现
- isinstance(变量名,类型)
def add(num1:int,num2:int)->int:
if isinstance(num1,int) and isinstance(num2,int):
return num1+num2
else:
return -1
num1=2
num2=1
result1=add(num1,num2)
print(result1)
num3='a'
num4='d'
result2=add(num3,num4)
print(result2)
结果
3
-1
二.默认参数
默认参数可以降低调用函数的难度
可变参数不能作为默认参数
案例一
def mypow(x,y=2,z=None):
"""求次方,默认求2次方"""
return x**y
if __name__ == '__main__':
print(mypow(2))
print(mypow(2,3))
结果
4
8
案例二
def connect_mysql(user,passwd,host='localhost',port=3306,charset='utf-8'):
print('connect mysql....',user,passwd,host,port,charset)
if __name__ == '__main__':
connect_mysql('root','redhat')
结果
connect mysql.... root redhat localhost 3306 utf-8
三.可变参数
可变参数就是传入的参数个数是可变的,用*args表示
- *args是形参,可以任意修改名称;
- args是可变参数,可以传入一个以上的任意个数*的参数
- 将所有参数封装成元组,赋值给变量args
案例一
def square_sum(*args):
print(args)
square_sum(1)
square_sum(1,2)
square_sum(1,2,3)
结果
(1,)
(1, 2)
(1, 2, 3)
案例二
def square_sum(*nums):
"""求多个数的平方和"""
result=0
for num in nums:
result=result+pow(num,2)
return result
if __name__ == '__main__':
result=square_sum(1,2,3)
print(result)
结果
14
可变参数解包
如果已经有一个list或者tuple,如何调用一个可变参数?
- python允许在已有的list或tuple前加一个* 号,成为可变参数
- 把list或tuple的元素变成可变参数传进去
格式:
一个元组(1,2,3)
解包:*(1,2,3)—>(1,2,3)
案例
#求100以内所有奇数的平方和,
#这里有一个元组,解包为可变参数传入
nums=range(1,100,2)
sum=square_sum(*nums)
print(sum)
结果
166650
四.关键字参数
1.定义
- 关键字参数允许传入0个或任意个含参数名的参数;
- 这些关键字参数在函数内部自动组装成一个字典
- 关键字参数用** kwargs表示
- ** kwargs是形参,名称可以任意修改
def student_info(name,age,**kwargs):
print(name,age,kwargs)
#函数调用
student_info('xiaoming',18)
student_info('xiaohong',20,hobit='python program',city='西安')
结果
xiaoming 18 {}
xiaohong 20 {'hobit': 'python program', 'city': '西安'}
2.关键字参数解包
类似可变参数解包
在list或tuple前面加两个* 号
infomation ={
'city':'浙江',
'hobby':'玩游戏'
}
student_info('qianzong',23,**infomation)
结果
qianzong 23 {'city': '浙江', 'hobby': '玩游戏'}
五.参数组合
- 形参(必选参数、默认参数、可变参数、关键字参数)
- 参数组合,即必选参数、默认参数、可变参数、关键字参数一起使用
- 参数定义的顺序必须是:必选参数、默认参数、可变参数、关键字参数