python的函数参数你了解吗

作者:lishuaigell 时间:2021-11-08 16:15:59 

前言

python参数类型和参数传递形式多样,相对于其他语言python使用会更加灵活。它传参形式一般分为两种:位置传参,关键字传参。传参形式是相对于实参而言,在函数调用时使用参数类型一般也分为两种:默认参数,不定长参数。参数类型是相对形参而言,在函数创建时定义。

位置传参

位置传参,我们经常使用的一种函数传参形式,它根据实参的位置传递给对应位置的形式参数。在与其他传参形式混合使用时,必须优先输入位置参数。

def func(a, b, c):
   print(a, b, c)

# 位置参数
if __name__ == '__main__':
   func(1, 6, 7)  # 打印结果是1 6 7  位置一一对应
   func(6, 1, 7)  # 打印结果是6 1 7
   # func(6, 1)  # 实参与形参数量必须一致
   # func(6, 1, 7, 9)  # 不能多也不能少

关键字传参

关键字传参,根据形式参数的名字来进行对应的赋值。

def func(a, b, c):
   print(a, b, c)

# 关键字参数
if __name__ == '__main__':
   func(1, b=6, c=7)  # 打印结果是1 6 7
   func(c=3, b=1, a=7)  # 打印结果是7 1 3
   # func(c=2, b=3)  # 不能少赋值
   # func(c=2, b=3,a=6,c=5)  # 不能多赋值
   # func(c=2, b=3,a=5,qq=3) # 也不能无关赋值
   # func(1, b=6, 7)  # 与位置传参混合使用时,必须位置参数在前,而且不能交替使用

默认参数

默认参数,就是形参会有个默认值,如果有新值传入就使用新值,否则使用默认值。形参使用默认参数时同样需要注意位置,必须写在位置参数后面(其实不能叫位置参数,但是为了理解就把没有赋值的普通形参叫做位置参数),否则会报错。如下方ab必须写在c后面。

python的函数参数你了解吗

# 默认参数必须要写在右侧
def func(a, b=5, c=3):
   print(a, b, c)

# 默认参数
if __name__ == '__main__':
   func(1)  # 打印的结果是 1 5 3
   func(1, 6)  # 打印的结果是 1 6 3
   func(1, 2, 7)  # 打印结果是1 2 7
   func(b=1, a=4)  # 打印结果是4 1 3

不定长参数

不定长参数有两种表现形式。

  • 在形参前面加个*(*args),表示不定长元组形参,可以接收所有通过位置传参进来的实参,将其存入元组里面。

  • 在形参前面加两个*(**kwargs),表示不定长字典形参,可以接收所有通过关键字传参进来的实参,将其存入字典里面。

# 不定长参数
def func(*args, **kwargs):
   print(args)
   print(kwargs)

if __name__ == '__main__':
   func(1, 4, 8, 7, a=5, h=6, l=15)  # 注意实参形参顺序要对应

结果

(1, 4, 8, 7)  # 元组
{'a': 5, 'h': 6, 'l': 15}  # 字典

混合使用问题

创建时

def func1(a, b=5, *args, c=7, **kwargs):
   print(a, b, args, c, kwargs)

我们先给它们一个称呼方便引用。就称a为普通参数,b为默认参数,*args为可变参数(因为它能接收多个实参),**kwargs为可变关键字参数(因为它能接收多个通过关键字传参进来的实参)。

  • 普通参数必须写在最前面(写在其他类型参数前面)

  • 可变关键字参数必须写在最后面(写在其他参数类型后面)

  • 可变参数与可变关键字参数只能出现一次。

引用时

位置传参必须写在关键字参数前面,他们俩不能交替使用。关键字传参什么时候出现合适?出现在可变参数之后,相当于终止条件。

def func1(a, b=5, *args, c=7, **kwargs):
   print(a, b, args, c, kwargs, sep='\n')

if __name__ == '__main__':
   func1(5, 6, 8, 7, 1, 5, 6, 8, c=4, r=2, s=3)

 结果为

5
6
(8, 7, 1, 5, 6, 8)
4
{'r': 2, 's': 3}

来源:https://blog.csdn.net/lishuaigell/article/details/122663663

标签:python,函数,参数
0
投稿

猜你喜欢

  • tensorflow pb to tflite 精度下降详解

    2023-05-25 19:05:41
  • 在Typescript中如何使用for...in详解

    2023-08-18 15:39:32
  • python如何将一个四位数反向输出

    2023-03-21 16:42:40
  • Pytorch自定义CNN网络实现猫狗分类详解过程

    2023-10-27 19:51:02
  • python 获取图片分辨率的方法

    2022-02-19 12:03:56
  • Python实现端口检测的方法

    2022-02-01 21:21:02
  • 解决python3读取Python2存储的pickle文件问题

    2023-03-18 14:20:30
  • python numpy 按行归一化的实例

    2023-04-29 09:14:53
  • pytorch交叉熵损失函数的weight参数的使用

    2021-02-27 15:52:31
  • 对象无length属性时IE6/IE7中无法将其转换成伪数组(ArrayLike)

    2024-04-17 09:49:44
  • 在python中利用pycharm自定义代码块教程(三步搞定)

    2022-11-20 01:00:50
  • Web 2.0 框架发布

    2008-03-25 09:40:00
  • GoLang bytes.Buffer基础使用方法详解

    2024-04-27 15:28:09
  • 详细讲解如何为MySQL数据库添加新函数

    2008-11-27 17:06:00
  • js实现酷炫倒计时动画

    2024-06-13 21:25:49
  • Python爬取商家联系电话以及各种数据的方法

    2023-07-24 18:39:38
  • python中wheel的用法整理

    2022-07-03 18:15:47
  • 详解python3百度指数抓取实例

    2022-01-11 03:06:59
  • python列表推导和生成器表达式知识点总结

    2021-09-13 00:13:42
  • 学会sql数据库关系图(Petshop)

    2024-01-28 18:43:23
  • asp之家 网络编程 m.aspxhome.com