Python 学习笔记
面向过程:
以指令为中心,由指令处理数据
如何组织代码解决问题
面向对象:
以数据为中心,所有的处理代码都围绕数据展开I 如何设计数据结构组织数摇,并提供对此类数据所允许处理操作
Python的关键要素
基本数据类型
对象饮用
组合数据类型
逻辑操作符
控制流语句
算术操作符
输入/输出
函数的创建与调用
数据类型:转化
隐式
显示
字典:kv集合
{‘a’:31, ‘b’:78}
dir(), id(), type(), str(), help(), len(), callable()
Python过程式编程:
if __name__ = __main__:
pass
每个模块都有一个名为__name__的内建变量,此变量值会根搭调用此模块的方式发生变化:
如果此文件被作为模块导入,则__name__的值为模块名称
如果此文件被直接执行,则__name__的值为“__main__ ”:
class:自定义类型
type()类型
instance:实例化
类:数据和方法
数据:变量
方法:函数
类:实例化成对象
CA:
IA:
IB:
两个对象比较:
1、值比较:对象中的数据是否相同:
2、身份比较:两个变量名引用的是否为同一对象:
3、类型比较:两个对象的类型是否相同:
核心数据类型:
数字:int, long, float, complex, bool 字符:str, unicode
列表:list
字典:dict
元组:tuple
文件:file
其它类型:集合(set), frozenset,类类型,None
其它文件类工具:pipes, fifos, sockets
类型转换:
str(), repr()或format():将非字符型数据转换为字符:
int():转为整数
float():转为浮点数
list(s):将字串s转为列表;
tuple(s):将字串s转为元组
set(s):将字串s转为集合;
frozenset(s):将字串s转换为不可变集合;
dict(d):创建字典:其d必须是(key, value)的元祖序列;
chr(x):将整数转换为ASCII 字符
ord(x):将字符转换为整数值
hex(x):将整数转换为十六进制字符
bin(x):二进制
oct(x):八进制
数字类型:(不可变类型)
Python的数字字面量:布尔型, 整数, 浮点数, 复数
True:1
False:0
序列类型:
字符类型:
字符串字面量:把文本放入单、双、三引号中:
如果要使用Unicode编码,则在字串之前使用字符‘u’进行标识,如u‘hello,word’
文档字串:模块、类或函数的第一条语句是一个字符的话,该字符串就成为文档字符串,可以使用__doc__属性引用。如printName.__doc__
运算符:
索引运算:[i]
切片运算:[i:j]切片后的结果会生成新的内存对象
扩展切片:[i:j:stride] 步长
支持运算:
索引、切片、min()、max() 、len()等
支持操作:
对象自有的内置方法
列表:
容器类型
可以包含任意对象的有序集合,通过索引(偏移)访问其中的元素。可变对象
支持在原处修改:修改引用,而不是本身对象。
修改指定的索引,修改指定的分片,删除语句,内置方法
l1 + l2:合并两个列表,返回一个新的列表:不会修改原列表
l1 * N: 把l1重复N次,返回一个新列表
in : 成语关系判断字符 用法 obj in container
not in : 成语关系判断字符 用法 obj not in container
列表解析:[ ]
列表复制方式:
l1 = [1,2,3,4]
l2 = l1
import copy
l2 = copy.deepcopy(l1)
l2 = l1[:]
元祖:
表达式符号:()
容器类型
任意对象的有序集合,通过索引访问其中的元素,不可变对象,固定长度
异构,嵌套
常见操作:
()定义空元组
(1,)
(1,2)
t1 + t2
t1 * N
in , not in
虽然元组本身不可变,但是如果元组内嵌套了可变类型的元素,那么此类元素的修改不会返回新元组:
字典:dict
字典在其他编程语言中又称作关联数组或散列表:
通过键实现元素存取,无序结合,可变类型容器,长度可变,异构,嵌套
{key1 : value1, key2 : value2}
{} 空字典
{‘x’ : 32, ‘y’ : [1,2,3]}
字典复制:d2 = d1.copy()
d1.iteritems: 返回一个迭代器对象
如何获取使用帮助:
获取对象支持使用的属性和方法:dir()
获取某方法的具体使用帮助:help(list.pop)
获取可调用对象的文档字串:print obj.__doc__
集合:无序排列可哈希的值:
支持集合关系测试
成员关系测试:
in
not in
迭代
不支持:索引,元素获取,切片
集合的类型:set()可变,frozenset()不可变
没有特定语法格式,只能通过工厂函数创建
容器、类型、对象
1、容器可以不用使用换行符就可以跨行的,允许最后一个字符使用‘’,‘’
2、所有对象都有引用计数, 更换新变量名称或放入容器中,都会导致引用计数增加。import sys sys.getfcount(obj)
3、列表和字典都支持两种类型的肤质操作:浅复制、深复制。深复制可使用copy模块中的deepcopy()实现。
4、python中的所有对象都是‘第一类’,这意味着使用标识符命名的所有对象都具有相同状态,于是,能够命名所有对象都可以直接当数据进行处理
5、所有序列都支持迭代
6、所有序列都支持的操作和方法:
s[i]
s[i:j]
s[i:j:stride]
len(s)
min(s)
max(s)
sum(s)
all(s) 所有都为Trues
any(s) 任意为Trues
s1 + s2 链接
s1 * N 重复N次
obj in s1: 成员关系判断
obj not in si:
7、可变序列的操作:
s1[index] = value : 元素赋值
s1[i:j] = t :切片赋值
del s1[index]
del s1[i:j]
del s1[I:j:strde]
Python表达式和语句
表达式: 1+2
语句:
Python中常用的表达式操作符:
x + y , x - y ,
x * y ,x / y , x // y, x % y
逻辑运算:
x or y , x and y , not x
成员关系运算:
x in y , x not in y
对象实例测试:
x is y , x not is y
比较运算:
x < y , x > y , x <= y , x >= y, x == y, x != y
位运算:
x | y , x & y , x ^ y , x << y , x >> y
一元运算:
-x , +x , ~x
幂运算:
x ** y
索引和分片:
x[I] , x[i:j] , x[I:j:strde]
调用:
x(…)
取属性:
x.attribute
元组(…)
序列[…]
字典{...}
三元选择表达式: x if y else z
匿名函数:lambda args : expression
生成器函数发送协议: yield x
元算优先级:
(…) , […] , {…}
s[i] , s[I:j]
s.attribute
s(…)
+x
x ** y
* , / , // , %
+ , -
<< , >>
&
^
|
< , <= , > , >= , == , !=
is , not is
in , not in
not
and
or
lambda
语句:
赋值语句
调用语句
if/elif/else: 条件判断
for/ else: 序列迭代
while/else :普通循环
pass:占位符
break
continue
def
return
yield
global:命名空间
raise:手动出发异常
import
from:模块属性访问
class:类
try/except/finally:捕捉异常
del:删除饮用
assert:调试检查
with/as :环境管理器
赋值语句:
隐形赋值: import , from , def, class , for ,函数参数
元组和列表分解赋值:当赋值符号(=)的左侧为元组或列表时,Python会按照位置把右边的对象和左边的目标自左而右逐一进行配对:个数不同时会出发异常,此时可以切片的方式进行
例:
l1 = (‘a’ , ‘b’ , ‘c’ )
x,y,z = l1
print(x)
‘a’
多重目标赋值:
num1 = num2 = num3 = 44
增强赋值: += , -= , *= ,/= , //= ,&=,
Python中的真假:
1、任何非0数字和非空对象都为真:
2、数字0、空对象和特殊对象None均为假:
3、比较和相等测试会递归地应用于数据结构中:
4、返回值为True或False;
组合条件测试:
X and Y:与运算
X or Y:或运算
not X:非运算
A = X if Y else Z
if Y:
A = X
else:
A = Z
expression1 if boolean_expression else expression2
(三元表达式)
while:
while bool_expression:
while_suite
else:
else_suite
break:跳出最内层循环
continue:跳到所处的最近层循环的开始处
pass:占位语句
else:代码块:循环正常终止才会执行:如果循环终止是由break跳出导致的,则else不会执行
列表解析:根据已有列表,高效生成新列表的方式
Var = [expression for iter_var in iterable]
l2 = [I ** 2 for I in l1]
Var = [expression for iter_var in iterable if cond_expr]
l3 = [I ** 2 for in l1 if i >= 3]
矩阵生成:
l1 = ['x','y','z']
l2 = [1,2,3]
l3 = [(i,j)for i in l1 for j in l2]
l3
[('x', 1), ('x', 2), ('x', 3), ('y', 1), ('y', 2), ('y', 3), ('z', 1), ('z', 2), ('z', 3)]