python数据类型
整数
可以处理任意大小的正负整数
用16进制表示整数 加0x 前缀
浮点数
就是小数,对于很大的浮点数要用科学计数法表示 10用e替代1.23*10^6 等于 1.23e6
长整型
在整数最后是大写或小写L
复数
复数由实部和虚部构成 a+bj 或 complex(a,b)
字符串
用‘’或“”括起来的
Boolean
只有True 或False
可以用and or not进行运算
空值
None
Collections模块
Counter ------计数器,用于统计元素数量
OrderDict ----有序字典
defaultdict-----值带有默认类型的字典
namedtuple------可以命名的元组,通过名字访问元素
deque------双向队列,两头都可以放,也可以取
print语句
>>>是python解释器的提示符
当要跟多个字符串输出时“,”用逗号隔开就行
对于计算整数时 可以直接在 print 语句中进行 + - * /
注释用#开头
变量
变量名必须是大小写英文、数字、下划线 且 开头不能用数字
=这是赋值语句 同一个变量可以反复赋值 可以是不同类型
定义字符串
字符串本身包含‘ 时 我们用“ ”括起来 反之用另一个
如果 这两个都有 我们可以用‘\’转义符 不计入字符串内容
raw字符串和多行字符串
可以再字符串前面加 r 就不用转义了
表示多行字符串 '''...'''
Unicode字符串
字符串中有中文在字符串开头加 u
整数和浮点数
整数的结果时精确的 浮点数的值是近似值
Boolean类型
它把 0、空字符串''、None 看成False 其余True
在涉及 and or 计算时 存在:短路原则
创建List
有序集合 用中括号[ ]
按索引访问list 索引从0开始 注意不要越界
倒序访问list 倒数第一 -1
添加新元素 append() 方法 追加到list末尾
插入insert()接受两个参数 第一个索引号 第二个是待加元素
删除元素pop()方法 总是删掉最后一个元素 pop(2)删除指定索引的元素
替换元素 在指定索引赋值 替换掉原来的(也可以删除再加)
创建tuple
用小括号() 访问元素 写要访问的元素索引t(1)
创建 0个元素直接t=() 一个元素的t=(1,) 为了防止歧义 加','逗号
可变的tuple 在元素中加list对象 因为list是可变的
if语句
要注意python代码的缩进规则 并且 要用':'表示代码块开始
if-else if 为True 执行 否则else
if-elif-else 多层判断 原理一样
for循环
写法 for a in L:
while循环
先判断在执行循环体 必须要有退出条件
break退出循环
continue继续循环 跳过后续 继续下一次
多重循环 嵌套使用
dict
用大括号{} 按照key:value形式 len()函数可以计算集合大小
访问dict
d[key] 查找value 不同于list用索引返回元素
用之前要 进行if判断 也可以d.get('Adam') 自身提供的get() 在key不存在时 返回None
dict查找速度快 无论多少元素查找速度一样 但是缺点是占 内存 比较浪费资源 list正好相反
dict中key不能重复 存储的key -value对 没有顺序 并且key是不可变的
更新dict
d['adam'] =60
遍历dict 直接用for循环
set 和list比较像 但是set 元素 没有重复 而且是无序的
访问set 就是判断这个元素在不在set里
set特点 对象不可变
遍历set for循环 但是输出结果的顺序可能不同
更新set 要么添加 要么删除
如果添加的元素已经存在 不会加进去
删除用remove() 但是要判断元素是否存在 否则会报错
函数 --抽象出来的运算
调用函数---要知道函数名称和参数 绝对值函数abs()、比较函数cmp(x,y) x<y -1 x=y 0 x>y 1 int()转换成整数 str()转换成字符串
编写函数 def语句 依次函数名--括号---括号中参数和冒号 然后在缩进块中编写函数体 return返回
返回多值
#math 提供和sin() cos() 要用import引用
import math
def move(x, y, step, angle):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny
递归函数 阶乘fact(n)
使用递归函数要注意防止栈溢出、
定义默认参数 int() 可传入两个参数
函数的默认参数作用是简化调用 用传入的额外参数覆盖默认参值
默认参数只能定义在必需参数的后面
定义可变参数
def fn(*args) 参数名字前加*
*args用作传递非命名键值可变长参数列表(位置参数)
**kwargs用作传递键值可变长参数列表
对list进行切片
L[:] 默认从索引0开始 到末尾
L[::2]会每两个元素 取一个
倒序切片
L[-1] 倒数第一个
L[-10::2] 从倒数第一个 每隔2个取一个
字符串切片 upper()方法 把字符变成大写字母
迭代
for循环不仅可以用在list 或tuple 还可以用在其他任何迭代对象上
索引迭代 ---enumerate() 可以拿到索引
zip()函数可以把两个list 变成一个
range()函数 范围值
dict的value 可以通过values() 转换成list 等到 和itervalues()方法得到 会比values()省去生成list的内存
迭代dict的key和value -----用items()方法返回的值
iteritems()不会吧dict转成list 不占用额外内存
生成列表
[x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
range(1,100,2) 隔2个输出
复杂表达式---join()方法可以把list拼成一个字符串
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
def generate_tr(name, score):
if score < 60:
return '<tr><td>%s</td><td style="color:red">%s </td></tr>' % (name, score)
return '<tr><td>%s</td><td>%s</td></tr>' % (name,score)
tds = [generate_tr(name,score) for name, score in d.iteritems()]
print '<table border="1">'
print '<tr><th>Name</th><th>Score</th><tr>'
print '\n'.join(tds)
print '</table>'
条件过滤
for循环后面还可以加if判断
[x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]
多层表达式
print [a*100+b*10+c for a in range(1,10) for b in range(0,10) for c in range(0,10) if a==c]
python内置函数
divmod() ----得到商和余数
python面向对象
self---类的对象,必须是第一个参数
'.' 来访问属性
python对象销毁----垃圾回收
issubclass() - 布尔函数判断一个类是另一个类的子类或者子孙类,语法:issubclass(sub,sup)
isinstance(obj, Class) 布尔函数如果obj是Class类的实例对象或者是一个Class子类的实例对象则返回true。
Python不允许实例化的类访问私有数据,但你可以使用 object._className__attrName( 对象名._类名__私有属性名 )访问属性
python 多线程
- run(): 用以表示线程活动的方法。
- start():启动线程活动。
- join([time]): 等待至线程中止。这阻塞调用线程直至线程的join() 方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生。
- isAlive(): 返回线程是否活动的。
- getName(): 返回线程名。
- setName(): 设置线程名。
注意: 其中的高级特性没有怎么总结,那一块单独处理。