python基础学习笔记(七)
本章介绍如何将语句组织成函数,这样,可以告诉计算机如何做事。
下面编写一小段代码计算婓波那契数列(前两个数的和是第三个数)

- fibs = [0,1] # 定义一个列表,初始内容是0,1
- for i in range(8): #循环8次
- fibs.append(fibs[-2]+fibs[-1]) #append在末尾追加一个数,这个是它前面两个数的和
- #输入
- >>> fibs
- #输出
- [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

因为赋完值fibs已经有两个数了(0,1),所以循环8次之后,列表有10个数,两个数相加等于第3个数。
是不是觉得应该由我们输入来控制打印多少个数?只用把程序小变一下就行了。

- fibs = [0,1]
- num = input('How many fibonacci numbers do you want?')
- for i in range(num-2):
- fibs.append(fibs[-2]+fibs[-1])
- print fibs
- #输入
- >>>
- How many fibonacci numbers do you want?12
- #输出
- [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

抽象
抽象有可以节省很多工作,它使得计算机程序可以让人读懂的关键。计算机喜欢处理精确和具体的指令,但人不同,我们更喜欢丢进去一个东西,计算机就能反馈给我们想要的结果,而不是由我们一步一步的告诉它怎么做。因此,上面的代码抽象一点,应该是这样的:
- num = input('How many fibonacci numbers do you want?')
- print fibs
那计算机怎么知道要怎么做?我们可以把处理的过程封装成函数,在我们每次用到时只用调用这个函数就可以了。
创建函数
函数是可以调用的,它执行某种行为并且返回一个值。内建的callable函数可以用来判断函数是否可调用:

- >>> import math
- >>> x = 1
- >>> y = math.sqrt
- >>> callable(x)
- False
- >>> callable(y)
- True

备注:callable 在python3.0中不再可用。
那如何定义一个函数呢?使用def语句即可:

- >>> def hello(name):
- return 'hello.'+name+'!'
- #我们定义了一个hello函数,它会将输入的内容前面加“hello.”后面加“!”,并返回给用
- #户
- >>> print hello('world')
- hello.world!
- >>> print hello('zhangsan')
- hello.zhangsan!

不错吧!再回过头去想想怎样把返回婓波那契数列定义成一个函数。如下:

- #定义fibs函数,用于婓波那契数列
- >>> def fibs(num):
- result = [0,1]
- for i in range(num-2):
- result.append(result[-2]+result[-1])
- return result
- #直接调用fibs函数
- >>> fibs(10)
- [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
- >>> fibs(15)
- [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]

局部变量
当函数定义生命变量的时候,函数内所生命的变理只在其函数内有效,与函数外具有相同名称的其他变量没有任何关系

- #局部变量
- def func(x):
- print 'x is',x
- x =2 # x=2只在func函数内其作用
- print 'Changed local x to',x
- x = 50
- func(x) #func函数并没有返回数据过来。
- print 'x is still',x
- #输出
- >>>
- x is 50
- Changed local x to 2
- x is still 50

global 语句
如果想把一个变量声名为 全局的,则可以使用global语句。

- def func():
- global x
- print 'x is',x
- x = 2
- print 'Changed local x to',x
- x =50
- func()
- print 'Value of x is ',x
- #输出
- x is 50
- Changed local x to 2
- Value of x is 2

global 语句被用来生命x 是全局,因此在执行完func函数后,x的值已经发生了改变,并且作用于整个程序,因此最后的输入结果为2
默认参数
对于一些参数,我们希望它的一些参数是可选的,如果用户不想要为这些参数提供值的话,这些参数就使用默认值。

- def say(message,times=1):
- print message*times
- say('Hello')
- say('World',5)
- #输出
- >>>
- Hello
- WorldWorldWorldWorldWorld

定义的say函数的第两个参数就是可选的,默认为times=1;也就是将两个参数相乘输出。
注意:只有在形参表末尾的那些参数可以有默认参数,如def func(a=5,b) 是无效的。
关键参数
如果某个函数有许多参数,而我们只想指定其中的一部分,那么可以使用名字(关键字)而不是位置来给函数指定实参。----这被称作 关键参数

- def func(a,b=5,c=10):
- print 'a is',a, 'and b is',b,'and c is',c
- func(3,7)
- func(24,c=32)
- func(c=23,a=14)
#输出- >>>
- a is 3 and b is 7 and c is 10
- a is 24 and b is 5 and c is 32
- a is 14 and b is 5 and c is 23

这样做,我就不必担心参数的顺序,使用函数变得更加简单。假设其它函数都有默认值,我们可以只给自己想要的参数赋值。
递归:
有用的递归函数... 等等,什么是无用的递归?先来看一个函数的定义:
- def recursion()
- return recursion()
显然,它什么也干不了,程序的执行不断申请内存,直接内存耗尽,程序崩溃。
接着,有用的递归函数包含以下几个部分:
- 当函数直接返回值时有基本实例(最小可能性问题)
- 递归实例,包括一个或者多个问题最小部分的递归调用。
下面通过递归函数来计算一个n的阶,n*(n-1)*(n-2)*....*1
- def f(n):
- if n == 1:
- return 1
- else:
- return n*f(n-1)
python基础学习笔记(七)的更多相关文章
- 0003.5-20180422-自动化第四章-python基础学习笔记--脚本
0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...
- Python基础学习笔记(七)常用元组内置函数
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-tuples.html 3. http://www.liaoxue ...
- python 基础学习笔记(1)
声明: 本人是在校学生,自学python,也是刚刚开始学习,写博客纯属为了让自己整理知识点和关键内容,当然也希望可以通过我都博客来提醒一些零基础学习python的人们.若有什么不对,请大家及时指出, ...
- Python 基础学习笔记(超详细版)
1.变量 python中变量很简单,不需要指定数据类型,直接使用等号定义就好.python变量里面存的是内存地址,也就是这个值存在内存里面的哪个地方,如果再把这个变量赋值给另一个变量,新的变量通过之前 ...
- Python基础学习笔记(十三)异常
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-exceptions.html Python用异常对象(excep ...
- Python基础学习笔记(十二)文件I/O
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-files-io.html ▶ 键盘输入 注意raw_input函 ...
- Python基础学习笔记(十一)函数、模块与包
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-functions.html 3. http://www.liao ...
- Python基础学习笔记(十)日期Calendar和时间Timer
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-date-time.html 3. http://www.liao ...
- Python基础学习笔记(九)常用数据类型转换函数
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-variable-types.html 3. http://www ...
- Python基础学习笔记(八)常用字典内置函数和方法
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-dictionary.html 3. http://www.lia ...
随机推荐
- 第六章 Hyper-V 2012 R2 的检查点
"检查点"是 Windows Server 2012 R2 中对 Windows Server 2012 及以前版本的 Hyper-V"快照"功能的新称呼.之所 ...
- centos6.5下oracle11g开机自动启动方法一
转裁于 方法一 https://blog.csdn.net/wx5040257/article/details/77875690 方法二 https://blog.csdn.net/wx504025 ...
- Python进阶(一)
完成慕课网的python基础学习以后,大约花了三天时间,平均每天一个小时,总结了一些比较好的例题和思想方法,下面来学习python进阶吧 参考廖雪峰官方课程 函数 python官方函数调用文档 定义默 ...
- jweixin-1.1.0.js微信接口“分享给朋友”文字和图片配置
在npm官网找到了:微信官方 js-sdk CommonJS 版https://www.npmjs.com/package/weixin-js-sdk 步骤一:引入JS文件在需要调用JS接口的页面引入 ...
- swift语言混编--语言交互的接口
FFI stands for Foreign Function Interface. A foreign function interface is the popular name for the ...
- 简单使用metamascara
package.json 配置文件信息 { "name": "test-mascara", "version": "1.0.0&q ...
- solidity ecrecover
https://solidity.readthedocs.io/en/latest/units-and-global-variables.html#mathematical-and-cryptogra ...
- mysql 日期操作 增减天数、时间转换、时间戳(转)
转自http://www.cnblogs.com/wenzichiqingwa/archive/2013/03/05/2944485.html http://hi.baidu.com/juntao_l ...
- 如何使用Simulink模糊控制
在用这个控制器之前,需要用readfis指令将fuzzy1.fis加载到matlab的工作空间,比如我们用这样的指令:fis1=readfis(‘fis1.fis’):就创建了一个叫myFLC的结构体 ...
- MATLAB中的FOR循环问题
做量化操作的时候经常需要使用到matlab编写策略或者计算多因子,for循环非常慢,自己找了一些matlab中for循环的优化方法,for的部分每处理一个大矩阵都要花费大量的时间,这是不可避免需要遇到 ...