类型和运算

2018-03-30  本文已影响0人  szn好色仙人

杂记

>>> dir(list)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
>>> help(list.pop)
Help on method_descriptor:

pop(...)
    L.pop([index]) -> item -- remove and return item at index (default last).
    Raises IndexError if list is empty or index is out of range.

>>> type([])
<class 'list'>
>>> isinstance([], list)
True

数字

#八进制、十六进制、二进制、复数
>>> 0o10, 0x0A, 0b1100, (3 + 4j) + complex(1, 2), len(str(2 ** 100))
(8, 10, 12, (4+6j), 31)
#数字与字符串转换
>>> hex(0x12), oct(0o10), bin(10), int('0x12', 16), int('10', 9)
('0x12', '0o10', '0b1010', 18, 9)
操作符 描述 例子 结果
x if y else z 三元选择表达式 1 if True else 2
1 if False else 2
1
2
x or y 逻辑或
x and y 逻辑与
not x 逻辑非
in, not in 成员关系 1 in [1, 2] True
is, is not 对象实体关系测试
(基于内存身份的比较)
/ 除法 1 / 2 0.5
// 除法 向下取整 -5 // 2, 5 // 2, 5.0 // 2 (-3, 2, 2.0)
** 幂运算 2 ** 3 8
(...) 元组,表达式,生成器表达式
{...} 列表,列表解析
[...] 字典、集合、集合和字典解析
x[i:j:k] 分片 [1, 2, 3, 4, 5, 6][1:4:2] [2, 4]
< <= > >= == != |
^ & << >> ~ + - * x[i] x(...) x.attr
与C中表现一致

比较操作可以连续进行:1 < 2 < 0, 1 < 2 < 3 结果:(False, True)

>>> [0 and 'a', 1 and 'b', 2 or 'c', False or 'd', True and 'a' or 1]
[0, 'b', 2, 'd', 'a']
>>> import math
>>> math.log10(100)
2.0
>>> import random
>>> random.random()  #提供0-1之间的任意浮点数
0.5158813464733368
>>> random.randint(1, 10)
9
>>> random.choice([1, 3, '4'])
3
>>> set({1, 'a', 2 - 1})
{'a', 1}
>>> {x ** 2 for x in [1, 2, 3]}
{1, 9, 4}

动态类型

>>> v0 = 1
>>> v1 = v0
>>> v1 = 2
>>> print(v0, ',', v1)
1 , 2
>>> L0 = [1]
>>> L1 = L0
>>> L2 = L0
>>> L1 += ['a']
>>> L2 = 1
>>> print(L0, ',', L1, ',', L2)
[1, 'a'] , [1, 'a'] , 1
>>> import sys
>>> sys.getrefcount(1)
1127

字符串

转义 意义
\newline 表示连续
\other 不成转义时,保留\
其他 类似C的转义

raw可以抑制转义,raw字符串不能以奇数个\结尾

操作 解释 结果
'' 空字符串
's"zn' 双引号和单引号相同 's"zn'
's\0\z\n' 转义 's\x00\\z\n'
r's\0\z\n' Raw字符串 's\\0\\z\\n'
"""..."""
'''...'''
三重引号字符串块
'a' + 'b' 合并 'ab'
'a' * 3 乘法 'aaa'
'abc'[1]
'abc'[-1]
索引 'b'
'c'
len('a') 求长度 1
'abc'.find('bc') 搜索 1
'abc'.replace('ab', 'sz') 替换 'szc'
'abc'.split()
'a b c'.split()
'a,b,c'.split(',')
分隔 ['abc']
['a', 'b', 'c']
['a', 'b', 'c']
'-'.join('abc') 插入分隔符 'a-b-c'
'你好'.encode('utf8')
'你好'.encode('gb2312')
'你好'.encode()
'你好'.encode('utf16')
转码 b'\xe4\xbd\xa0\xe5\xa5\xbd'
b'\xc4\xe3\xba\xc3'
b'\xe4\xbd\xa0\xe5\xa5\xbd'
b'\xff\xfe`O}Y' #0xFFFE是前缀
b'\xe4\xbd\xa0\xe5\xa5\xbd'.decode()
b'\xc4\xe3\xba\xc3'.decode('gb2312')
b'\xff\xfe`O}Y'.decode('utf16')
b'\x60\x4f\x7d\x59'.decode('utf16')
解码 你好
你好
你好
你好
'a'"b"'c' 自动合并 "abc"
>>> s0 = '0123456789'
>>> s0[:]
'0123456789'
>>> s0[::]
'0123456789'
>>> s0[2:5]
'234'
>>> s0[2::2]
'2468'
>>> s0[::2]
'02468'
>>> s0[::-2]
'97531'
>>> s0[3:-2]
'34567'
>>> s0[5:1:-1]
'5432'
函数 说明 例子 结果
chr 将ASCII码转为字符 chr(115) 's'
ord 将字符转为ASCII码 ord('s') 115
int 将字符串转为整数,可指定进制
float 将字符串转为浮点值 float('1.1') 1.1
str 转为字符串 str([12, '3'])
str({1})
str('1')
"[12, '3']"
'{1}'
'1'
repr 转为字符串 repr([12, '3'])
repr({1})
repr('1')
"[12, '3']"
'{1}'
"'1'"
格式化操作符 意义
s 字符串或任意对象
r s, 但使用repr,而不是str
c 字符
d 十进制整数
i 整数
u 无符号整数
o 八进制整数
x, X 十六进制整数
e, E 浮点指数
f, F 浮点十进制
g, G 浮点e E或f F
% 常量%
>>> 'Hello %% %s %s %s szn' % ([1, '2'], 3, {4})
"Hello % [1, '2'] 3 {4} szn"
控制 意义 例子 结果
- 左对齐 '%-05.2f' % 1.234 '1.23 '
+ 正负号 '%+5.2f' % 1.234 '+1.23'
0 补零 '%05.2f' % 1.234 '01.23'
* 表示由用户指定 '%0*.*f' % (5, 2, 1.1) '01.10'

基于字典的字符串格式化:

>>> '%(n)s %(x)s' % {"n" : 1, "x" : 'szn'}
'1 szn'
>>> '{0}, {2}, {1}, {name}'.format('a', 'b', 'c', name = 1)
'a, c, b, 1'
>>> import sys
>>> '{N[0]}, {0.platform}, {1[H]}'.format(sys, {"H" : "W"}, N = [1, 2])
'1, win32, W'

添加格式具体化(稍微举几个例子,书里BBB一大堆,不乐意看)

>>> '{0}, {1:0>10}'.format(0, 's')
'0, 000000000s'
>>> '{0}, {1:0<10}'.format(0, 's')
'0, s000000000'
>>> '{0}, {1:0^10}'.format(0, 's')
'0, 0000s00000'
>>> '{0:b}'.format(10)
'1010'
>>> '{0:X}'.format(10)
'A'
>>> '{0:.2f}'.format(1.234)
'1.23'
>>> '{0:0{1}.{2}f}'.format(1.234, 5, 2)
'01.23'

列表与字典

操作 解释 结果
list('abc') 由可迭代项目生产一个列表 ['a', 'b', 'c']
len([1, 2, 3]) 获取长度 3
[1, 2, 3][:]
[1, 2, 3][1: 3]
切片 [1, 2, 3]
[2, 3]
[1, 2] * 2 乘法 [1, 2, 1, 2]
L[i:j] = [] 切片赋值
[...] 列表解析
>>> L = list('0123456')
>>> del(L[0])
>>> del[L[1:3]]
>>> L
['1', '4', '5', '6']

>>> L = list('0123456')
>>> L[0:3] = list('abc')
>>> L
['a', 'b', 'c', '3', '4', '5', '6']

>>> [x * 2 for x in "123"]
['11', '22', '33']

>>> list(map(abs, [-1, 1]))
[1, 1]
>>> d = {'v' : 1, 'n' : 's'}
>>> len(d)
2
>>> del d['v']
>>> d
{'n': 's'}
>>> {x : x ** 2 for x in [1, 2]}
{1: 1, 2: 4}
>>> dict([('n', 'v'), (1, 2)])
{1: 2, 'n': 'v'}

元组、文件及其他

>>> (10)
10
>>> (10,)
(10,)
>>> tuple("123")
('1', '2', '3')
>>> t = ([],)
>>> t[0].append(1)
>>> t
([1],)
常见文件操作 解释
fp = open(r'D:\1.dat', 'w') open创建文件输入输出,默认打开方式为 r
fp.read 一次性读取文件或读取指定的N个字节到字符串
fp.readline 读取一行到字符串
fp.readlines 读取整个文件到字符串列表
fp.write 写入字符串到文件
fp.writelines 把列表内的所有字符串写入文件
fp.close 关闭文件
fp.flush 刷新
fp.seek 设置文件位置
fp.tell 获取文件位置
for line in open(r'D:\1.dat') : use line 迭代使用文件
open(r'D:\1.dat', encoding = 'utf8') 打开utf8文件
>>> fp = open(r'D:\1.dat', 'wb')
>>> v = [1, [2, {3, 'a'}, {4 : 'b'}], 5]
>>> import pickle
>>> pickle.dump(v, fp)
>>> fp.close()
>>> 
>>> fp = open(r'D:\1.dat', 'rb')
>>> vOut = pickle.load(fp)
>>> vOut
[1, [2, {3, 'a'}, {4: 'b'}], 5]
>>> v = [[0], 1]
>>> v1 = v.copy()
>>> v2 = v[0:1]
>>> v1[0].append('a')
>>> v1[1] = 2
>>> v, v1, v2
([[0, 'a'], 1], [[0, 'a'], 2], [[0, 'a']])

>>> v = [[0], 1]
>>> import copy
>>> v1 = copy.deepcopy(v)
>>> v1[0].append('a')
>>> v, v1
([[0], 1], [[0, 'a'], 1])
上一篇 下一篇

猜你喜欢

热点阅读