码迷,mamicode.com
首页 > 编程语言 > 详细

第五章 python的函数(2):函数的参数

时间:2019-06-21 14:22:27      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:介绍   data   default   结果   默认值   情况下   方式   war   pytho   

上一篇我们介绍了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的函数(2):函数的参数

标签:介绍   data   default   结果   默认值   情况下   方式   war   pytho   

原文地址:https://www.cnblogs.com/py-xiaoqiang/p/11064232.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!