Python学习笔记(六)抽象(上)
来源:互联网 发布:网络教育自我鉴定 编辑:程序博客网 时间:2024/06/05 10:23
6.1 懒惰即美德
目前我们写的程序都很小,如果要编写比较大的程序,就要进行代码复用。 创建函数即可解决此问题。
6.2 抽象和结构
抽象可以节省很多工作,而且模块化的程序也是人们能更轻松地理解,正如其他编程语言所做的那样。
6.3 创建函数
函数可以调用,他执行某种行为并且返回一个值(当然,并非所有的函数都会返回值),一般来说,内建的callable函数可以用来判断函数是否可调用。
>>> import math>>> x=1>>> y=math.sqrt>>> callable(x)False>>> callable(y)True
使用def语句可以定义函数
>>> def hello(name):return 'hello,'+name+'!'>>> hello ("daxiao")'hello,daxiao!'
6.3.1 记录函数
如果想要给函数写文档,让后面使用该函数的人能理解的话,可以加入注释(以#开头)。 另外一个方式就是直接写上字符串。 如果在函数的开头写下字符串,他就会作为函数的以部分进行存储,这称为文档字符串。
>>> def hello(name):'name'return 'hello'+name+'!'>>> hello.__doc__'name'
也可以通过help访问
>>> help(hello)Help on function hello in module __main__:hello(name) name
6.3.2 并非真正函数的函数
实际上相当于之前我们接触过的void 类型. 可以执行一部分操作,print 结果是None
>>> def test():print 'this is morning '>>> x=test()this is morning >>> x>>> print xNone6.4 参数魔法
从最基本的简单回顾一下
6.4.1
6.4.2 我能改变参数吗
函数通过它的参数获得一系列值,参数只是变量而已:
>>> def trytochange(n):n='l'>>> name='x'>>> trytochange(name)>>> name'x'就与之前的C和hava 一样,将实参传入形参,然后改变形参,实参的值当然不会改变.
但是如果参数是一个可变的结构,比如列表呢?
>>> def chang(n):n[0]='l'>>> name('x','l')Traceback (most recent call last): File "<pyshell#16>", line 1, in <module> name('x','l')TypeError: 'str' object is not callable>>> name=['x','l']>>> chang(name)>>> name['l', 'l']
就与C中一样,当形参是一个数组时,通过改变形参,实参也跟着变了. 所以为了防止这种情况,记得引用时先拷贝参数.
当参数不可变时,怎样通过函数来修改参数呢?
>>> def inc(x):return x+1>>> x=2>>> x=inc(x)>>> x3
6.4.3 关键字参数和默认值
目前我们所使用的参数都叫做位置参数,因为他们的位置很重要-----事实上比他们的名字更加重要. 本节中引入的这个功能可以回避位置问题,当你慢慢习惯使用这个功能以后,就会发现程序规模越大,它们的作用也就越大.
有些时候,参数是很难记的,为了让事情简单些,可以提供参数的名字.
>>> def hello_1(greeting ,name):print '%s,%s'%(greeting,name)>>> hello_1(name='world',greeting='hello')hello,world
这样一来,位置就完全没影响了.
关键字参数最厉害的地方在于可以在函数中给参数提供默认值,当参数具有默认值时,调用的时候可以不提供,也可以只提供一部分参数.
>>> def hello_1(greeting='hello' ,name='world'):print '%s,%s'%(greeting,name)>>> hello_1(name='liang')hello,liang
6.4.4 收集参数
要是用户可一个函数提供人一多的参数,实现起来也不难.
>>> def print_(*p):print p>>> print_(1,2,3)(1, 2, 3)
- Python学习笔记(六)抽象(上)
- Python学习笔记(六)抽象(下)
- python学习笔记(六)
- python 学习笔记(六)
- Python学习笔记(六)
- Python学习笔记(六)
- python学习笔记(六)
- Python学习笔记(六)
- Python学习笔记(六)
- Python学习笔记(六):Python模块
- Python学习笔记【六】——《python基础教程》:: 抽象
- Python学习教程(六)——抽象之函数
- Python学习笔记(七)更加抽象
- JAVA学习笔记(六)抽象类与接口
- python tutorial 学习笔记(六)class
- python学习笔记之(六)
- Python核心编程学习笔记(六)
- python book 学习笔记(六)
- 【4】coco2d-x核心类之CCDirector
- WinDBG常用断点命令
- CocosStudio 学习笔记 之 开关、进度条、步进器也,Button触摸事件的监听
- 真心的被android中的targetSdkVersion折磨了两天。配置它一直报空指针。不兼容造成的
- Java多线程-(1)概念与原理
- Python学习笔记(六)抽象(上)
- 基于比较的排序算法的最优下界为什么是O(nlogn)
- git学习
- Android之rild进程启动源码分析
- 认真是我们最好的人生态度
- 配置 Sublime Text 方便查看Scala 编译器的解析结果
- Linux获取网页源码的几种方法
- 【EXCEL】update拷贝数字
- 【stagefrightplayer】4 OMX Codec介绍 (2/2)