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. 常用函数方式
  1. 定义函数
def func1(a1,a2):
    pass
    
def func2(a1,a2=None):
    pass
    
def func3(*args,**kwargs):
    pass
  1. 调用函数 原则:【实参:位置传参在前,关键字传参在后】

以上就是python中关于参数的一些介绍。
下一篇我们介绍一下函数的返回值。

以上是关于python的函数:函数的参数的主要内容,如果未能解决你的问题,请参考以下文章

第五章MySQL 函数-日期和时间函数

第五章 Python函数

python第五章函数

Python学习系列----第五章 模块

第五章 函数 Lua程序设计笔记

python程序设计基础(嵩天)第五章课后习题部分答案