定义字典:
d = {}
d = dict()
d = {"a":1, "b":2}html
d['a'] d.get('a') >这两个的区别,用get在key不存在的时候不会抛出Error; d.get('a', 'information') //设置当key不存在的时候返回的内容;
d['a'] = 3 //修改和增长元素的方法都是这个
d.pop('c') //删除的同时返回删除的内容 >若是删除不存在的key会报KeyError,这个时候就须要给定返回值 d.pop('c', 'information') help(d.pop) >这样返回的就是information,不会报KeyError错误; d.popitem() //从字典中随机删除一个; 利用关键字del 删除,del 能够删除一个变量 同时也能够用来删除字典: del d['a']
>[生成一个生成器,能够进行迭代操做][字典是无序的,因此返回的迭代对象也是无序的] d.items() 生成器中是一个元组的列表 d.values() d.keys() for i in d.keys() d = {} d['root'] = 'root' d['root']['left'] = 'left' d['root']['right'] = 'right' d //生成一个二叉树
列表解析是Python重要的语法糖python
列表解析的速度比for in 迭代 快正则表达式
ret = [expression for item in iterator] ret = [expression for item in iterator if iterator >=1 and iterator != 7 ] ret = [expression for x in X for y in Y] //返回的是一个笛卡尔积,至关于两个嵌套的for循环 等价于 ret = [] for item in iterator: ret.append(expression) 例子1: lst = list(range(10)) [x + 1 for x in lst] import timeit def fn1(): timeit.timeit(fn1()) //查看函数执行须要的时间 例子2: 带条件的列表解析: lst = list(range(10)) [x + 1 for x in lst if x % 2 == 0] //输出奇数 [x + 1 for x in lst if x % 2 == 0 and x > 2 ] //两个条件 例子3: l1 = [1, 3, 5, 7, 9] l2 = [0, 2, 4, 6, 8] [(x,y) for x in l1 for y in l2] [(1, 0-8) //每一个l1的值 x 都会循环一遍l2 (3,0-8 ) (5, 0-8) ]
**集合解析中获得的元素只能有一个** ret = {expression for item in iterator} 例子1: s = [1, 3, 5, 5] {x + 1 for x in s} {2, 4, 6}
ret = {exprK:exprV for item in iterator} 例子1: d = {'a':1, 'b':2} {k, v for k, v in d.items()} 例子2: {k:v for k, v in [('a',1), ('b', 2)]} {'a':1, 'b':2}
python2 和python3最大的差异就是在于字符串
python2中字符串是byte的有序序列
python3中字符串是unicode的有序序列
字符串是不可变的
字符串支持下标和切片shell
t = 'asdfzxv' //前面是闭区间,从0开始,后面是开区间 t[1] t[-1] t[0:] t[:] t[1:-1]
'i love %s' % ('python',) 'i love %(name)s' % {'name':'python'} 'i love %(name)s %(name)s' % {'name':'python'} //当有多个重复使用的值,可使用字典的方式 'i love %s ,%s' % ('python', 'python') //进行多个不一样数值的格式化 FLAG flag |说明 |实例 输出: n n表示一个数字 '%3s' % ('a', ) ' a' //在a前面会有两个空格 0 使用0填充,仅适用与数字 '%03d' % (1, ) '001' . 是有那个空格填充,默认行为 '%.3d' % (1, ) ' 1' //在1前面以空格填充
右边使用空格填充 '%-3d' % (1, ) '1 ' //在1后面以两个空格填充express
填充以前加'+' 仅对于正数 '%+03d' % (1, ) '+01' //在1前面填充0,增长正数标记符json
CONVERSION
符号 说明api
整数bash
整数app
八进制整数socket
小写十六进制整数
X 大写十六进制整数
浮点数
F 浮点数
小写科学计数法
E 大写科学计数法
整数, 已废弃
同f,若是指数小于-4,同e
G 同f,若是指数小于-4,同E
字符,接收unicode编码或单字符字符串
字符串,使用ascii函数转换
字符串,使用repr函数转换
字符串,使用str函数转换
例子1: '%d' % 3.4 > 3
https://docs.python.org/3.4/library/stdtypes.html?highlight=format#str.format
template format(args, *kwargs) (1) (2) (3) (4)1.template 使用 {} 标示变量 2.{}或{\d+} 使用 *args 按顺序填充 3.{key} 使用 **kwargs 按 key 填充 4.Format String Syntax 例子1: '{0}, {name}'.format('hello',name='world')
字符串链接join
字符串分割split, rsplit, splitlines, partition, rpartition
字符串修改-大小写 capitalize, title, lower, upper, swapcase
字符串修改-填充清除 center, ljust, rjust, zfill, strip, rstrip,lstrip
字符串判断 startswith, endswith,is*
字符串查找替换 count, find, rfind, index, rindex, replace
lst = ['i', 'like', 'python'] ' '.join(lst) '_'.join(lst) ret = '' for i in lst: ret += i ret += ' ' ret
内置函数split是不支持正则表达式的,须要先import re模块; help(str.split) S.split(sep=None, maxsplit=-1) 例子1: s='i like python' s.split() ['i', 'like', 'python'] 例子2: s.split('o') //指定的分割符不会被保留; >['i like pyth', 'n'] 例子3: s.split(' ', 1) //后面的数表示分割几回,默认是最大分割, -1表示从后开始分割 ssplit(' ', -1) 这里可使用UNPACKING: s = 'root:x:0:0:root:/root:/bin/bash' username,_ = s.plit(':', 1) username > 'root' 例子4: s = 'root\n:x:0\n:0\n:root:/root:/bin/bash' //按照换行符分割 s = ''' //像这样须要多行的且须要按行分割的就须要用到splitlines 11111111 //这里总共是4行,按照换行符算,第一行也有换行符 22222222 33333333 ''' s.splitlines() > ['root', ':x:0', ':0', ':root:/root:/bin/bash'] s.splitlines(True) //填写True将会保留换行符,默认False
s = 'root\n:x:0\n:0\n:root:/root:/bin/bash' s.partition(':') //partition会按照顺序 将分隔符单独分割成一个元素, >('root', ':', 'x:0:0:root:/root:/bin/bash')
capilize : 第一个字母变大写,其余字母变小写 title: 每一个单词的首字母大写,其余字母变小写 lower: 将全部字母变小写 upper: 将全部字母变大写
swapcase: 将大小写对换;
center: 先后填充
s.center(20) //默认用空格进行先后填充,填充满20个字符 s.center(20,'#') //以'#'进行先后填充. ljust: 填充向左边 s.ljust(20,'#') #号将会填充在原来字符串的右边,由于是向左填充 rjust: 填充向右边 与ljust方向相反; zfill: zfill() 方法返回指定长度的字符串,原字符串右对齐,前面填充0 str.zfill(width) strip: 删除头尾匹配符,默认删除换行符和空格,tab键 rstrip: 删除结尾匹配符 lstrip: 删除开头匹配符 f = open('/etc/passwd', 'r') f.readline() //返回的一行带有换行符 f.readline().strip() //这样将不会带上换行符
for line in f.readlines(): line = line.strip() if line.startwith('root:'): _, shell = line.rsplit(":",1) print(shell)
f = 'sdfsdfsdfsadfsdf' f.count('r') //统计有多少个r,若是是多个字符就是多个字符进行匹配统计 f.find('fs') //从左开始查找第一次匹配到的位置; 找不到会返回 -1 f.find('fs', 2, 4) //设置 [开始] [结束] 位置 f.index('fs') //从左开始查找第一次匹配到的位置;找不到会返回ValueError f.replace('fs','pp') //替换 将fs替换成pp f.replace('fs','pp', 2) //从左向右进行替换,替换两个;
Python3中严格区分了文本和二进制数据
Python2并无严格区分
文本数据使用str类型,底层实现是unicode
二进制数据使用bytes类型,底层是byte
str使用encode方法转化为bytes
bytes方法使用decode方法转化成str
因为清晰的区分文本和二进制,Python3解决了大多数python2的编码问题
python3 中json的应用:
import json json.loads('{"name":"comyn"}') socket中的发送信息;须要将str转换成bytes才能发送; s.send('{"name":"comyn"}'.encode())