一、函数
1、调用函数
要调用一个函数,需要知道函数的名称和参数
abs(X)
函数帮助:help(函数名)
2、定义函数
def
语句,依次写出函数名、括号、括号中的参数和冒号:函数体 return语句做返回
函数的参数检查:
二、函数参数
1、默认参数
如果经常计算平方,可以设置默认参数=2,这样调用的时候直接pow(x),不要加默认参数
循环:
- while循环
- 条件满足则不断循环,否则退出。初始化二个值:n = 值 sum = 值
- for......in循环
依次把list或tuple中的每个元素迭代出来
默认参数指向不变的对象,不能是列表
2、可变参数
传入的参数是可变的
调用函数:calc(1, 2)
调用已经存在的list或是truple
3、关键字参数
可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。
而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
*args
是可变参数,args接收的是一个tuple;
**kw
是关键字参数,kw接收的是一个dict。
def person(name, age, **kw):
print 'name:', name, 'age:', age, 'other:', kw
关键字参数有什么用?它可以扩展函数的功能。比如,在person
函数里,我们保证能接收到name
和age
这两个参数,但是,如果调用者愿意提供更多的参数,我们也能收到。试想你正在做一个用户注册的功能,除了用户名和年龄是必填项外,其他都是可选项,利用关键字参数来定义这个函数就能满足注册的需求。
4、参数组合
参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数。
三、传入函数
1、变量指向函数
2、高阶函数
变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
调用add(-5, 6, abs)
四、模块
1、一个.py文件就是一个模块
为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)
包里面有一个__init__.py文件,注意
调用包的模块:mycompany.abc
编写一个hello.py模块,里面定义一个test方法 def test(),应用
>>>import hello
调用模块的方法>>>hello.test()
2、作用域
正常的函数和变量名是公开的(public),可以被直接引用,比如:abc
,x123
,PI
等;
类似__xxx__
这样的变量是特殊变量,可以被直接引用,但是有特殊用途,比如上面的__author__
,__name__
就是特殊变量
类似_xxx
和__xxx
这样的函数或变量就是非公开的(private),不应该被直接引用,比如_abc
,__abc
等;
我们在模块里公开greeting()
函数,而把内部逻辑用private函数隐藏起来了,这样,调用greeting()
函数不用关心内部的private函数细节,这也是一种非常有用的代码封装和抽象的方法
五、安装第三方模块
1、安装第三方模块
是通过setuptools这个工具完成的。Python有两个封装了setuptools的包管理工具:easy_install
和pip
。目前官方推荐使用pip
。
如果你正在使用Mac或Linux,安装pip本身这个步骤就可以跳过了。
pip install PIL
六、面向对象
一个对象包含了数据和操作数据的函数
如果采用面向对象的程序设计思想,我们首选思考的不是程序的执行流程,而是Student
这种数据类型应该被视为一个对象,这个对象拥有name
和score
这两个属性(Property)。如果要打印一个学生的成绩,首先必须创建出这个学生对应的对象,然后,给对象发一个print_score
消息,让对象自己把自己的数据打印出来。
调用
>>> bart.name = 'Bart Simpson'
比如我们定义的Class——Student,是指学生这个概念,而实例(Instance)则是一个个具体的Student,比如,Bart Simpson和Lisa Simpson是两个具体的Student:
数据封装、继承和多态是面向对象的三大特点
2、数据封装
方法就是与实例绑定的函数,和普通函数不同,方法可以直接访问实例的数据