位置参数

位置参数传递是最为简单的传递方式,按照函数参数的位置顺序逐个匹配传入,传入参数的个数必须与函数参数个数一致。

见示例1,根据位置顺序进行匹配,a,b,c分别赋值为2,3,4

#示例1

def func(a,b,c):

print("args:",a,b,c)

if __name__ == "__main__":

func(2,3,4) #输出结果 args: 2 3 4

关键字参数

通过关键字对变量进行赋值,可以对全部关键字进行赋值,这时候位置可以随意改变。见示例2,输出结果与示例1一致。

#示例2

def func(a,b,c):

print("args:",a,b,c)

if __name__ == "__main__":

func(c=4,a=2,b=3) #输出结果 args: 2 3 4

也可以对部分关键字进行赋值,这属于位置参数和关键字参数的混用,有关键字的部分必须放在后面,见示例3

def func(a,b,c):

print("args:",a,b,c)

if __name__ == "__main__":

func(2,c=4,b=3) #输出结果 args: 2 3 4

默认参数

有些函数参数提供了默认值,如果要使用,可不传入,如示例4

#示例4

def func(a,b,c=4):

print("args:",a,b,c)

if __name__ == "__main__":

func(2,3) #输出结果 args: 2 3 4

如果不使用其定义的默认值,可自行传入,对其修改,如示例5

#示例5

def func(a,b,c=4):

print("args:",a,b,c)

if __name__ == "__main__":

func(2,3,5) #输出结果 args: 2 3 5

命名关键字参数

与普通关键字参数不同,命名关键字参数必须用*进行区分,*后面的参数必须通过关键字传入,见示例6

#示例6

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

print("args:",a,b,c)

if __name__ == "__main__":

func(2,3,c=4) #输出结果 args: 2 3 4

如果不按照关键字传入,则报TypeError的错误,见示例7

示例7

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

print("args:",a,b,c)

if __name__ == "__main__":

func(2,3,4)

#TypeError: func() takes 2 positional arguments but 3 were given

可变参数

如果定义的函数中带有*args或者**args都是属于可变参数方式进行参数传入

*args是以元组的方式收集不匹配的的位置参数,见示例8

#示例8

def func(a,b,*c):

print("args c:"c)

if __name__ == "__main__":

func(2,3,4,5,6) #输出结果 args c: (4, 5, 6)

在示例8中,有a,b,c3个形式参数,但是按照位置参数的形式传入了5个参数,最后的3个参数都按照元组的形式(4,5,6)传给了c。

定义函数时候,*args必须放在位置参数后面,否则报TypeError的错误,见示例9。

#示例9

def func(a,*c,d):

print("args c:",c,d)

if __name__ == "__main__":

func(2,3,4,5,6)

#TypeError: func() missing 1 required keyword-only argument: 'd'

**args是以字典的形式收集不匹配的位置参数,仅对关键字参数传入有效,见示例10

示例10

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

print("args c:",c)

if __name__ == "__main__":

func(2,3,c=4,d=5,e=6)#输出结果 args c: {'c': 4, 'd': 5, 'e': 6}

在示例10中,参数c收集了以字典的形式收集了后面的3个参数。跟*args一样,函数中的**args必须放在位置参数后面。

再看一个传参方式混合使用的的例子,见示例11。

#示例11

def func(a,*b,c=None,**d):

print("a:",a)

print("b:",b)

print("c:",c)

print("d:",d)

if __name__ == "__main__":

func(2,3,4,c=4,d=5,e=6)

输出结果如下所示:

a: 2

b: (3, 4)

c: 4

d: {'d': 5, 'e': 6}

从示例11可见,2赋值给a,b以元组的形式收集了3,4,c=4修改了默认参数的值,d以字典的形式收集了4,5,6

前面所说的*args或者**args是出现在函数定义中的,其实在参数传入时候也可以使用使用*和**,他们会数据进行解包。如示例12和示例13

示例12

def func(a,b,c):

print("a:",a,",b:",b,",c:",c)

if __name__ == "__main__":

a=(2,3,4)

func(*a)#输出结果 a: 2 ,b: 3 ,c: 4

示例13

def func(a,b,c):

print("a:",a,",b:",b,",c:",c)

if __name__ == "__main__":

a={'a':1,'b':2,'c':3}

func(**a)#输出结果 a: 2 ,b: 3 ,c: 4

以上...有点长了。

欢迎关注CVpython,一个专注于分享Python教程和CV算法的公众号

python 主函数传参_Python函数传参方法超级大汇总相关推荐

  1. python 传参数 传引用_Python 函数参数 传引用还是传值

    最近学习用Python编程,但是遇到用函数处理数据的时候,对于数据的传递形式优点理解不清,以至于无法用Python使用链表等数据结构.在此特地记录几点学习经验. 总结 传值.引用这个是c/c++.ja ...

  2. if python 判断函数返回值_Python函数的返回值和作用域

    函数的返回值和作用域 1.返回值 def guess(x): if x > 3: return "> 3" else: return "<= 3&quo ...

  3. python中函数的定义_Python函数是什么_如何定义和调用函数?

    函数是什么? 本节Python培训教程是要大家认识一个"老朋友"--函数. 与数学中的函数不同,在Python中,函数不是看上去冰冷无聊的规则和公式,而是实打实的.有自己作用的代码 ...

  4. python函数测验题_python函数练习题

    python函数练习题 python函数练习题所练习的不仅仅是函数如何使用,还包括基础知识的运用,尽管所要实现的算法在不使用函数的情况下也都能实现,而且很多算法在前面都已经学习实践过.但对初学者而言, ...

  5. python封装一个函数并调用_python - 函数的封装与调用

    一.函数的定义,函数名,函数体以及函数的调用 1.函数的定义语法: def 函数名(): 函数体 2.函数名的定义与变量名命名一样 3.函数的封装与调用 #函数的封装 defyue():print(' ...

  6. python函数归值_Python函数基础与函数递归

    数学中函数的定义: 一般的 在一个变化过程中, 如果有两个变量 x 和 y 并且 对于 x的每一个确定的值,y都有唯一确定的值与 其对应, 那么我们就把 x 成为 自变量 把y成为 因变量 y是x的函 ...

  7. python装饰器与闭包_Python:函数装饰器和闭包

    摘自<流畅的python> 7.1 装饰器基础知识 装饰器是可调用的对象,其参数是另一个函数(被装饰的函数). 装饰器可能会处理被装饰的函数,然后把它返回,或者将其替换成另一个函数或可调用 ...

  8. python函数进阶小结_python函数的进阶

    形参角度: 万能参数 如果我们在传参数时不很清楚有哪些,或者说给一个函数传了很多实参,考虑用动态参数也叫万能参数. 万能参数,即动态参数,分为两种:动态接收位置参数 *args,动态接收关键字参数** ...

  9. python函数测验题_python 函数练习题

    函数的结构和参数 定义一个函数 def len_num(a): return len(a) b=len_num([123,1,2])#函数名加括号就调用了 print(b) # 结构: #def 关键 ...

  10. python 函数参数传递机制_Python函数参数传递机制(超级详细)

    Python中,函数参数由实参传递给形参的过程,是由参数传递机制来控制的.通过学习<Python函数值传递和引用传递>一节我们知道,根据实际参数的类型不同,函数参数的传递方式分为值传递和引 ...

最新文章

  1. phpstorm安装_PHPstorm设置浏览器打开代码
  2. 查看电脑python虚拟环境-Linux系统创建python虚拟环境
  3. microsoft visual sourcesafe explorer 获取不了文件夹的解决方法
  4. 使用redis的zset实现排行榜
  5. 夜间模式html,Web前端-夜间模式
  6. 学习笔记:杨辉三角形上莫队(组合数莫队)(LULU胡策)
  7. 【Kafka】Kafka 配置 SASL_SSL jks鉴权验证方式
  8. 如何在pycharm debug类似python -m的命令
  9. VS2010下编译sqlite3
  10. Ubuntu安装Windows字体
  11. 【vn.py】开发环境搭建
  12. 关于电脑突然没声音(Realtek High definition),电脑声卡驱动安装不上(已解决)
  13. Ubuntu系统(Linux)如何从大硬盘迁移到小硬盘
  14. 电脑看斗鱼html5卡,win10浏览器观看斗鱼卡怎么修复_win10浏览器打开斗鱼卡死如何解决...
  15. 关于人工智能的几点看法
  16. js之清除Cookie
  17. Hibernate复杂查询——多参数分页 in()查询(多参数、分页、in())
  18. obs有没有android版本,obs插件手机版下载-obs插件 安卓版v1.0.0-pc6手机下载
  19. 架构师小跟班:推荐46个非常经典的Linux面试题
  20. Excel如何批量修改工作簿名称为标题

热门文章

  1. AutoJs学习-音量键控制脚本运行
  2. iPhone 二手手机到底去哪了
  3. CentOS 设置chrome浏览器桌面图标
  4. 希捷7200.11固件门完全DIY修正方法! 不用几块钱, DIYers请进!!!
  5. 去除wmv等视频认证的方法
  6. Android Q Default Ringtone 客制化SKUID默认来电铃声/通知铃声配置
  7. 密码破解全能工具:Hashcat密码破解攻略
  8. 迅雷5vip帐号获取器
  9. 【JSP课程设计(含源码)】宾馆客房管理系统(2021-7-2最新版)
  10. JAVA如何封装省市区_基于element ui封装的省市区三级联动