Vue自定義指令及實現圖片懶加載指令
686
2025-03-31
python 高級編程讀書筆記,記錄一下基礎和高級用法
python2和python3兼容處理
使用sys模塊使程序python2和python3兼容
import?sys
ver=sys.version_info
#(major=3,?minor=6,?micro=6)
if?ver<(3,0,0):#?3是版本號,0是此版本號,第二個0修訂號。
import?urllib2
else:
import?urllib
獲取當前環境所用的python包
pip?freeze>requirements.txt
會發現輸出的所有的python包,包括python標準庫的,所以獨立的python運行環境很重要,使用virtualenv或者pipenv建立獨立的python環境很重要。
之后寫入到requirements.txt文件里。
requirements.txt 的用法
這個文件含有當前項目使用的python包為了避免一個一個安裝項目中缺失的包我們一般用。
pip?install?-r?requirements.txt
即可安裝當前項目使用的包。
使用pdb模塊交互式調試
import?pdb
pdb.set_trance()
命令 n:執行下一步,其他的命令可以通過
help?pdb
進行獲取。
zip均勻分配迭代對象
for?i?in?zip(["name","sex","age"],["張三","男",25]):
print(i)
輸出
('name',?'張三')
('sex',?'男')
('age',?25)
兩個列表轉化為字典的形式
print(dict(zip(["name","sex","age"],["張三","男",25])))
輸出
{'name':?'張三',?'sex':?'男',?'age':?25}
序列解包
a,b,c=("this","is","seq")
a1,*b1,c1=("this","is","seq",'tuple')
a2,b2,*c2=("this","is","seq",'tuple')
print(a)
print(b1)
print(c2)
輸出
this
['is',?'seq']
['seq',?'tuple']
字典推導式
d={f"num{num}":num**2?for?num?in?range(10)}
print(d)
輸出
{'num0':?0,?'num1':?1,?'num2':?4,?'num3':?9,?'num4':?16,?'num5':?25,?'num6':?36,?'num7':?49,?'num8':?64,?'num9':?81}
for….else語句
在for后面加else的語句,表示是for循環自然結束的而不是因為break結束的。
for??i?in?range(10):
if?i==6:
break
else:
print("跳出循環")
for??i?in?range(10):
if?i==6:
pass
else:
print("自然循環結束")
輸出
自然循環結束
函數注解
def?foo(num:4>5?and?6>7)->(6666):
return?num+1
print(foo(5))
參數的冒號后計算注解值的表達式,->填入返回值類型
以上這種注解只會讓人糊涂沒什么卵用。
描述符
class?RevealAcess(object):
def?__init__(self,?initval=None,?name='var'):
self.val?=?initval
self.name?=?name
def?__get__(self,?obj,?objtype):
print("Retrieving",?self.name)
return?self.val
def?__set__(self,?obj,?val):
print("updating",?self.name)
self.val?=?val
class?MyClass(object):
x?=?RevealAcess(10,?'var?"x"')
y?=?5
if?__name__?==?"__main__":
m?=?MyClass()
print(m.x)
m.x?=?20
m.x
print(m.y)
輸出
Retrieving?var?"x"
10
updating?var?"x"
Retrieving?var?"x"
5
如果一個類的某個屬性有數據描述符(含有__get__,
__set__方法的類稱之為數據描述符),
通過上述的例子可以知道,每次讀取屬性的時候會調用 __get__方法
每次對屬性賦值的時候調用__set__方法,只實現了__get__的稱之為非數據描述符。
延遲求值屬性
import?pymongo
class?A():
def?__init__(self):
self._client?=?None
def?__get__(self,?instance,?owner):
if?self._client?is?None:
print("創建mongodb連接")
self._client?=?pymongo.MongoClient(host='127.0.0.1',port=27017,maxPoolSize=10)
else:
print('使用存在連接!')
return?self._client
class?B():
db=A()
if?__name__?==?'__main__':
m=B()
print(m.db)
print(m.db)
如果mongodb的連接已經建立就不重新創建了。單例模式的一種。實例之間共享屬性達到節省資源的目的。
property的使用
from?requests_html?import?HTMLSession
class?Spider():
__slots__?=?['url',?'new_url',?'session']??#?凍結屬性
def?__init__(self):
self.url?=?"https://www.baidu.com"
self.new_url?=?None
self.session?=?HTMLSession()
@property
def?get_url(self):
return?self.url
@get_url.setter
def?get_url(self,?key):
self.url?=?f'{self.url}/s?wd={key}'
def?get_html(self):
req?=?self.session.get(self.url)
if?req.status_code?==?200:
return?req.text
if?__name__?==?'__main__':
s?=?Spider()
s.get_url?=?'python'
print(s.get_html())
使用property裝飾器修飾函數get_url,在調用的時候就可以當屬性直接調用,
然后在此基礎上定義同名函數,使用同名函數裝飾器的setter方法修飾函數,可以實現賦值的功能。
華為云APP python
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。