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模块之StringIO使用示例
Apr 08 Python
以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
Jan 20 Python
Python使用SQLite和Excel操作进行数据分析
Jan 20 Python
Python遍历numpy数组的实例
Apr 04 Python
python中web框架的自定义创建
Sep 08 Python
Python 可变类型和不可变类型及引用过程解析
Sep 27 Python
Python中xml和dict格式转换的示例代码
Nov 07 Python
使用Python测试Ping主机IP和某端口是否开放的实例
Dec 17 Python
Python3实现打印任意宽度的菱形代码
Apr 12 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
Aug 07 Python
Python实现提取PDF简历信息并存入Excel
Apr 02 Python
python小型的音频操作库mp3Play
Apr 24 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生成短网址的3种方法代码实例
2014/07/08 PHP
ThinkPHP整合百度Ueditor图文教程
2014/10/21 PHP
PHP strtotime函数用法、实现原理和源码分析
2015/02/04 PHP
javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)
2011/07/04 Javascript
浅析IE10兼容性问题(frameset的cols属性)
2014/01/03 Javascript
jQuery简易图片放大特效示例代码
2014/06/09 Javascript
javaScript基础语法介绍
2015/02/28 Javascript
第二篇Bootstrap起步
2016/06/21 Javascript
JS JSOP跨域请求实例详解
2016/07/04 Javascript
jQuery Ajax使用FormData对象上传文件的方法
2016/09/07 Javascript
利用JS实现点击按钮后图片自动切换的简单方法
2016/10/24 Javascript
深入理解JavaScript中的块级作用域、私有变量与模块模式
2016/10/31 Javascript
vue 使用eventBus实现同级组件的通讯
2018/03/02 Javascript
Angular4学习笔记router的简单使用
2018/03/30 Javascript
详解javascript 正则表达式之分组与前瞻匹配
2018/05/30 Javascript
详解JS转换数值函数Number()、parseInt()、parseFloat()
2018/08/24 Javascript
VSCode搭建React Native环境
2020/05/07 Javascript
[48:27]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
python网络编程之读取网站根目录实例
2014/09/30 Python
Linux下使用python调用top命令获得CPU利用率
2015/03/10 Python
用Python实现随机森林算法的示例
2017/08/24 Python
Python基础练习之用户登录实现代码分享
2017/11/08 Python
Python对excel文档的操作方法详解
2018/12/10 Python
Django框架模板文件使用及模板文件加载顺序分析
2019/05/23 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
2020/02/19 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
2020/04/02 Python
Python爬虫实例——爬取美团美食数据
2020/07/15 Python
高中军训感言200字
2014/02/23 职场文书
幼儿园小班教师寄语
2014/04/03 职场文书
《北京的春节》教学反思
2014/04/07 职场文书
关于梦想的演讲稿
2014/05/05 职场文书
党员考试作弊检讨书1000字
2015/02/16 职场文书
卫生院义诊活动总结
2015/05/07 职场文书
红与黑读书笔记
2015/06/29 职场文书
运动会200米广播稿
2015/08/19 职场文书
Python自动化工具之实现Excel转Markdown表格
2022/04/08 Python