软件设计 2017-05-03
字面常亮是指单独出现的数字、字符串等,占用解释器里的一块内存地址,通常不会单独出现。
[blockquote]
如果想指定一些不被特殊处理的字符串,例如正则表达式,转义序列等,就需要通过在字符串前面附加r
或者r
来指定自然字符串
[/blockquote]
变量是指解释器中一段内存的名称,python 中变量都是引用, 引用对象存储在 堆空间 中。
Python强类型的(动态)语言。强类型是指明确对象类型的语言,动态是指变量可重新复制为别的数据类型。 数据类型是用来约束数据的。数据类型分为原始类型和复合类型,原始类型是指 int
、float
、byte
等基础类型,复合类型是指由其他原始类型组合起来的类型.例如list
、dict
等。
+ - * / % ** //
(取整除)
&
按位与
|
按位或
^
按位异或
~
按位取反 ~x = -(x+1)
正数的补码和反码都是其本身,但是前面加上正数的符号位"0" 负数的符号位是"1" 负数的补码是:符号位不变,其余各位求反,末位加1 负数的反码是:符号位不变,其余各位求反 二进制数在内存中是以补码的形式存放的 60的按位取反计算: 计算60的 **补码** 和 **反码** 原码 补码 反码 十进制 60 二进制 111100 0111100 0111100 取反-->`取反操作是对补码进行取反` 取反后 补码 1000011 原码 1111101
与 运算--> 11才为1
或 运算--> 00才为0
异或 运算--> 相同为0,不同为1
<<
左移变大
>>
右移变小
= =! < > >= <=
and or not
短路功能
类似shell中得 -- && -- || --
= 赋值
in 成员运算符
not in
is 身份运算符
is not
is None
常用来判断是不是空,未赋值。
== 等值判断和 is 身份判断是有区别的
a=[1,2,3] b=[1,2,3] id(a)4563826248 id(b)4563487752 a==b True aisb False
表达式是指常量、变量和赋值运算符之外的运算符的组合,表达式是可以求值的。
a if a > 0 else 0
优先级
一元运算符高于二元运算符
一元指一个变量或常量 包括 not
二元指两个变量或常量 + -
数值运算高于逻辑运算
算术运算高于位运算
乘除高于加减
括号中的总是作为一个整体参与外部运算,拿不准运算顺序的时候,最好让优先级高的加上括号。
对于绝大多数语言来说只有三种结构:顺序、分支和循环。
按照书写顺序从上到下依次执行。
if 语句:以:
开始一个块,使用缩进标示块。
[blockquote]
在Python中 None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()都相当于False
[/blockquote]
if CONDITION: suite1 elif CONDITION: suite2 else: suite3
条件循环 while,遍历循环 for,python中不建议使用迭代循环。
迭代循环体不要修改迭代器,会造成死循环等不可控错误。
break 语句可以跳出当前循环体
continue 语句可以跳过循环体内后续语句直接开始下次循环
for i in range(10): print(i) if i<5: break else: print("OK")
else 执行条件循环体完整循环,没有经过break跳出。
最常见的线性数据结构,一系列元素的有序组合,可变,不可hash。
定义列表
list=[] list=list() list=[1,2,3]
操作方法
增加 l.append(a) 扩展 l.extend([6,7,8]) 插入 l.insert(index,item) 删除第一个遇到的 l.remove(item) 抛出索引位置项 l.pop(index) 清空列表 l.clear() 反转列表 l.reverse() 排列列表 l.sort()实现的不太好 排序并反转 l.sort(reverse=True) item个数 l.count(item) 查找索引 l.index(item,[index]) 深拷贝-->生成一个新的对象而不是源对象的引用(id不同) l.copy()
下标操作和切片
list[x] list[x] = Var list[b:e] list[b:e:s]-->开始:结束:步长 list[:] list[::-1]反转并生成一个新的列表
tuple和list大多数地方类似,tuple是不可变结构,因此可hash。
定义元组
t=()空元组 t=tuple(list[])
PACKING 和 UNPACKING 解包和封包
x, y = [1,2] 可以列表 x, y = (1,2) 可以元组 x, *y = (1,2,3,4) x, *_,y = (1,2,3,4) x, (y,z) = (1,(2,3)) x,y=y,x 交换
集合的含义和数学上集合的含义相同,集合不是线性结构,集合中得元素是唯一的,集合元素是可hash的。
初始化
s = set() s = {1,2,3} 不能为空,空值默认为字典
操作方法
s.add(item)增加元素 s.remove(item)删除元素 s.discard(item)删除元素不报错 s1.union(s2)并集 s1.intersection(s2)交集 s1.difference(s2)差集 s1.symmetric_difference(s2)只属于s1+只属于s2的元素 s1.issuperset(s2)s1是否s2的超集 s2.issubset(s1)s2是否s1的子集 s1.isdisjoint(s2)s1是否与s2不相交
初始化
d={} d=dict() d={key1:'var1',key2:'var2'}
查询赋值
d[key1] d[key1] = var3 d.keys()返回键作为列表元素 d.values()返回值作为列表元素 d.items()返回键值对作为列表元素 d.pop(key,[var])返回对应值不存在键则返回var值 d.popitem()随机返回一个键值对构成一个元组