一.python基础:
-
数据类型:
原始类型:int float byte复合类型:由其他原始类型组合起来的类型list dict cuple
运算符和表达式:
算术运算符:加 / 减 / 乘 / 除 / 取模 / 幂 / 地板除&#43; - * / % ** //python2 的 除:10 / float(20)位运算符[二进制之间的运算]:bin(60) 转换成二进制数int(&#39;1100&#39;,2) 将二进制转换成十进制& 按位与 都为1 才为1 | 按位或 存在1 即为1^ 按位异或 相同的为0,不同的为1~ 按位取反 正数的补码&#xff0c;反码都是其本身负数的补码是:符号位不变,其余各位求反,末位加1 &#xff0c;既11111反码是:符号位为1,其余各位求反,但末位不加1 &#xff0c;既11110假设有一个数~9&#xff0c;计算步骤如下&#xff0c;9&#61;1001其补码为01001&#xff0c;对其取反10110&#xff0c;这个数是在内存中存放的&#xff0c;现在需要装换成原码&#xff0c;既先减1&#xff0c;然后取反得 11010&#xff0c;符号位为1是负数&#xff0c;既-10<<左移>> 右移
按位取反:
---正数的补码和反码都是其本身,但是前面要加上正数的符号位 "0"---负数的符号位是"1"负数的补码是:符号位不变,其余各位求反,末位加1负数的反码是:符号位不变,其余各位求反---二进制数在内存中是以补码的形式存放的---
60的按位取反计算:第一步:计算60的 [补码] 和 [反码]:原码 补码 反码十进制 60二进制 111100 0111100 0111100第二步:取反[取反操作是对补码进行取反]:补码1000011反码补码 - 11000010原码11111011 代表是负数111101 转换成十进制为61-61
-
比较运算符[返回布尔类型]:
&#61;&#61; 等于!&#61; 不等于> 大于<小于
逻辑运算符:
-
and 与 同时True才为Trueor 或 只要存在True 则为Truenot 非 取反逻辑运算的短路功能:前面False后面就不会再计算:1&#43;2 >4 and (2&#43;2) &#61;&#61; 4前面是True就不会再计算后面:1&#43;2 <4 or (2&#43;2) &#61;&#61; 3
---
def add(x, y):print("%d &#43; %d" %(x, y))return x&#43;yadd(1, 2) > 4 and add(2, 3) &#61;&#61; 5...: 1 &#43; 2Out[2]: False
---
def add(x, y):print("%d &#43; %d" % (x, y))return x&#43;yadd(1, 2) <4 and add(2,3) <6...: 1 &#43; 22 &#43; 3True
---
def add(x, y):print("%d &#43; %d" % (x, y))return x&#43;yadd(1, 2) <4 and add(2,3) <4...: 1 &#43; 22 &#43; 3False
其他运算符:
&#61; 赋值运算符in 成员运算符not in 成员运算符is 身份运算符, 比较两个元素的id; 列表不能用is 做比较is not 身份运算符is 使用的环境经常拿来判断是不是None;
表达式与优先级:
1. 一元高于二元2. 数值高于逻辑3. 算术运算高于位运算4. 乘除高于加减5. 拿不准时加括号
程序结构:
1. 顺序结构2. 分支结构3. 循环结构关于 SWITCHPython中并没有switch结构,因为&#39;switch&#39;结构完全可以由&#39;if elif else&#39;语句来实现switch实现方法:粗糙版:#coding:utf8 #add minus divide using python from __future__ import division x&#61;1 y&#61;2 operator&#61;&#39;/&#39; result&#61;{ "&#43;":x&#43;y, "-":x-y, "*":x*y, "/":x/y } print(result.get(operator)) 改进版:#!/usr/bin/env python# -*- encoding:utf-8 -*-class calculate:def __init__(self, x, op, y):self.x &#61; xself.op &#61; opself.y &#61; ydef count(self):result&#61;{"&#43;":self.x&#43;self.y,"-":self.x-self.y,"*":self.x*self.y,"/":self.x/self.y}print(result.get(self.op))mark &#61; calculate(10,"&#43;",2)mark.count()
python的三元运算
a &#61; 4b &#61; a if a > 0 else 0
RANGE函数
range(x) [0,x)range(m, n) [m, n)range(m, n, s) [m,n),步长为s
break 子句
* 只能出现在循环结构中* 用于跳出当前循环结构
continue子句:
* 只能出现在循环结构中* 用于跳过此次迭代的剩余操作
else子句:
循环结构的else子句是python特有的,用于表示一个循环不是经过&#39;break&#39;跳出循环,提前结束循环,而是正常退出的,才会执行else中的语句;
二.内置容器:
列表
* list是最常用的线性数据结构* list是一系列元素的有序组合* list是可变的列表的操作:定义列表:li &#61; []li &#61; list()li &#61; [1, 2, 3]查看帮助文档:help(list)增:append, extend, insert删:clear, pop, remove改:reverse, sort查:count, index其他:copy增:li &#61; []append:只能一个一个增加li.append(3)extend:扩展li.extend([5,6,7])li[3, 5, 6, 7]insert:位置之前插入li.insert(0, 0) 在第一个之前插入0删:clear:清空列表li.clear()remove:从左开始删除指定元素一个,如果删除的元素不存在会报错ValueErrorli.remove(3) 删除元素3pop:删除指定位置元素:如果不存在会报错IndexErrorli.pop() 删除最后一个元素li.pop(3) 删除key是3的元素改:reverse:颠倒列表顺序:sort:从小到大排序: 仅用于简单数字排序sort(reverse&#61;True) 从大到小排序:查:count:显示匹配元素个数li.count(3)其他:index(3):返回指定元素在列表中的位置;如果不存在会报ValueError:index(value, [start, [stop]]) copy: 深拷贝,会生成一个新的list赋值是浅拷贝,浅拷贝的数据修改会对原来的list产生影响;下标操作:li[1]li[1] &#61; 10切片:li[3:5]: 前面是闭区间 后面是开区间li[3:]li[:] 效果和copy是一样的,效率会比copy快;li[:4] li[4:-2] 切到倒数第二个;后面是开区间li[-4:-1]li[2:6:2]: start, stop ,步长li[6:2:-1] start,stop ,反向显示,步长为1li[6:2:-2] start,stop,反向显示,步长为2li[::-1]li[::2]
元组[tuple]:
tuple和list大多数地方类似tuple是不可变结构tuple只能获取值定义一个元组:t &#61; ()t &#61; tuple()count:统计元素个数index:返回指定元素在元组中的位置下标操作[通过下标获取value]:t[1]* PACKING & UNPACKINGPACKING :把多个变量的值变成一个元组或者列表,默认是变成元组UNPACKING :也可以把一个元组或者列表赋值给多个变量---x, *y &#61; (1, 2, 3, 4)print(x)1print(y)[2, 3, 4]---*x, y &#61; (1, 2, 3, 4)print(x)[1, 2, 3]print(y)4---*_ 这个表示赋值给一个不能用的变量:x, *_, y &#61; (1, 2, 3, 4)print(x)1print(y)4---x, (y, z) &#61; (1, (2, 3))print(x)1print(y)2print(z)3---
集合:
集合的含义和数学上集合的含义相同集合不是线性结构* 集合元素是唯一的集合元素是可hash的集合的操作:初始化:s &#61; set()s &#61; set([1, 2, 3])增:s.add(3) //添加一个元素s.update([3, 4, 5, 6]) //集合添加list中的多个元素删:remove: 删除,删除不存在的元素会抛出异常;discard: 删除,删除不存在的元素不会抛出异常;clear: 清空pop: 随机删除集合中的一个元素集合运算:union 并集 a | bintersection 交集 a & bdifference 差集,不可交换的 a - bsymmetric_difference 集合之差的并集 a ^ b集合判断[返回布尔值]:issubset 子集issuperset 超集isdisjoint
字典:
* 字典是一种无序集合* 字典是一种KV结构* value可以是任何对象* key是唯一的* key必须是可hash对象字典的操作:d &#61; dict()d &#61; {&#39;a&#39;:5, &#39;b&#39;:4}d[&#39;a&#39;]d.keys()dict_keys([&#39;b&#39;, &#39;a&#39;])遍历 key:for key in d.keys():print(d[key])遍历 value:for value in d.values():print(value)遍历key和value:for key,value in d.iterms():print(key, value)print(&#39;%s &#61;> %s&#39; %(key, value))d.iterkeys() 返回的是一个生成器;pop,popitem 用于删除元素d.pop(&#39;key&#39;) 需要指定key,删除不存在的值返回KeyErrord.pop(&#39;key&#39;,6) 删除不存在的值将返回 6增加字典元素:d[&#39;c&#39;] &#61; 7