设为首页 收藏本站
查看: 1362|回复: 0

[经验分享] python基础学习笔记(七)

[复制链接]

尚未签到

发表于 2015-4-22 08:36:24 | 显示全部楼层 |阅读模式
  
本章介绍如何将语句组织成函数,这样,可以告诉计算机如何做事。

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



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)
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-59401-1-1.html 上篇帖子: Python 学习笔记(半ZZ半自己写) 下篇帖子: 捉摸Python的WSGI(转)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表