收藏整理的一些Python常用方法和技巧
1. 逆轉(zhuǎn)字符串的三種方法
1.1. 模擬C++中方法, 定義一個(gè)空字符串來實(shí)現(xiàn)
通過設(shè)置一個(gè)空字符串, 然后講參數(shù)中的字符串從后往前遍歷, 使用字符串的加法合并為新的字符串
def reverse(text) :
str = ''
index = len(text) - 1
while index >= 0 :
str += text[index]
index -= 1
return str
1.2. 使用切片法
這個(gè)是Python中的一個(gè)特性, 切片可以取負(fù)值,這是采用切片的方法,設(shè)置步長為-1,這樣就實(shí)現(xiàn)了反過來排序。
def reverse_1(text) :
return text[::-1]
1.3. 使用列表
采用列表的reverse方法,先將text轉(zhuǎn)換為列表,然后通過reverse方法反轉(zhuǎn),然后在通過join連接為字符串。
def reverse_2(text) :
temp = list(text)
temp.reverse()
return ''.join(temp)
2. 使用reduce
使用匿名函數(shù)和reduce()
def reverse_3(text) :
return reduce(lambda x, y : y + x, text)
print reverse_3("Hello")
3. 遍歷字典的四種方法
dict={"a":"apple","b":"banana","o":"orange"}
print "##########dict######################"
for i in dict:
print "dict[%s]=" % i,dict[i]
print "###########items#####################"
for (k,v) in dict.items():
print "dict[%s]=" % k,v
print "###########iteritems#################"
for k,v in dict.iteritems():
print "dict[%s]=" % k,v
print "###########iterkeys,itervalues#######"
for k,v in zip(dict.iterkeys(),dict.itervalues()):
print "dict[%s]=" % k,v
4. 遍歷list的三種方法
for key in lst :
print key
for i in range(len(lst)) :
print lst[i]
for index, key in enumerate(lst) :
print key //index是list的索引
5. 字典排序的方法
字典按照value的值從大到小的順序來排序(默認(rèn)從小到排序)。
dic = {'a':31, 'bc':5, 'c':3, 'asd':4, 'aa':74, 'd':0}
dict= sorted(dic.iteritems(), key=lambda d:d[1], reverse = True)
print dict
//輸出的結(jié)果:
[('aa', 74), ('a', 31), ('bc', 5), ('asd', 4), ('c', 3), ('d', 0)]
下面我們分解下代碼
print dic.iteritems() 得到[(鍵,值)]的列表。
然后用sorted方法,通過key這個(gè)參數(shù),指定排序是按照value,也就是第一個(gè)元素d[1的值來排序。reverse = True表示是需要翻轉(zhuǎn)的,默認(rèn)是從小到大,翻轉(zhuǎn)的話,那就是從大到小。
對(duì)字典按鍵(key)排序:
dic = {'a':31, 'bc':5, 'c':3, 'asd':4, 'aa':74, 'd':0}
dict= sorted(dic.iteritems(), key=lambda d:d[0]) # d[0]表示字典的鍵
print dict
#sorted中第三個(gè)可選參數(shù)為reverse, True表示從大到小排序
#默認(rèn)reverse = False
6. 子類和父類
子類構(gòu)造函數(shù)調(diào)用父類的初始化構(gòu)造函數(shù)
class A(object) :
def __init__(self) :
print "testA
class B(A) :
def __init__(self) :
A.__init__(self)
子類調(diào)用父類的同名函數(shù)
super().fuleifunction()
7. 更靈活的參數(shù)傳遞方式
func2(a=1, b=2, c=3) #默認(rèn)參數(shù)
func3(*args) #接受任意數(shù)量的參數(shù), 以tuple的方式傳入
func4(**kargs) #把參數(shù)以鍵值對(duì)字典的形式傳入
在變量前加上星號(hào)前綴(*),調(diào)用時(shí)的參數(shù)會(huì)存儲(chǔ)在一個(gè) tuple()對(duì)象中,賦值給形參。在函數(shù)內(nèi)部,需要對(duì)參數(shù)進(jìn)行處理時(shí),只要對(duì)這個(gè) tuple 類型的形參(這里是 args)進(jìn)行操作就可以了。因此,函數(shù)在定義時(shí)并不需要指明參數(shù)個(gè)數(shù),就可以處理任意參數(shù)個(gè)數(shù)的情況。
def calcSum(*args):
sum = 0
for i in args:
sum += i
print sum
#調(diào)用:
calcSum(1,2,3)
calcSum(123,456)
calcSum()
#輸出:
6
579
0
#################################
def printAll(**kargs):
for k in kargs:
print k, ':', 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的中參數(shù)可以多種形式進(jìn)行組合, 在混合使用時(shí),首先要注意函數(shù)的寫法,必須遵守:
1.帶有默認(rèn)值的形參(arg=)須在無默認(rèn)值的形參(arg)之后
2.元組參數(shù)(*args)須在帶有默認(rèn)值的形參(arg=)之后
3.字典參數(shù)(**kargs)須在元組參數(shù)(*args)之后
在函數(shù)被調(diào)用時(shí),參數(shù)的傳遞過程為:
1.按順序把無指定參數(shù)的實(shí)參賦值給形參
2.把指定參數(shù)名稱(arg=v)的實(shí)參賦值給對(duì)應(yīng)的形參
3.將多余的無指定參數(shù)的實(shí)參打包成一個(gè) tuple 傳遞給元組參數(shù)(*args)
4.將多余的指定參數(shù)名的實(shí)參打包成一個(gè) dict 傳遞給字典參數(shù)(**kargs)
8. lambda 表達(dá)式
lambda 表達(dá)式可以看做一種匿名函數(shù)
lambda 表達(dá)式的語法格式:
lambda 參數(shù)列表: 表達(dá)式 #參數(shù)列表周圍沒有括號(hào),返回值前沒有 return 關(guān)鍵字,也沒有函數(shù)名稱
def fn(x):
return lambda y: x + y
#調(diào)用
a = fn(2)
print a(3)
#輸出
5
分析
: fn(2)調(diào)用后, 相當(dāng)于a = lambda y: 2 + y, 然后a(3)被調(diào)用時(shí).
相當(dāng)于 print lambda y: 2 + 3
相關(guān)文章
Python應(yīng)用開發(fā)之實(shí)現(xiàn)串口通信
在嵌入式開發(fā)中我們經(jīng)常會(huì)用到串口,串口通信簡單,使用起來方便,且適用場景多。本文為大家準(zhǔn)備了Python實(shí)現(xiàn)串口通信的示例代碼,需要的可以參考一下2022-11-11python3光學(xué)字符識(shí)別模塊tesserocr與pytesseract的使用詳解
這篇文章主要介紹了python3光學(xué)字符識(shí)別模塊tesserocr與pytesseract的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02Python詳細(xì)對(duì)比講解break和continue區(qū)別
這篇文章主要介紹了python循環(huán)控制語句 break 與 continue,break就像是終止按鍵,不管執(zhí)行到哪一步,只要遇到break,不管什么后續(xù)步驟,直接跳出當(dāng)前循環(huán)2022-06-06Python實(shí)現(xiàn)監(jiān)控鍵盤鼠標(biāo)操作示例【基于pyHook與pythoncom模塊】
這篇文章主要介紹了Python實(shí)現(xiàn)監(jiān)控鍵盤鼠標(biāo)操作,結(jié)合實(shí)例形式分析了Python基于pyHook與pythoncom模塊的鍵盤、鼠標(biāo)事件響應(yīng)及日志文件操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-09-09Python中__init__和__new__的區(qū)別詳解
這篇文章主要介紹了Python中__init__和__new__的區(qū)別詳解,并著重說明了__new__的作用及什么情況下使用__new__,需要的朋友可以參考下2014-07-07pytorch之torch.nn.Identity()的作用及解釋
這篇文章主要介紹了pytorch之torch.nn.Identity()的作用及解釋,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08keras獲得model中某一層的某一個(gè)Tensor的輸出維度教程
今天小編就為大家分享一篇keras獲得model中某一層的某一個(gè)Tensor的輸出維度教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01