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 相关文章推荐
python3中的md5加密实例
May 29 Python
Python打包方法Pyinstaller的使用
Oct 09 Python
修改默认的pip版本为对应python2.7的方法
Nov 06 Python
Python发展史及网络爬虫
Jun 19 Python
pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)
Jan 18 Python
解决python Jupyter不能导入外部包问题
Apr 15 Python
Django视图、传参和forms验证操作
Jul 15 Python
python利用google翻译方法实例(翻译字幕文件)
Sep 21 Python
Python json解析库jsonpath原理及使用示例
Nov 25 Python
使用Python webdriver图书馆抢座自动预约的正确方法
Mar 04 Python
如何用python识别滑块验证码中的缺口
Apr 01 Python
详解python网络进程
Jun 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
发布一个用PHP fsockopen写的HTTP下载的类
2007/02/22 PHP
php生成随机密码的几种方法
2011/01/17 PHP
用php来改写404错误页让你的页面更友好
2013/01/24 PHP
thinkphp在模型中自动完成session赋值示例代码
2014/09/09 PHP
php页面,mysql数据库转utf-8乱码,utf-8编码问题总结
2015/08/27 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
javascript 动态添加事件代码
2008/11/30 Javascript
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
jQuery中操控hidden、disable等无值属性的方法
2014/01/06 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
2014/04/04 Javascript
javascript使用正则控制input输入框允许输入的值方法大全
2014/06/19 Javascript
node.js中的fs.rmdir方法使用说明
2014/12/16 Javascript
NodeJS Web应用监听sock文件实例
2015/02/18 NodeJs
10个很棒的jQuery代码片段
2015/09/24 Javascript
JS实现的最简Table选项卡效果
2015/10/14 Javascript
js登录滑动验证的实现(不滑动无法登陆)
2018/01/03 Javascript
JS基于for语句编写的九九乘法表示例
2018/01/04 Javascript
Vue.js分页组件实现:diVuePagination的使用详解
2018/01/10 Javascript
在vue项目创建的后初始化首次使用stylus安装方法分享
2018/01/25 Javascript
vue基础之模板和过滤器用法实例分析
2019/03/12 Javascript
浅析Vue中拆分视图层代码的5点建议
2019/08/15 Javascript
将RGB值转换为灰度值的简单算法
2019/10/09 Javascript
在vue中给后台接口传的值为数组的格式代码
2020/11/12 Javascript
js属性对象的hasOwnProperty方法的使用
2021/02/05 Javascript
Nodejs 数组的队列以及forEach的应用详解
2021/02/25 NodeJs
python opencv之分水岭算法示例
2018/02/24 Python
python 中的paramiko模块简介及安装过程
2020/02/29 Python
python 字典item与iteritems的区别详解
2020/04/25 Python
如何用tempfile库创建python进程中的临时文件
2021/01/28 Python
Vans奥地利官方网站:美国原创极限运动潮牌
2018/09/30 全球购物
Internet体系结构
2014/12/21 面试题
临床医学大学生求职信
2013/09/28 职场文书
元旦晚会邀请函
2014/02/01 职场文书
后备干部培训方案
2014/05/22 职场文书
2014国庆节主题活动方案:快乐的国庆节
2014/09/16 职场文书
Java集成swagger文档组件
2021/06/28 Java/Android