python的函数:函数的参数
Posted py-xiaoqiang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python的函数:函数的参数相关的知识,希望对你有一定的参考价值。
上一篇我们介绍了python函数的一些定义和基本的构成。 接下来我们介绍下函数的参数。
什么是函数的参数呢?
当我们定义函数的时候,经常会希望函数能够处理我们传入的数据。
这样可以更具有灵活性和通用性。
传给函数数据时,我们就会使用到参数。
参数有两种:形参(形式参数),实参(实际参数)。
5.3.1 参数
参数用来把数据传给函数,让函数利用这个数据来执行
- 参数的特点:
- 参数可以是多个
- 严格按照顺序传参数:位置方式传参
- 定义了几个参数就得传几个
- 实际参数可以传任意类型
1. 形参和实参
形参-形式参数:在函数定义时定义的参数就是形参。
实参-实际参数:当调用函数是,交给函数的参数就是实际参数。
下面简单的代码来举例:
def get_list_first_data(aaa): # aaa叫做形参(形式参数)
v = [11,22,33,44]
print(v[aaa])
get_list_first_data(1) # 1叫做实参(实际参数)
执行结果:
22
定义的形参(定义的是默认参数,万能参数的情况除外)和传入的实参需要数量相符。
2. 默认参数(default parameter)
默认参数:设置了默认值得参数。
- 默认参数规则:
- 默认参数必须定义在非默认参数之后(原因:不放在后面传入实参的时候会混乱)
参数的默认值,如果是可变类型,---有坑
def func(a1, a2=9): # a2默认值是9。a2(default parameter)必须定义在在a1(non-default parameter)的后面
pass
# 调用
func(1) # a1=1,a2=9
func(2,3) # a1=2,a2=3
3. 位置传参(positional arg),关键字传参(key arg)
位置参数:按定义的顺序传入参数(不使用关键字)。
关键字参数(又称关键参数,指定参数):指定关键字(形参名)来传入参数。关键参数不用按顺序传入。
- 传入实参的原则:
- 【实参:位置传参在前,关键字传参在后】
def func1(a1,a2,a3=1,a4=2):
print(a1,a2,a3,a4)
func1(11,22) # 位置传参a1=11,a2=22。默认参数a3=1,a4=2
func1(11,22,33) # 位置传参
func1(11,22,33,44) # 位置传参
func1(11,a2=22,a3=33) # a2=22,a3=33是关键字传参
# func1(11,a2=22,33) # 报错,关键字后面的参数也必须有关键字
4. 万能参数(非固定参数) ‘*‘ (元组)
参数一般命名为‘*args‘,这个参数可以接受任意个位置参数,并转换为元组(即使只有一个元素也会转换)传入函数。
参数名可以自定义,但是推荐用args
不确定这个函数接受多少参数的时候使用
- 一般命名为 *args
- *args 可以接受任意参数,并将参数转换成元组。
- 有 * :将实参的元素循环放入元组(可以使列表,元组)
- 无 * :将实参本身放入元组
- *args 只支持位置传参
def func1(*args): # 一般情况下万能参数推荐命名为 *args
print(args) # 调用的时候不要 *
func1(1,2) # 输出元组(1,2)
# 无*和有*
func1((11,22,33,44,55)) # 输出元组套元组((11, 22, 33, 44, 55),)
func1(*(11,22,33,44,55)) # '*'将元素循环放入*参数的元组中(打散放入),输出(11, 22, 33, 44, 55)
func1(1,2,*[11,22,33],*(111,222,333),*1111,2222) # 列表,元组,集合都能拆开放进去。注意集合无序
输出结果:
(1, 2)
((11, 22, 33, 44, 55),)
(11, 22, 33, 44, 55)
(1, 2, 11, 22, 33, 111, 222, 333, 2222, 1111)
一般参数和万能参数一起用:
- 同样适用于【实参:位置参数在前,关键字参数在后的原则】
def func2(a1, *args):
print(a1, args)
func2(1,2,3,4,5,a2=6) # 当参数在万能参数后面,只能用关键字传参。 很少用
# a1=1,args=(2,3,4,5),a2=6
5. 万能参数(非固定参数) ‘**‘ (字典)
参数一般命名为‘**kwargs‘,这个参数可以接受任意个关键字参数,并转换为字典传入函数。
- 一般命名为**kwargs
- 只能用关键字传参
- **kwargs 可以接受任意个关键字参数,并将参数转换成字典。
- 有 ** : 可以直接传入一个字典
- 没 ** : 只能以关键字参数追加到字典中
def func1(**kwargs):
print(kwargs)
func1(k1='a',k2=123) # 'k1':'a', 'k2':123
# 有**和无**
func1(**'k1':'a', 'k2':123) # 'k1':'a', 'k2':123
func1(k1='k1':'a', 'k2':123,k2=123) # 'k1':'k1':'a', 'k2':123, 'k2':123
func1(k1=1,**'k2':2,'k3':3) # 这个违背了关键字参数在后的原则,不过很少见
执行结果:
'k1': 'a', 'k2': 123
'k1': 'a', 'k2': 123
'k1': 'k1': 'a', 'k2': 123, 'k2': 123
'k1': 1, 'k2': 2, 'k3': 3
一般*args和**kwargs 一般会一起出现
def func1(*args,**kwargs):
print(args,kwargs)
func1(*[1,2,3],k1=2,k2=3,k3=4)
func1(*[1,2,3],**'k1':2,'k2':3)
func1(111,222,*[1,2,3],k1='aaa',**'k2':'bbb','k3':'ccc')
执行结果:
(1, 2, 3) 'k1': 2, 'k2': 3, 'k3': 4
(1, 2, 3) 'k1': 2, 'k2': 3
(111, 222, 1, 2, 3) 'k1': 'aaa', 'k2': 'bbb', 'k3': 'ccc'
6. 常用函数方式
- 定义函数
def func1(a1,a2):
pass
def func2(a1,a2=None):
pass
def func3(*args,**kwargs):
pass
- 调用函数 原则:【实参:位置传参在前,关键字传参在后】
以上就是python中关于参数的一些介绍。
下一篇我们介绍一下函数的返回值。
以上是关于python的函数:函数的参数的主要内容,如果未能解决你的问题,请参考以下文章