收藏整理的一些Python常用方法和技巧
1.逆转字符串的三种方法
1.1.模拟C++中方法,定义一个空字符串来实现
通过设置一个空字符串,然后讲参数中的字符串从后往前遍历,使用字符串的加法合并为新的字符串
defreverse(text): str='' index=len(text)-1 whileindex>=0: str+=text[index] index-=1 returnstr
1.2.使用切片法
这个是Python中的一个特性,切片可以取负值,这是采用切片的方法,设置步长为-1,这样就实现了反过来排序。
defreverse_1(text): returntext[::-1]
1.3.使用列表
采用列表的reverse方法,先将text转换为列表,然后通过reverse方法反转,然后在通过join连接为字符串。
defreverse_2(text): temp=list(text) temp.reverse() return''.join(temp)
2.使用reduce
使用匿名函数和reduce()
defreverse_3(text): returnreduce(lambdax,y:y+x,text) printreverse_3("Hello")
3.遍历字典的四种方法
dict={"a":"apple","b":"banana","o":"orange"} print"##########dict######################" foriindict: print"dict[%s]="%i,dict[i] print"###########items#####################" for(k,v)in dict.items(): print"dict[%s]="%k,v print"###########iteritems#################" fork,vindict.iteritems(): print"dict[%s]="%k,v print"###########iterkeys,itervalues#######" fork,vinzip(dict.iterkeys(),dict.itervalues()): print"dict[%s]="%k,v
4.遍历list的三种方法
forkeyinlst: printkey foriinrange(len(lst)): printlst[i] forindex,keyinenumerate(lst): printkey //index是list的索引
5.字典排序的方法
字典按照value的值从大到小的顺序来排序(默认从小到排序)。
dic={'a':31,'bc':5,'c':3,'asd':4,'aa':74,'d':0} dict=sorted(dic.iteritems(),key=lambdad:d[1],reverse=True) printdict //输出的结果: [('aa',74),('a',31),('bc',5),('asd',4),('c',3),('d',0)]
下面我们分解下代码
printdic.iteritems()得到[(键,值)]的列表。
然后用sorted方法,通过key这个参数,指定排序是按照value,也就是第一个元素d[1的值来排序。reverse=True表示是需要翻转的,默认是从小到大,翻转的话,那就是从大到小。
对字典按键(key)排序:
dic={'a':31,'bc':5,'c':3,'asd':4,'aa':74,'d':0} dict=sorted(dic.iteritems(),key=lambdad:d[0])#d[0]表示字典的键 printdict #sorted中第三个可选参数为reverse,True表示从大到小排序 #默认reverse=False
6.子类和父类
子类构造函数调用父类的初始化构造函数
classA(object): def__init__(self): print "testA classB(A): def__init__(self): A.__init__(self)
子类调用父类的同名函数
super().fuleifunction()
7.更灵活的参数传递方式
func2(a=1,b=2,c=3)#默认参数 func3(*args) #接受任意数量的参数,以tuple的方式传入 func4(**kargs) #把参数以键值对字典的形式传入
在变量前加上星号前缀(*),调用时的参数会存储在一个tuple()对象中,赋值给形参。在函数内部,需要对参数进行处理时,只要对这个tuple类型的形参(这里是args)进行操作就可以了。因此,函数在定义时并不需要指明参数个数,就可以处理任意参数个数的情况。
defcalcSum(*args): sum=0 foriinargs: sum+=i printsum #调用: calcSum(1,2,3) calcSum(123,456) calcSum() #输出: 6 579 0 ################################# defprintAll(**kargs): forkinkargs: printk,':',kargs[k] printAll(a=1,b=2,c=3) printAll(x=4,y=5) #输出: a:1 c:3 b:2 y:5 x:4
python的中参数可以多种形式进行组合,在混合使用时,首先要注意函数的写法,必须遵守:
1.带有默认值的形参(arg=)须在无默认值的形参(arg)之后
2.元组参数(*args)须在带有默认值的形参(arg=)之后
3.字典参数(**kargs)须在元组参数(*args)之后
在函数被调用时,参数的传递过程为:
1.按顺序把无指定参数的实参赋值给形参
2.把指定参数名称(arg=v)的实参赋值给对应的形参
3.将多余的无指定参数的实参打包成一个tuple传递给元组参数(*args)
4.将多余的指定参数名的实参打包成一个dict传递给字典参数(**kargs)
8.lambda表达式
lambda表达式可以看做一种匿名函数
lambda表达式的语法格式:
lambda参数列表:表达式 #参数列表周围没有括号,返回值前没有return关键字,也没有函数名称
deffn(x): returnlambday:x+y #调用 a=fn(2) printa(3) #输出 5
分析
:fn(2)调用后,相当于a=lambday:2+y,然后a(3)被调用时.
相当于printlambday:2+3