python中函数传参详解


Posted in Python onJuly 03, 2016

一、参数传入规则

可变参数允许传入0个或任意个参数,在函数调用时自动组装成一个tuple;

关键字参数允许传入0个或任意个参数,在函数调用时自动组装成一个dict;

1. 传入可变参数:

def calc(*numbers):
   sum = 0
   for n in numbers:
     sum = sum + n * n
   return sum

以上定义函数,使用如下:

传入多个参数,

calc(1, 2, 3, 4)
30 #函数返回值

传入一个列表,

nums = [1, 2, 3]
calc(*nums) # 通过 * 将list中的元素作为可变参数传入函数
14 # 函数返回值

2.传入关键字参数:

>>> def person(name, age, **kw):
...   print('name: ', name, 'age: ', age, 'other: ', kw)
... 
>>> 
>>> person('luhc', 24, city='Guangzhou')
name: luhc age: 24 other: {'city': 'Guangzhou'}

同样,可以将预先定义的dict作为参数传入以上函数:

>>> info = {'city': 'Guangzhou', 'job': 'engineer'}
>>> 
>>> person('luhc', 24, **info)
name: luhc age: 24 other: {'city': 'Guangzhou', 'job': 'engineer'}

注意: 函数person 获得的是参数 info 的一份拷贝,在函数内修改不会影响 info 的值

3. 在关键字参数中,可以限制关键字参数的名字:

# 通过 * 分割,以指定关键字参数名
>>> def person(name, age, *, city, job):
...   print('name: ', name, 'age: ', age, 'city: ', city, 'job: ', job)
... 
>>> 
>>> person('luhc', 24, city='Guangzhou', job='engineer')
name: luhc age: 24 city: Guangzhou job: engineer

# 如果传入参数中,存在参数名不在定义的范围内,将抛出异常
>>> person('luhc', 24, city='Guangzhou', jobs='engineer')
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: person() got an unexpected keyword argument 'jobs'
>>>

此外,如果函数中已经指定可变参数,则 * 可以省略,如下:

# 省略了用 * 作为分割,指定关键字参数名
>>> def person(name, age, *args, city, job):
...   print('name: ', name, 'age: ', age, 'args: ', args, 'city: ', city, 'job: ', job)  
... 
>>> 
>>> person('luhc', 24, 'a', 'b', city='Guangz', job='engineer')
name: luhc age: 24 args: ('a', 'b') city: Guangz job: engineer
>>> 
# 同样,如果传入了关键字参数未指定的参数名,则抛出异常
>>> person('luhc', 24, 'a', 'b', city='Guangz', job='engineer', test='a')
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: person() got an unexpected keyword argument 'test'
>>>

二、参数组合使用:

参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数

def f1(a, b, c=0, *args, **kw):
  print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)

def f2(a, b, c=0, *, d, **kw):
  print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)

 以上就是本文给大家介绍的全部内容了,希望能够对大家理解Python的函数参数的传递有所帮助

Python 相关文章推荐
Python内置函数bin() oct()等实现进制转换
Dec 30 Python
python实现从一组颜色中找出与给定颜色最接近颜色的方法
Mar 19 Python
深入浅析Python中的yield关键字
Jan 24 Python
python中for用来遍历range函数的方法
Jun 08 Python
python selenium 获取标签的属性值、内容、状态方法
Jun 22 Python
Django contenttypes 框架详解(小结)
Aug 13 Python
关于python列表增加元素的三种操作方法
Aug 22 Python
使用python判断你是青少年还是老年人
Nov 29 Python
Python构建图像分类识别器的方法
Jan 12 Python
Django基于客户端下载文件实现方法
Apr 21 Python
Django contrib auth authenticate函数源码解析
Nov 12 Python
python读取mat文件生成h5文件的实现
Jul 15 Python
Python使用Srapy框架爬虫模拟登陆并抓取知乎内容
Jul 02 #Python
Ruby元编程基础学习笔记整理
Jul 02 #Python
Python的爬虫程序编写框架Scrapy入门学习教程
Jul 02 #Python
搭建Python的Django框架环境并建立和运行第一个App的教程
Jul 02 #Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
Jul 02 #Python
python图片验证码生成代码
Jul 02 #Python
Python彩色化Linux的命令行终端界面的代码实例分享
Jul 02 #Python
You might like
PHPlet在Windows下的安装
2006/10/09 PHP
PHP的栏目导航程序
2006/10/09 PHP
基于jquery的jqDnR拖拽溢出的修改
2011/02/12 Javascript
兼容IE、firefox以及chrome的js获取时间(getFullYear)
2014/07/04 Javascript
JS实现鼠标框选效果完整实例
2016/06/20 Javascript
JS与HTML结合使用marquee标签实现无缝滚动效果代码
2016/07/05 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
2017/01/20 Javascript
javascript深拷贝和浅拷贝详解
2017/02/14 Javascript
详解nodejs中exports和module.exports的区别
2017/02/17 NodeJs
javascript完美实现给定日期返回上月日期的方法
2017/06/15 Javascript
轻松理解vue的双向数据绑定问题
2017/10/30 Javascript
layui框架中layer父子页面交互的方法分析
2017/11/15 Javascript
Vue中使用方法、计算属性或观察者的方法实例详解
2018/10/31 Javascript
微信小程序与后台PHP交互的方法实例分析
2018/12/10 Javascript
深度了解vue.js中hooks的相关知识
2019/06/14 Javascript
微信小程序如何调用json数据接口并解析
2019/06/29 Javascript
ElementUI Tag组件实现多标签生成的方法示例
2019/07/08 Javascript
百度小程序自定义通用toast组件
2019/07/17 Javascript
vue实现简易图片左右旋转,上一张,下一张组件案例
2020/07/31 Javascript
vue 如何从单页应用改造成多页应用
2020/10/23 Javascript
[02:32]DOTA2完美大师赛场馆静安体育中心观赛全攻略
2017/11/08 DOTA
Python每天必学之bytes字节
2016/01/28 Python
python实现随机调用一个浏览器打开网页
2018/04/21 Python
python 通过logging写入日志到文件和控制台的实例
2018/04/28 Python
浅谈python多线程和多线程变量共享问题介绍
2020/04/17 Python
python 安装移动复制第三方库操作
2020/07/13 Python
pycharm2020.2 配置使用的方法详解
2020/09/16 Python
HTML5去掉输入框type为number时的上下箭头的实现方法
2020/01/03 HTML / CSS
贝玲妃美国官方网站:Benefit美国
2016/08/28 全球购物
Zooplus罗马尼亚:宠物食品和配件
2019/11/02 全球购物
欧洲最大的预定车位市场:JustPark
2020/01/06 全球购物
2014年社区矫正工作总结
2014/11/18 职场文书
自信主题班会
2015/08/14 职场文书
2016国培研修心得体会
2016/01/08 职场文书
tensorboard 可视化之localhost:6006不显示的解决方案
2021/05/22 Python
Python按顺序遍历并读取文件夹中文件
2022/04/29 Python