python高級編程讀書筆記(一)

      網友投稿 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):

      python高級編程讀書筆記(一)

      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小時內刪除侵權內容。

      上一篇:客服的接待流程是什么?客服的接待流程技巧
      下一篇:云文檔密碼忘記了,能找回嗎(云服務密碼忘記怎么找回)
      相關文章
      国产亚洲人成在线播放| 亚洲AV无码专区在线观看成人| 亚洲成AV人网址| 国产精品亚洲va在线观看| 亚洲精品久久无码| 亚洲第一第二第三第四第五第六 | 中国亚洲呦女专区| 亚洲成A人片在线播放器| 国产成人亚洲合集青青草原精品 | 亚洲国产精品无码久久九九| 国产精品亚洲а∨天堂2021| 亚洲成AⅤ人影院在线观看| 无码不卡亚洲成?人片| 亚洲精品A在线观看| 国产成人亚洲综合无码| 国产亚洲精品成人AA片新蒲金 | 亚洲理论片在线中文字幕| 亚洲宅男天堂a在线| 亚洲宅男精品一区在线观看| 亚洲精品免费网站| 亚洲大码熟女在线观看| 亚洲日韩AV一区二区三区中文| 亚洲Av永久无码精品黑人| 国产成人精品亚洲一区| 亚洲av无码国产精品色在线看不卡 | 亚洲AV日韩AV永久无码免下载| 亚洲小视频在线观看| 亚洲成AV人综合在线观看| 香蕉大伊亚洲人在线观看| 亚洲国产精品无码久久| 亚洲精品NV久久久久久久久久| 久久亚洲AV无码西西人体| 国产成A人亚洲精V品无码性色| 亚洲国产国产综合一区首页| 亚洲视频免费播放| 国产亚洲中文日本不卡二区| 国产亚洲精品国产福利在线观看| 久久99亚洲综合精品首页| 亚洲AV无码专区电影在线观看| 亚洲色图视频在线观看| 中文字幕在线观看亚洲日韩|