python使用技巧_python小技巧
平時開發中,一些使用的技巧,記錄一下,持續更新…………
1.當函數默認參數為可變對象時,每次調用函數,是不會重新創建對象的
示例代碼1:
def ddd(a,b=[]):
b.append(a)returnbprint(ddd(1))print(ddd(2,['a','b','c']))print(ddd(3))
輸出結果:
[1]
['a','b','c',2]
[1,3]
你對此,可能有些疑問,不對呀,看上去第3個輸出,應該輸出[3]呢,為什么是[1,3]呢????
這個問題問得很好,這涉及到python對象作為參數時,每次調用并不會創建一個新的對象。就這么簡單。
那么你可能又問啦,那為什么第2個,不輸出[1,2]這是因為第二個調用函數的時候,傳的參數是一個對象,將原來的對象改變了。
下面我們看一下,參數變化過程,內存id變化,很明顯第一次和第三次b參數內存地址是同一個。
這說明函數調用,是不會創建新對象的。除非外在改變,也就是第二個調用
D:\Python27\python.exe D:/untitled1/temp5.py49089672[1]49089480['a', 'b', 'c', 2]49089672[1, 3]
2.字符串轉成列表元素,以及列表轉成字符串:
a = 'helloworld'
print(list(a)) #字符串轉成,列表
print(''.join(list(a))) #列表轉成字符串
輸出結果:
['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd']
helloworld
3.元序字典排序
#字典排序
from collections importOrderedDict
dic= {'c':1,'b':2}print(OrderedDict(sorted(dic.iteritems(),key=lambdaa:a[0])))#輸出結果:OrderedDict([('b', 2), ('c', 1)])#這里要說一下,看輸出大家可能有點暈,你只把這個輸出當原字典用就可以了。
4.序列中出現次數最多的元素
#序列中出現次數最多的元素
from collections importCounter
cnt=Counter()
lis= [1,2,3,4,2,3,5,6,2]for i inlis:
cnt[i]+=1
print(cnt) #輸出所有元素排名
print(cnt.most_common(3)) #輸出排名前三的元素#結果:#Counter({2: 3, 3: 2, 1: 1, 4: 1, 5: 1, 6: 1}) 2出現3次#[(2, 3), (3, 2), (1, 1)]
5.列表清空
a=[1,2,3]del a[:] #py3還可以a.clear()
print(a)
6.生成列表
#6.生成10個元素的列表
print(range(1,10)) #輸出結果:[1, 2, 3, 4, 5, 6, 7, 8, 9]
7.兩個列表連接
#7.兩個列表連接
a=[1,2,3]
a.extend([4,5,6])print(a) #輸出結果:[1, 2, 3, 4, 5, 6]
a=[1,2,3]
b=[4,5,6]print(a+b)
8.python執行js腳本
execjs包導入需要,先安裝pyExecjs包
pip install pyExecjs
#python 執行js腳本#如果是js文件的話,需要先把js文件所有內容讀出來#放在compile里進行編譯
importexecjs
ctx= execjs.compile('''function add(a,b){return a+b;}''')print(ctx.call("add",1,2))
輸出結果:
D:\python36\python3.exe D:/untitled4/temp7.py3Process finished with exit code 0
9.cmp(x,y),比較函數
python2.7中cmp是一個內建函數,直接比較兩個值,x>y返回1,x==y返回0 ,x
在python3.0+ 中取消了這個函數,使用(x>y)-(x
示例:python3
defcmp(x,y):return (x>y)-(x
10.所有序列隨機排序
import random
#將序列的所有元素隨機排序
a = [1,2,3,4]
random.shuffle(a)print(a)#輸出[1, 3, 2, 4]
11.隨機從序列中選擇一個值
#從序列的元素中隨機挑選一個元素,比如random.choice(range(10)),從0到9中隨機挑選一個整數。
print(random.choice([1,4,7,9]))
12.兩個列表,合并,生成字典
list1 = ['a','b','c','d']
list2= [5,6,7,8]print(dict(zip(list1,list2)))
結果:
D:\Python27\python.exe D:/untitled1/temp5.py
{'a': 5, 'c': 7, 'b': 6, 'd': 8}
注意python2.7和python3x的區別:
python3需要在zip函數外加個dict或list進行轉換,從面得到合并的list和dict
python2.7是不需要加的,這個默認就是list,字典的話需要用dict關鍵字轉換
list1 = ['a','b','c','d']
list2= [5,6,7,8]print(list(zip(list1,list2)))
結果:
D:\python36\python3.exe D:/untitled4/temp7.py
[('a', 5), ('b', 6), ('c', 7), ('d', 8)]
13.python2 與python3 json decode方法
能過解碼,來解決,中文unicode輸出編碼\e5x\a5x
python2:
json.dumps(a).decode('unicode-escape')
python3:
json.dumps(a,ensure_ascii=False)
14.元組變量與列表變量前加*一個星;字典變量前加**兩個星的作用
#變量單星號實例與,雙星號實例區別
defadd(a, b):return a +b#把列表元素,分析成單個元素4 3進行傳遞
data = [4, 3]print(add(*data))#把字典分解成a=4,b=3兩個參數傳遞
data = {'a': 4, 'b': 3}print(add(**data))
#把元組分解成1,2,3
up = (1,2,3)
print(*up)
15.return 與 global關鍵字
1>一般我們是這樣使用return的
defdemo():
stra= 'abc'
returnstraprint(demo())
那么在接下來看看global能不能達到return同樣的作用;
defdemo():globalstra
stra= 'abc'demo()print(stra)
經過實實驗,以上代碼達到了return同樣的效果。因為關鍵字global將變量stra設置為了全局變量,當調用demo函數時,stra被賦值了。
**不建議使用global關鍵字。容易造成代碼混亂,可讀性差,等多種不利因素。
2>函數要返回多個值怎么辦??可以這樣。
defdemo():
stra= 'abc'strb= 'def'
returnstra,strb
a,b=demo()print(a,b)
推薦以上這樣寫法,當然你也可以反多個返回值存儲在元組,列表,字典等里。
16.小技七節省內存40%-50%?? __slots__
在Python中,每個類都有實例屬性。默認情況下Python用一個字典來保存一個對象的實例屬性。這非常有用,因為它允許我們在運行時去設置任意的新屬性。
然而,對于有著已知屬性的小類來說,它可能是個瓶頸。這個字典浪費了很多內存。Python不能在對象創建時直接分配一個固定量的內存來保存所有的屬性。因此如果你創建許多對象(我指的是成千上萬個),它會消耗掉很多內存。
不過還是有一個方法來規避這個問題。這個方法需要使用__slots__來告訴Python不要使用字典,而且只給一個固定集合的屬性分配空間。
示例代碼2:未加__slots__
classmemory(object):
#__slots__應加在此處def __init__(self,name,age):
self.name=name
self.age=agedefdemo(self):print(self.name)
memory('yhleng','27')
示例代碼2:加__slots__
classmemory(object):__slots__ = ['name', 'age']def __init__(self,name,age):
self.name=name
self.age=agedefdemo(self):print(self.name)
memory('yhleng','27')
小技巧,示例代碼2,要節省內存40%以上。
17.行式構造器
采用行式構造器,可以避免__init__初始化大量參數繁瑣寫法
self.__dict__.update({k: v for k, v in locals().items() if k != 'self'})
以下兩個示例,效果等同,寫法不同,很明顯采用構造器,更簡便
示例1:采用構造器
#行式構造器,避免大量初始化#示例1:采用構造器
classA(object):def __init__(self, a, b, c, d, e, f):
self.__dict__.update({k: v for k, v in locals().items() if k != 'self'})defdemo(self):print(self.b)
c= A(1,2,3,4,5,6)
c.demo()#輸出結果:#D:\python36\python3.exe D:/untitled4/temp7.py#2#
#Process finished with exit code 0
示例2:未采用構造器
classA(object):def __init__(self, a, b, c, d, e, f):
self.a=a
self.b=b
self.c=c
self.d=d
self.e=e
self.f=fdefdemo(self):print(self.b)
c= A(1,2,3,4,5,6)
c.demo()#輸出結果:等同示例1#D:\python36\python3.exe D:/untitled4/temp7.py#2#
#Process finished with exit code 0
18.字符串首字母大寫
str1 = 'apple banana'
print(str1.capitalize())
結果:
D:\python36\python3.exe D:/untitled4/temp7.py
Apple banana
Process finished with exit code 0
19.with語句塊作用
相當于c#中的used語句塊,該語句塊結束對象即銷毀
with open('photo.jpg', 'r+') as f:
jpgdata= f.read()
例如,以上代碼,打開了一個文件,with語句結束銷毀其對象,不需要人為的f.close()
如果人為的寫f.close()還需要考慮到,如果open失敗的情況,否則f.close()會出錯,因為不存在f對象
20.三元運算
通常三元運算會簡化代碼,很有必要。
示例1:
defdemo():
is_fat =1if is_fat != 1:return "not"
return "ok"
以上代碼,如果用三元運算通常可以這樣寫。
is_fat = 1stat= "ok" if is_fat==1 else "not"
print(stat)
示例2:
還有一種寫法
a = ('abc','def')[False]print(a)
[]中為True時a等于def。為False時a等于abc
G
M
T
Detect language
Afrikaans
Albanian
Amharic
Arabic
Armenian
Azerbaijani
Basque
Belarusian
Bengali
Bosnian
Bulgarian
Catalan
Cebuano
Chichewa
Chinese (Simplified)
Chinese (Traditional)
Corsican
Croatian
Czech
Danish
Dutch
English
Esperanto
Estonian
Filipino
Finnish
French
Frisian
Galician
Georgian
German
Greek
Gujarati
Haitian Creole
Hausa
Hawaiian
Hebrew
Hindi
Hmong
Hungarian
Icelandic
Igbo
Indonesian
Irish
Italian
Japanese
Javanese
Kannada
Kazakh
Khmer
Korean
Kurdish
Kyrgyz
Lao
Latin
Latvian
Lithuanian
Luxembourgish
Macedonian
Malagasy
Malay
Malayalam
Maltese
Maori
Marathi
Mongolian
Myanmar (Burmese)
Nepali
Norwegian
Pashto
Persian
Polish
Portuguese
Punjabi
Romanian
Russian
Samoan
Scots Gaelic
Serbian
Sesotho
Shona
Sindhi
Sinhala
Slovak
Slovenian
Somali
Spanish
Sundanese
Swahili
Swedish
Tajik
Tamil
Telugu
Thai
Turkish
Ukrainian
Urdu
Uzbek
Vietnamese
Welsh
Xhosa
Yiddish
Yoruba
Zulu
Afrikaans
Albanian
Amharic
Arabic
Armenian
Azerbaijani
Basque
Belarusian
Bengali
Bosnian
Bulgarian
Catalan
Cebuano
Chichewa
Chinese (Simplified)
Chinese (Traditional)
Corsican
Croatian
Czech
Danish
Dutch
English
Esperanto
Estonian
Filipino
Finnish
French
Frisian
Galician
Georgian
German
Greek
Gujarati
Haitian Creole
Hausa
Hawaiian
Hebrew
Hindi
Hmong
Hungarian
Icelandic
Igbo
Indonesian
Irish
Italian
Japanese
Javanese
Kannada
Kazakh
Khmer
Korean
Kurdish
Kyrgyz
Lao
Latin
Latvian
Lithuanian
Luxembourgish
Macedonian
Malagasy
Malay
Malayalam
Maltese
Maori
Marathi
Mongolian
Myanmar (Burmese)
Nepali
Norwegian
Pashto
Persian
Polish
Portuguese
Punjabi
Romanian
Russian
Samoan
Scots Gaelic
Serbian
Sesotho
Shona
Sindhi
Sinhala
Slovak
Slovenian
Somali
Spanish
Sundanese
Swahili
Swedish
Tajik
Tamil
Telugu
Thai
Turkish
Ukrainian
Urdu
Uzbek
Vietnamese
Welsh
Xhosa
Yiddish
Yoruba
Zulu
Text-to-speech function is limited to 200 characters
總結
以上是生活随笔為你收集整理的python使用技巧_python小技巧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python opencv 直方图均衡_
- 下一篇: g++ 安装python_卧槽,又一款P