在命令行启动脚本
$python script.py
自动执行Python解释器:在#!后面写上Python的完整路径。更好的方案是使用Unix系统中的env命令
#!/usr/bin/env python
执行时,直接输入
$script.py
语句与语法
换行继续(\)
Python语句,一般使用换行分隔,一行一个语句。过长的语句可以用反斜杠(\)分解。
换行继续不需要(\)的例外情况:
- 在闭合操作符中,如小括号,中括号,花括号中多行书写
- 三引号包括下的字符
缩进分隔
Python使用缩进来分隔代码块。代码的层次关系是通过同样深度的空格或制表符缩进体现的。推荐使用4个空格宽度。
由于不同编辑器中的制表符的空白宽度不一,如果代码要跨平台应用,或者会被不同的编辑器读写,建议不使用制表符。
标识符
Python标识符字符串规则:
- 第一个字符必须是字母或下划线
- 剩下的字符可以是字母数字或者下划线
- 大小写敏感
专用下划线标识符
Python使用下划线作为变量前缀和后缀指定特殊变量。因为下划线对解释器有特殊意义,而且是内建标识符所使用的符号,建议程序员避免使用下划线作为变量名的开始。
_xxx
不用from module import *
导入,类中的私有变量名__xxx__
系统定义的名字
代码块
if
if expression:
expr_true_suite
if - else
if expression:
expr_true_suite
else:
expr_false_suite
if - elif - else
if expression1:
expr1_true_suite
elif expression2:
expr2_true_suite
elif expressionN:
exprN_true_suite
else:
expr_false_suite
条件表达式
X if C else Y
equals
if C:
X
else:
y
while
while expression:
suit_to_repeat
for
for iter_var in iterable:
suite_to_repeat
pass
Python提供了pass
语句,不做任何事情——NOP(No Operation).
while - else / for - else
while/for expr :
suites
else:
suites
在while或者for最后条件不满足时,执行else的suiites。
如果while/for的suites中间出现break,则直接跳过,不执行else部分。
模块结构和布局
在Python中建立一种统一并容易阅读的结构,并将其应用到每一个文件中去。
主程序代码通常都和前面的代码相似,先检查__name__
的值,然后执行相应的操作。如果模块被导入,__name__
的值为模块名称;如果模块被直接执行,__name__
的值为__main__
。
数据类型
Python中的对象包含三要素:id、type、value。
其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值
- is 判断的是a对象是否就是b对象,是通过id来判断的
- == 判断的是a对象的值是否和b对象的值相等,是通过value来判断的
存储模型
能够保存单个字面对象的类型,成为原子或标量存储,分类:数值,字符串。
能够容纳多个对象的类型,成为容器存储或复合存储,分类:列表,元组,字典。
更新模型
对象创建成功之后,值是否可以更改呢?可变对象允许值被更新,不可变对象则不允许它们的值被更改。
可变类型: 列表,字典 不可变类型:数字,字符串,元组
访问模型
根据访问存储的数据的方式,对类型进行分类:直接存储,顺序和映射。
数值类型,直接访问。
序列类型:元素按从0开始的索引顺序访问,字符串,元组,列表。
映射类型:通过键值对映射来访问。
操作符
算数操作符
按照操作符的优先级依次排列
exp1 ** exp2 exp1的exp2次方
+exp
-exp
exp1 * exp2
exp1 / exp2
exp1 // exp2 地板除,from 2.2
exp1 % exp2 模余
exp1 + exp2
exp1 - exp2
位操作符
Python整形支持标准位操作:
~num 取反
num1<<num2 左移num2
num1>>num2 右移num2
num1&num2 按位 与
num1^num2 按位 异或
num1|num2 按位 或
函数
标准类型函数
cmp()
str()
type()
数字类型函数
int(x, base=10)
long(x, base=10)
float(x)
complex(real[, imag])
bool(x)
abs(num) 绝对值
coerce(n1,n2) 将n1和n2转换为同一类型,然后以元组返回
divmod(n1,n2) 除法取余运算的结合
pow(n1,n2,mod=1) 取n1的n2次方,如果提供mod,再对mod取余
round(n,ndig=0) n四舍五入,保留ndig位小数
hex(num) 将数字转换为十六进制,并用字符形式输出
oct(num) 将数字转换成八进制,并用字符形式输出,num [0,255]
chr(num) 将ASCII值的数字转换成ASCII字符,
ord(num) 接受ASCII或者Unicode的字符,返回值
unichr(num) 接受Unicode码值,返回字符
序列
序列类型操作符
obj [not] in seq 判断obj是否在序列seq中
seq[index] 获得下标为index的序列值
seq[i1:i2:s] 获得从i1到i2,以s间隔的序列值
seq * N 重复序列N次
seq1 + seq2 连接seq1和seq2
list(iter) 将可迭代对象转化成列表
tuple(iter) 将可迭代对象转化成元组
enumerate(iter) 接受可迭代对象作为参数
len(seq) 返回seq的长度
max(iter,key=None) 返回iter的最大值,key必须是可以传递给sort的参数
min(iter,key=None) 返回iter的最小值,key必须是可以传递给sort的参数
reversed(seq) 接受序列作为参数,返回一个逆序的迭代器
sorted(iter,
fun=None, 接受一个可迭代对象,返回有序列表
key=None,
reverse=False)
sum(seq,init=0) 返回seq和可选参数init的总和,
其效果等于reduce(operator.add,seq,init)
zip([it0,...itN]) 返回一个列表