软件设计 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()随机返回一个键值对构成一个元组