python3.4教程_Python教程(四)
6 函数(一)
前面写的程序都是很小的,假设我们要编写一个很大的程序,并且要重复使用很多遍相同的代码,直观的想法,自然就是把这些代码装到一个“箱子”里,给这个“箱子”编上号,等到用的时候,告诉电脑“箱子”里面的就是所需要的代码。
函数就可以实现这样的功能。函数是Python中最主要也是最重要的代码组织和复用手段。
假设我们想求出两个数相加的结果,就可以写如下的函数:
In [1]: def add(x,y):
...: z = x + y
...: return(z)
其中def是声明函数的关键字,是必须要写的;add是函数的名称;在圆括号里面的x,y是参数,可以理解为数学函数的自变量,并且圆括号也是必须写的;z可以理解为函数的因变量;最后,我们通过return函数,将结果z输出来。
如果我们要求1+2,20+30的值,就可以这样写:
In [2]: add(1,2)
Out[2]: 3
In [3]: add(20,30)
Out[3]: 50
相当于我们把1和2代到自变量那里,就可以得到了结果。需要注意的是,add函数只有两个参数,如果带入参数的个数不为2,会引起错误:
In [4]: add(1,2,3)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
in ()
----> 1 add(1,2,3)
TypeError: add() takes 2 positional arguments but 3 were given
6.1 参数
从前面可以看到,参数相当于数学上函数的自变量。Python也有很多种参数的写法,通过不同的参数,可以实现不同的功能。位置参数
前面例子使用的参数就是位置参数。位置参数的位置很重要,比它的名称要重要得多。我们考虑下面两个函数:
In [5]: def divide1(a,b):
...: return(a/b)
In [6]: def divide1(b,a):
...: return(a/b)
我们定义了两个函数divide1和divide2,除了圆括号中参数a和b的位置,它们都是一样的。接下来我们把数字1和2带入:
In [10]: divide1(1,2)
Out[10]: 0.5
In [11]: divide2(1,2)
Out[11]: 2.0
在函数divide1里面,a和数字1的位置是一样的,此时a等于1;b和数字2的位置是一样的,此时b等于2。所以结果为1/2,即0.5。对于divide2来说,a等于2,b等于1,结果自然为2。关键字参数
如果参数个数很多的话,参数的位置我们很难记住。为了简化工作,我们也可以指定参数的名称:
In [12]: divide2(a=1,b=2)
Out[12]: 0.5
我们指定a的值为1,b的值为2,这样divide2的结果也是0.5了。
像这样使用名称指定的参数就是关键字参数,主要的优点是有助于澄清各个参数的作用,并且参数的位置不一样也不影响结果。
In [13]: divide2(b=2,a=1)
Out[13]: 0.5
关键字参数最大的优点是可以指定默认值。考虑新的函数divide3:
In [14]: def divide3(a=1,b=1):
...: return(a/b)
在这个函数里面,我们默认a和b的值为1,如果我们不往函数里面输入值的话,Python就按照a和b的值为1进行计算:
In [16]: divide3()
Out[16]: 1.0
但如果没有指定默认值,就会报错:
In [17]: divide2()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
in ()
----> 1 divide2()
TypeError: divide2() missing 2 required positional arguments: 'b' and 'a'可变参数
在前面我们知道,值的个数和参数个数不一样就会报错。但是如果在某个问题里面,参数个数是不固定的怎么办。这就要用到可变参数了。
我们考虑求几个数的和,但数字的个数是不固定的。
如果我们括号里面写成位置参数,只需要定义一个参数,然后在参数前面写个*号:
In [22]: def add2(*number):
...: sum = 0
...: for i in number:
...: sum = sum + i
...: return(sum)
In [23]: add2(1,2,3)
Out[23]: 6
In [24]: add2(1,2,3,4)
Out[24]: 10
工作原理是这样的:Python把我们输入的任意的参数转化为元组,我们利用元组的操作,就可以得到结果了。
对于关键字参数,需要在参数前面写**号:
In [25]: def add3(**number):
...: sum = 0
...: for i in number.values():
...: sum = sum + i
...: return(sum)
...:
...:
In [26]: add3(a=1,b=2,c=3)
Out[26]: 6
Python把我们输入的关键字参数转化为字典,其中参数名称为字典的键,参数值为字典的值。我们再利用字典的相关操作,就可以得到结果了。
需要注意的是,这两种可变参数不可混用,否则会报错:
In [27]: add2(a=1,b=2,c=3)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
in ()
----> 1 add2(a=1,b=2,c=3)
TypeError: add2() got an unexpected keyword argument 'a'
In [28]: add3(1,2,3)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
in ()
----> 1 add3(1,2,3)
TypeError: add3() takes 0 positional arguments but 3 were given参数组合
前面介绍的几种参数是可以混用的,但是顺序是固定的,必须是(从前往后):位置参数、关键字参数、可变参数(对应位置参数)、可变参数(对应关键值参数),在使用函数的时候,Python自动按照参数位置和参数名把参数带入到函数里面。
考虑如下的函数:
In [29]: def f1(a,b,c=1,*args,**kw):
...: print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
这个函数里面有五个不同类型的参数,并分别输出参数结果。对于不同的赋值方式,也就有不同的结果:
In [30]: f1(1,2,3,4,5)
a = 1 b = 2 c = 3 args = (4, 5) kw = {}
In [31]: f1(1,2,3,4,e = 5)
a = 1 b = 2 c = 3 args = (4,) kw = {'e': 5}
In [32]: f1(1,2,3)
a = 1 b = 2 c = 3 args = () kw = {}
6.2 返回多个值
这也是Python一个比较特别的功能。在前面的例子当中,函数的结果只有一个,但我们也可以输出多个结果。记得没错的话,R语言并没有这样的功能,对于R语言来说,如果要输出多个结果,需要把这些结果聚合到一个数据结构里面,在返回这个数据结构。参见下面的例子:
In [33]: def ff(a,b):
...: return(a+b,a-b)
In [34]: ff(1,2)
Out[34]: (3, -1)
只需要在return函数里面写上多个值,函数就可以输出多个结果。
python3.4教程_Python教程(四)相关推荐
- python九九乘法表教程_python教程九九乘法表
刚学数学乘法,首先就是要背诵九九乘法表,想必现在没人不会背诵了吧,而现在还有很多家长在催促着自己的孩子学习九九乘法表,但要是将其做成一个表格,是不是就很容易了呢?今天小码王少儿编程培训机构就为大家分享 ...
- python导入模块教程_Python教程——导入自定义模块
#Python 教程 -- 导入自定义模块 导入自定义模块之前我们先创建一个自己的模 块,功能可以随便写,比如下面所示定义了两个功能模块,一个是输出调用的名字, 一个是计算九九乘法表 在项目下创建一个 ...
- python搭建环境教程_python教程(一)·python环境搭建
如前所述,python是一种解释语言,需要一个翻译,或者虚拟机,将python代码并运行它.因此,我们需要一个翻译,现在去官方网站.或者使用一个搜索引擎,如百度搜索,搜索关键字\u201Cpython ...
- python绘制分形图形教程_Python教程之绘制Mandelbrot集合
原标题:Python教程之绘制Mandelbrot集合 一. 分形与混沌 自然界的很多事物,如树木.云彩.山脉.雪花.海岸线等,都呈现出传统几何学所不能描述的形状,这些形状都有如下的特性: 有着十分精 ...
- 手机python教程_python教程下载
python教程是一款非常实用的python编程学习软件平台,这里有着超多实用python课程,帮助小白学习python编程,了解各种函数以及代码运用,这里的课程非常完善,覆盖了基础框架,函数设计,文 ...
- python代码编辑教程_python教程:pycharm编写代码的方式教学
python可以说是新的编程语言,虽说是新编程,但一出来,就受到很长程序员的关注,而且刚出现和java进行对比,很多人就拿python和java进行比较,想python到底好不好,他和java有什么区 ...
- python数据库教程_python教程:数据库
在web开放中,经常会把一些数据存储起来.这时你可以选择数据库.常见的数据库有 mysql.oracle.sql server.mongodb等.今天我介绍下用python如何操作数据库. 工具/原料 ...
- pythonnumpy教程_Python教程:numpy的基本介绍
标准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针.这样为了保存一个简单的[1,2,3],需要有3个指针和三个 ...
- python读取json数据教程_Python教程之解析json数据
这里先说一下什么是json,其实json是一种跨语言通用的数据格式,它的本质是一个字符串,然而几乎所有的计算机语言都可以将这种json格式的数据转为自己能使用的数据类型,例如在PHP中json字符串可 ...
最新文章
- python 时间戳 字符串_python time模块 字符串 时间戳互转
- Vue子组件与父组件之间的通信
- 2d 背包_和平精英:小黄脸表情头套和背包上架,这个价格真的值得买吗?
- iOS CoreTelephony框架介绍与使用案列
- 【学习笔记】我命由天不由我之随机化庇佑 —— 爬山法 和 模拟退火法
- https开头的网址是什么意思_我想打这个面试官,他给我挖坑,问我:URI中的 “//” 有什么用?...
- wpgcms---列表页数据渲染
- YYKit源码学习——YYMemoryCache
- 【图解算法】最小生成树
- java阿里云短信验证码发送
- 斐讯路由器k2编程器救砖教程
- 股票行情图的绘制,分时图和闪电图
- C++中cin,cin.get()和cin.getline()的区别
- 利用K8S技术栈打造个人私有云(连载之:私有云客户端打造)
- 百度服务器状态异常,百度抓取异常连接超时是什么意思
- 硬件改造:新型涂鸦智能暖风机!
- 激活后服务器无限重启,服务器无限重启
- 例题5-3 安迪的第一个字典 UVa10815
- 博士毕业答辩会上的感言——余子濠
- 网络舆情信息工作怎么做的解决方案
热门文章
- Blender图解教程:高仿版超级马里奥(一)帽子建模(附模型下载)
- 网络技能大赛-2019年国赛真题[2019年全国职业技能大赛高职组计算机网络应用赛项真题-H卷]路由交换部分答案详解
- IDEA的主题样式20种
- Swoole WebSocket服务使用Task任务详解 (面向对象方法)
- java modbus 规约_Modbus RTU的规约详细资料详解
- ubuntu20.04+noetic Roboware 安装问题
- 从零开始做手机云台/稳定器
- 【数理统计】学习笔记05:区间估计
- PAT 10341114(并查集)
- [又值奥运季] 2016年里约奥运会--8月6日赛事