2018-2019
os.system("echo "+i+" >> file")
可以将Python处理的结果i写到file里,对于需要大量输出的结果而言是非常节省内存的做法
但是很重要的点在于i中不能有'\n'
flush()
好功能,一边算一边写到文件里,随时省内存
try:异常处理手段,主要使用方式为
try:
function
except(Errors):
function
2019.1.21
字典中的.get(),一种优雅地判断字典中是否有此字符的方法
dict.get(i,0) ###如果 dict 中有i这个key,则将返回value;没有i这个key,那么将返回0
from collections import defaultdict #defaultdict,无需遍历,直接添加
defaultdict(int) # 直接生成int且为0
defaultdict(list) # 直接生成list且为空集
其它例子:
dd_list = defaultdict(list) # list()生成一个空列表
dd_list[2].append(1) # 现在dd_list包含{2:[1]}
dd_dict = defaultdict(dict) # dict()产生一个新字典
dd_dict["Joel"]["City"] = "Seattle" # { "Joel" : { "City" : Seattle"}}
dd_pair = defaultdict(lambda: [0, 0])
dd_pair[2][1] = 1 # 现在dd_pair包含{2: [0,1]}
#其它 collections module的使用:Counter (了解)
2019.1.24
Counter:
from collections import Counter
p=Counter([1,3,3,3,4,5,1])
p #Counter({1: 2, 3: 3, 4: 1, 5: 1}),相当于统计词数
p.most_common(3) # 给出前三高的键值对;此外还有其它和字典一样的特性
set() #集合,使用{}
c={1,3,3,4} #出来的是{1,3,4},再次出现的重复的元素会被去掉
c.add(10) #加入元素方式为 .add(),重复元素无法加入
parity = "even" if x % 2 == 0 else "odd" # if的一种简便用法
#空值处理
t='abc'
s = t and t[0] and t[1] # s此时为t[1],如果全是and,以最后的顺序为准
s= t[1] or f[1] #若or后面的只是备选,“=”后面和and则是必须选项
any([1,2,{}]) #只要有非空值非零值("假"值)就为TRUE
all([1,2,{}]) #必须全部为“真”值
2019.1.26
[(x,y) for x in range(10) for y in range(10)] #生成[ (0,0), (1,0), (2,0) ... ]之前没见过的生成的模式
2019.1.29
#range()会生成很占用内存的数组,利用yield生成节省内存的迭代器
def lazy_range(n):
i=0
while i < n:
yield(i)
i+=1 #for i in lazy_range等效于for i in range
2019.1.31
#面向对象编程
class test1:
def cd(self): #建议封装版,self是必填项
print "p"
def cc(self,ko):
print "cc"+ko
a=test1()
a.cd() #打印
a.cc() #打印得到
# class的核心在于封装,下方是稍微复杂一点的例子
class test2:
def __init__(self,t1,t2):
self.cc=t1
self.cd=t2 #封装
b=test2("t1","t2") #class录入
b.cc #输出t1
b.cd #输出t2,以后会有更复杂的用法
#枚举,python式1
for i in range(len(list)):
function(i,list[i])
#枚举,python式2,重点是enumerate的用法
for i,lis in enumerate(list):
function(i,lis)
#zip的逆用法
zip(*[('a', 1), ('b', 2), ('c', 3)]) #输出是[('a','b','c'),('1','2','3')]
2019.2.18
# *具有输入子程序时的拆分作用
def c(a,b):return a*b
c(*[2,3]) #和c(2,3)一样会返回6
#子程序套子程序
def ca(f):
def bu(x):
return f(x)*2
return bu #持续返回很重要!
def cb(x):return x+2
cx=ca(cb)
cx(1) #会输出(1+2)*2=6
#对于多参数则需要*args和**kwargs,方式很简单
def ca(f):
def bu(*args,**kwargs):
return f(*args,**kwargs)
return bu
def cc(x,y):return x+y
bcc=ca(cc)
bcc(1,5) # *args和**kwargs可以随意传递参数和字典,只要能最后对的上执行方程式即可
2019.2.24
#paritial功能快速套用定好参数的方程
from functools import partial
def add(a,b):
return a+b
le=partial(add,b=2) #可以指定确定一个参数
le(2) #返回4,但这种用法仅限于第一个参数,如果是第二个参数及往后,输入的变量必须是如b=2的参数