本章介绍如何将语句组织成函数,这样,可以告诉计算机如何做事。

下面编写一小段代码计算婓波那契数列(前两个数的和是第三个数)

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',xx =2    # x=2只在func函数内其作用print 'Changed local x to',xx = 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 xprint 'x is',xx = 2print 'Changed local x to',xx =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*timessay('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',cfunc(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 1else:return n*f(n-1)

转载于:https://www.cnblogs.com/Magicorer/p/6496632.html

和虫师一起学python(7)相关推荐

  1. 老齐学python的django 源代码_《跟老齐学Python:Django实战》真正的手把手“带”您学习...

    全书通过不断升级改造的方式,带着读者完成了一个"极其"简单的实战项目.这里说简单是相对于那些"大牛"而言.如果您是大牛,齐老师会建议您使用谷歌或者读官方英文文档 ...

  2. python queue 调试_学Python不是盲目的,是有做过功课认真去了解的

    有多少伙伴是因为一句'人生苦短,我用Python'萌生想法学Python的!我跟大家更新过很多Python学习教程普及过多次的Python相关知识,不过大家还是还得计划一下Python学习路线!Pyt ...

  3. 想转行学python过来人提醒大家几点

    因为目前python非常火,应用也非常广泛,是目前最火的行业之一,竞争很大,工资很高,未来发展也极好. 首先告诉你,零基础学习python难度还是有的,python的专业程度本身就不简单,学习这事本来 ...

  4. 从零开始学 Python 之运算符

    从零开始学 Python 之运算符 前言 大家好,这里是「痴海」从零开始学习 Python 系列教程.此文首发于「痴海」公众号,欢迎大家去关注.学习一门语言最好的办法,就是教懂别人.在这公众号,我会从 ...

  5. 学Python培训有什么用

    ​ Python在近几年的发展非常迅速,在互联网行业Python的薪资也越来越高,不少人开始准备学习Python技术,那么到底学Python培训有什么用呢?来看看下面的详细介绍. 学Python培训有 ...

  6. 学Python有哪些优势

    Python在人工智能领域应用是比较广泛的,近几年,越来越多的人对Python技术比较感兴趣,想要学习,那么具体学Python有哪些优势呢?我们来看看下面的详细介绍就知道了. 学Python有哪些优势 ...

  7. 学python培训到底能干嘛

    Python是在人工智能领域发挥着很重要的作用的,现在依旧有很多人对Python这项技术不是很了解,学Python培训到底能干嘛?下面小编来为大家做下详细的介绍. python其实并不难学,对于初学者 ...

  8. 学Python的好处有哪些?

    Python是一种比较简单的编程语言技术,想要快速进入到IT行业,Python是非常好的选择,为什么这么说呢?下面小编就为大家详细的介绍一下学Python的好处有哪些? ​ 学Python的好处有哪些 ...

  9. 零基础学python培训需要学习多久?

    Python是一种入门比较简单的编程语言,但是如果是零基础学员,学习起来还是需要时间的,那么零基础学python培训需要学习多久呢?我们来看看小编的详细介绍吧. 零基础学python培训需要学习多久? ...

最新文章

  1. POJ2299 树状数组求逆序对
  2. Pytorch中RNN入门思想及实现
  3. OJ1030: 判断直角三角形
  4. 总结php删除html标签和标签内的内容的方法
  5. 2018年5月14日第4课—文件隐藏权限、特殊权限、find命令等
  6. centOS下mongodb的安装
  7. 华为PIM-SSM配置实例
  8. 学python将来做什么工作_学Python编程能做什么工作?从事什么岗位?——这些问题你知道吗?...
  9. 射频能量用于治疗和美容
  10. teamviewer路由器设置虚拟服务器,远程控制软件TeamViewer的配置详细操作步骤
  11. 无线网络经常掉线的原因以及网络的设置
  12. AD16布局流程及注意事项
  13. 如何恢复手动删除的微信聊天记录?2个简单高效方法推荐
  14. [架构之路-160]-《软考-系统分析师》-10-系统分析-7-数据与数据流程分析、需求规格说明书
  15. 流利说 Level 5 全文
  16. FLASH(M25P16)-页编程(PP)指令时序代码及仿真波形(内含M25P16仿真模型文件)
  17. 时间格式2020-09-29T18:02:02.000Z转换为“年月日时分秒“
  18. 4G LTE频带划分和国内运行商资源分配
  19. Windows上C语言实现设置控制台的颜色
  20. 2022-12-15 c++总结

热门文章

  1. java 二维数组倒置_Java数组反转及二维数组
  2. jsessionid
  3. php点击查看更多,微信小程序加载更多和点击查看更多功能介绍
  4. 《深度学习入门》实现三层神经网络前向传播
  5. 判断奇数偶数和闰年(Python)
  6. 【Solr专题之九】SolrJ教程
  7. 遥感图像场景分类常用数据集
  8. xgboost gbdt特征点分烈点
  9. Java多线程(十)之ReentrantReadWriteLock深入分析
  10. 伪元素:placeholder-shown:focus-within