python必选默认不定长参数,python 函数的参数:必选参数、默认参数、可变参数、关键字参数...

自定义的函数是默认不执行的,函数调用的时候实参会赋值给形参,然后执行代码块。

函数的参数有几种类型,它们定义有先后顺序:必选参数、默认参数、可变参数、关键字参数。

默认参数

定义函数的时候参数有默认值,这个参数就是默认参数。如果参数有默认值,那么在函数调用的时候,是可以不对默认参数传参的,这就简化了函数的调用。当一个参数的值变化较小的时候,比如师范学校里的女生比较多,那么学生的性别可以默认为女。

默认参数的使用:

def student(age, height,gender = 'female'):

print('年龄:',age,'身高:',height,'性别:',gender)

#调用函数

student(20,165)

#执行结果为

年龄: 20 身高: 165 性别: female

需要注意的是,默认参数应指向不可变数据类型。这能保证它所指向的位置里面的内容不会发生变化,即参数的默认值不会发生变化。

#默认参数指向的是可变数据类型

def moren_kebian(m=[1,2,3]):

m.append(4)

print(m)

#在没有给默认参数重新赋值的情况下调用函数

moren_kebian() #调用函数使用参数的默认值

moren_kebian() #再次调用函数

#执行结果为

[1, 2, 3, 4] #执行完一次后参数m的默认值变为[1,2,3,4]

[1, 2, 3, 4, 4] # m = [1,2,3,4,4]

#默认参数指向的是不可变数据类型

def moren_bukebian(m=None):

if m == None:

m = []

m.append(4)

print(m)

#在没有给默认参数传递新的参数的情况下调用函数

moren_bukebian()

moren_bukebian()

#执行结果为

[4] #默认值没有发生变化

[4]

*可变参数

函数定义的时候,在参数前面加一个*,那么这个参数是可变参数。调用函数的时候,可变参数可以接收0个或者任意个实参,并自动组装成元组。元组中的元素就是传入的实参。

一般情况下,可变参数可以得到一些数据的集合,即元组。可变参数可以简化函数的调用,只需要罗列出需要传入的参数即可最终会以元组的形式给可变参数。

def shu_zi(*arg):

print('arg =',arg)

print('arg的数据类型为:,'type(arg))

#调用函数

shu_zi(1,2,3,4,5)

#执行结果为

arg= (1, 2, 3, 4, 5)

arg的数据类型为:

需要注意的是在函数的定义和函数的调用中都能用到星号 。在函数定义中星号可以理解为将元素放进可变参数中;当已经有了序列,一些数据的集合,调用函数时,可以用星号将序列中的元素取出,传给形参。

def shu_zi(*arg):

print('arg =',arg)

print('arg的数据类型为:,'type(arg))

#调用函数

m = [1,2,3,4,5] #将m中的元素传给可变参数arg

shu_zi(*m)

#执行结果为

arg= (1, 2, 3, 4, 5)

arg的数据类型为:

**关键字参数

函数定义的时候,参数前面加**,这个参数是关键字参数。关键字参数接收的是含有参数名的参数(比如a=1),将接收的参数组装成一个字典给关键字参数。

def student(**argv):

print(argv)

#调用函数

student(年龄=23,身高=175,性别='男',年级='大三')

#执行结果为

{'年龄': 23, '身高': 175, '性别': '男', '年级': '大三'}

如果已经有了一个字典,想要使用字典中的元素,可以用**取出字典中的元素传给关键字参数

def student(**argv):

print(argv)

#调用函数

dict1 = {'年龄':23,'身高':175,'性别':'男','年级':'大三'}

student(**dict1)

#执行结果为

{'年龄': 23, '身高': 175, '性别': '男', '年级': '大三'}

可以发现传入带有参数名的参数和直接使用字典中的元素有一些细微的差别。用**将字典中的元素直接取出来传给关键参数即可。传入带有参数名的参数,要注意参数名的使用,参数名传入关键参数会转化成字符串,参数名不能为字符串。

参数组合

定义函数的时候,可以同时有必选参数、默认参数、可变参数、关键字参数。

def zu_he(a,b,c=1,*arg,**argv):

print('a=',a,'b=',b,'c=',c,'arg=',arg,'argv=',argv)

<<

a= 1 b= 2 c= 1 arg= () argv= {}

<<

a= 1 b= 2 c= 3 arg= () argv= {}

<<

a= 1 b= 2 c= 3 arg= (4,) argv= {}

<<

a= 1 b= 2 c= 3 arg= (4,) argv= {'d': 5}

#可以用*和**取出已知的列表、字典中的元素

m = [1,2,3]

dict2 = {'d':1}

<<

a= 1 b= 2 c= 3 arg= () argv= {'d': 1}

原文链接:https://blog.csdn.net/weixin_44851971/article/details/106110968

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值