python外壳:代码结构
python使用空白来区分代码结构。
使用 # 注释
python没有多行注释,你需要明确的在注释部分的每一行开始处加上一个#。
如果#出现在字符串中,将回归普通字符的角色。
使用\连接
使用 if、elif、else进行比较
False
false 布尔类型
None null类型
0 整数类型
0.0 浮点型
'' 空字符串
[] 空列表
() 空元组
{} 空字典
set() 空集合
剩下的都会被认为是True
循环外用else
while True:
else: #没有执行break(正常结束执行)
使用for迭代
python频繁使用迭代器。它允许在数据结构长度未知和具体实现未知的情况下遍历整个数据结构,并且支持迭代快速读写中的数据,以及允许不能一次读入计算机内存的数据流的处理。
列表、元组、字符串、字典、集合都是python中可迭代的对象。
元组、列表迭代产生一项。字符串迭代会产生一个字符。
字典会产生字典中的键,用values()函数对值进行迭代。items()以元组形式返回键值对。
使用 zip() 进行并行迭代
在最短序列用完时就结束。
range()生成自然数序列
range(start,stop,step) start默认为0,step为-1反向序列。
zip() range()返回一个可迭代的对象。可以使用 for…in…迭代,也可以转化为一个序列。
推导式
推导式是从一个或者多个迭代器快速简介地创建数据结构的一种方法。
列表推导式:
[expression for item in iterable if condition]
字典推导式:
[key_expression : value_expression for expression in iterable]
集合推导式:
{expression for expression in iterable}
元组没有推导式,将列表推导式[]变为()为生成器推导式。
一个生成器只能运行一次。生成器仅在运行时产生值,不会被存下来。
函数
一个函数可以接受任何数量任何类型的值作为输入参数,可以返回任何数量任何类型的结果。如果函数不显式调用return函数,那么会默认返回None。
None
thing = None
if thing is None
if thing
False不等价于None
位置参数
关键字参数
调用函数时指定对应参数的名字,甚至可以采用与函数定义不同的顺序调用。
同时使用位置参数和关键字参数,位置参数要放在前面。
指定默认参数
默认参数在函数定义时已经计算出来了,可变数据类型作为默认参数值,不会变。
1. 假如默认参数是可变对象,则会在原处直接更改对象,下次调用参数时,默认参数已经更改过的了。
2. 假如默认参数不可变,那么给函数中给 参数赋值时,参数会引用内存的其他地方。下次函数调用时 默认参数还是从定义时赋值处取得值,因此没有副作用!
使用*收集位置参数
当参数被用在函数内部时,星号将一组可变数量的位置参数集合成参数值的元组。
*agrs 常规用法。
使用**收集关键字参数
将参数收集到一个字典中, 参数的名字是字典的键,对应参数的值是字典的值。
**kwargs 函数中kwargs为一个字典。
文档字符串
函数体的开始部分附上函数定义说明的文档,即文档字符串。
调用help()可以打印输出一个函数的文档字符串。
函数名.__doc__返回文档字符串。
函数 一等公民
def 函数名(func):
func()
参数func是一个可以运行的函数的名字。
func函数没有加(),func()意味着调用函数,没有括号,Python会把函数当做普通对象。
内部函数
在函数中定义另外一个函数。
闭包
内部函数可以看做一个闭包。闭包是一个可以由另外一个函数动态生成的函数,并且可以改变和存储函数外创建的变量的值。
匿名函数lambda()函数
生成器
用来创建python序列的一个对象。可以迭代庞大的序列,且不需要在内存中创建和存储整个序列。
每次迭代生成器时,他会记录上一次调用的位置,并且返回下一个值。
当要创建一个比较大的序列,生成器推导会代码会很长,这时可以用生成器函数。
生成器函数和普通函数类似,返回用yield 而不是return。
详解 : http://python.jobbole.com/81911/
装饰器
不改变源代码的情况下修改已经存在的函数。
装饰器实质上是一个函数。它把一个函数作为输入并且返回另外一个函数。
可以直接在要装饰的函数前添加装饰器的名字。
同一个函数可以有多个装饰器。
命名空间和作用域
函数内可以使用全局变量,但不能改变全局变量。
global 关键字
异常