python 进阶笔记

这篇博客记录了Python的一些高级用法,包括利用os.system将结果写入文件,使用try-except处理异常,字典操作如get和defaultdict,使用Counter进行计数,集合操作,条件表达式的简便形式,生成器节约内存,面向对象编程,以及函数装饰器和部分应用等功能的介绍。
摘要由CSDN通过智能技术生成

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的参数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值