函数--参数传递(实参、形参、可变参数、关键字参数)

一.实参与形参

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': '玩游戏'}

五.参数组合

  • 形参(必选参数、默认参数、可变参数、关键字参数)
  • 参数组合,即必选参数、默认参数、可变参数、关键字参数一起使用
  • 参数定义的顺序必须是:必选参数、默认参数、可变参数、关键字参数
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值