python
语言特点
解释型脚本语言
-
内建
- 高级的数据结构
面向对象的语言
-
便于
- 数据和逻辑相分离
动态语言
-
变量本身
- 类型不固定
- 可随意转换
不用考虑
- 内存问题
默认编码
- UTF-8
基本规则
- 注释
\n
- 行分隔符
\
-
继续上一行
-
跨行特例
-
闭合操作符
-
各种括号
- {}, 【】,()
-
-
三引号
- 常用于[多行注释]
-
;
-
在同一行
-
连接多个语句
- 可读性低不提倡
-
:
-
分开代码块(组)
- 头&体
缩进块
-
语句(代码块)
- 用缩进深度(4空格)区分
空行
-
用于分隔
- 函数
- 类
模块
-
每一个脚本文件
- 均为模块
- 一磁盘文件形式存在
-
若模块过大
-
考虑
- 拆解代码
- 另建模块
-
多元赋值
-
x,y,z=1,2,3
- 一一对应(最好用小括号括起来)
输出
输入
- raw_input
列表元素
- 类似于数组
- 切片操作[from, to] 截取from到to 含from,不含to
字典元素
- { }键值对
文件
-
打开
- handle= open(file_name, access_mode = ‘r’)
-
关闭
- handle.close()
函数定义
- def function_name([arg]):
“optional documentation string”
function_suite
类中
-
init()
- 相当于构造函数,类创建时自动执行
-
self
- 每个方法都有这个参数,相当于this
内存管理
- 变量无须事先申请
- 变量无须指定类型
- 程序员不用担心内存管理
- 变量名会被“回收”
- del 语句能够直接释放资源
函数
创建函数
def function_name(arguments):
“function_documentation_string”
function_body_suite
前向引用:Python 也不允许在函数未声明之前,对其进行引用或调用
函数中使用默认参数会使程序的健壮性上升到极高的级别。
函数式编程的内建函数:
-
Filter(func, seq):
- 调用一个布尔函数 func 来迭代遍历每个 seq 中的元素;返回一个使 func 返回值为 true 的元素的序列
-
Map(func, seq1[,sql2…]):
- 将函数 func 作用于给定的序列 seq 中的每个元素,并用一个列表来提供返回值
-
Reduce(func, seq):
- 将一个二元函数作用于 seq 序列的元素,每次携带一对(先前的结果以及下一个序列元素),连续地将现有的结果和下一个值作用,最后减少我们的序列为一个单一的返回值
变量作用域
- 全局变量除非被删除,否则它们存活到脚本运行结束,且对所有的函数都是可访问
- 为了明确地引用一个已命名的全局变量,必须使用 global 语句。
模块
语法
- import module1[,module2[,…]]
- from module import name1*,name2*,…++
- from module import name as shortname
- from module import *
import 语句的模块顺序
- Python 标准库模块
- Python 第三方模块
- 应用程序自定义模块
禁止模块的某个属性导入,可以在该属性名称前加一个下划线:import foo._bar
对象
特性
- 身份
- 类型
- 值
内建函数type()
- 获取对象的类型
None
- NULL对象
切片对象
-
sequence
- [起始索引:结束索引:步进值]
标准类型内建函数
-
cmp(obj1, obj2)
- 比较两个对象,返回徽整型>0;=0;<0
-
repr(obj)或者
obj
- 返回obj的字符串表示
-
str(obj)
- 返回obj适合可读性好的字符串表示
-
type(obj)
- 返回obj的类型
str(),repr(),`` 三者的比较
- str():生成一个对象的可读性比较好的字符串表示,对用户友好
- repr():对 Python 比较友好
- ``:效果跟 repr()一样,建议不再使用
type()和 isinstance()
- type(obj):返回 obj 的类型
- isinstance(obj,obj_type):判断 obj 是否为 obj_type 类型,返回布尔值
可变类型:列表、字典
不可变类型:数字、字符串、元组
不支持的类型:
char 或 byte:无
指针:无
int VS short VS long : 无区别
float VS double :无区别
文件和输入输出
文件内建函数open()和file()
- open()语法:file_object = open(file_name, access_mode=‘r’,buffering=-1)
- open()和 file()函数具有完全相同的功能,一般来说,建议使用 open()来读文件,在你想说明你是处理文件对象的时候使用 file(),例如 if isinstance(f, file)
文件内建方法
- 输入:read(),readlines(),for eachLine in file
- 输出:write(),writelines() [注:没有 writeline()方法]
- 文件内移动:seek() 0,1,2 分别代表文件开头,当前位置,文件末尾
命令行参数:
- sys.argv 是命令行参数的列表
- len(sys.argv)是命令行参数的个数(也就是 argc)
数据类型
数字
-
长整型
- 使用大写的L表示
-
复数
- 虚数不能单独存在。必须加上 0.0 的实数部分
- 由实数+虚数两部分构成
- 实数跟虚数部分都是浮点型
- 虚数部分后缀是 j 或 J
-
复数属性
- num.real 该复数的实数部分
- num.imag 该复数的虚数部分
- num.conjugate() 返回该复数的共轭复数
-
混合模式优先级(转化): complex > float > long > int
-
幂运算(**)
- 比左侧操作数的一元运算符优先级低,比右侧操作数的一元运算符优先级高。
- eg: -3 ** 2 = -9 4.0 ** -1.0 = 0.25
-
位操作符
- 只适用于整型
- 取反(~),安位与(&),或(|),异或(^),左移(<<),右移(>>)
- 负数当做正数的 2 进制补码处理
- num <<( 或 >> )N = num * ( 或 / )2 ** N
-
int(obj, base) : 返回 obj 数字的 base 进制数
-
数值运算内建函数
- abs(num) num 的绝对值
- coerce(num1, num2) 转化为同一类型,返回一个元组
- divmod(num1, num2) 返回元组(num1/num2, num1%num2)
- pow(num1, num2, mod=1) 取 num1 的 num2 次方,若有 mod,则对其再取余
- round(flt, ndig=1) 对浮点型 flt 进行四舍五入,保留 ndig 位小数
-
仅适用于整型的内建函数
- hex(num) 将 num 转化为十六进制,并以字符串返回
- otc(num) 将 num 转化为八进制,并以字符串返回
- chr(num) 返回 num 的 ASCII 值,范围:0 <= num <= 255
-
“ True”和“ False”严格区分大小写!且分别对应“ 1”和“0”
字符串
列表
元组
字典
-
例子
dict1 = ,‘name’:’earth’,’port’:80-
for key in dict1.keys():
print ‘key=%s, value=%s’% (key,dict1*key+) -
内建函数
- dict.clear() 删除字典中的所有元素
- dict.fromkeys(seq, val=None) 返回一个新字典,seq 为键,val 为值
- dict.get(key, default=None) 返回字典中 key 的值,若无此键则返 default
- dict.has_key(key) 是否存在 key 键,返回布尔值
- dict.items() 返回一个包括字典中键值对元组的列表
- dict.keys() 返回一个字典中的键的列表
- dict.values() 返回一个包含字典中所有值的列表
- dict.update(dict2) 将字典 dict2 的键值对添加到字典 dict 中去
-
不允许一个键对应多个值
- 键必须是可哈希的对象。像列表和字典这样的可变类型,由于它们不是可哈希的,所以不能作为键
集合
-
现已成为 Python 的基本数据类型
-
两种类型:可变集合(set)和不可变集合(frozenset)
-
可用 set()和 frozenset()来分别创建可变集合跟不可变集合
-
内建函数
- s.issubset(t) 判断 s 是否是 t 的子集,返回布尔值
- s.issuperset(t) 判断 s 是否是 t 的超集,返回布尔值
- s.union(t) 返回新集合,s 跟 t 的并集
- s.intersetion(t) 返回新集合,s 跟 t 的交集
- s.difference(t) 返回新集合,其成员是 s 的成员,但不是 t 的成员
流程控制
if判断
-
例子
if expression1:
expr1_true_suite
elif expression2:
expr2_true_suite
elif expression3:
expr3_true_suite
else:
None_of_the_above_suite -
三元操作符
- X if C else Y
不支持swich/case
while循环
- while expressin:
suit_to_repeat
for循环
- for iter_var in interable:
suit_to_repeat
pass语句
- 表示不做任何事
数据库编程
Python 数据库 API
- Python 能够直接通过数据库接口
- 也可以通过 ORM(需要自己书写 SQL)
- 来访问关系数据库
Python 应用程序(嵌入 SQL)-- Python DB 接口程序 — RDBMS 客户端库 — 关系数据库
以 MySQL 举例
import MySQLdb
cxn = MySQLdb.connect(user=’rooot’)
cxn.query(‘CREATE DATABASE test’)
cxn.commit()
cxn.close()
cxn = MySQLdb.connect(db=’test’)
cur = cxn.cursor()
cur.execute(‘CREATE TABLE users(login VARCHAR(8), uid INT)’)
0Lcur.execute(‘INSERT INTO users VALUES(‘john’, 7000)’)
1Lfor data in cur.fetcharall():
print ‘%s\t%s’ % data
john 7000cur.close()
cxn.commit()
cxn.close()
面向对象
利用 class 关键字创建一个类
- class MyNewObjectType(bases): #bases 参数用于继承的父类
‘define MyNewObjectType class’
Class_suite
创建一个实例的语法
- myFirstObject = MyNewObjectType()
添加类方法
- class MyDataWithMethod(object): #定义类
def printFoo(self): #定义方法
print ‘You invoked printFoo()’
类、属性和方法的命名方式
- 类:通常大写字母打头。这是标准惯例。有助于识别类。
- 属性:小写字母打头 + 驼峰,使用名词作为名字。
- 方法:小写字母打头 + 驼峰,使用谓词作为名字。