《Python入門》筆記

Python入門

Python與其他語言相比的優勢

Python與C和Java相比,運行速度較慢。但隨着技術發展,CPU運行速度越來越快,性能的瓶頸往往不在CPU的運行速度,而在網絡和數據庫的調用上。這就和電瓶車與轎車在堵車時的運行速度一樣,與車本身的運行速度無關。

Python變量和數據類型

Python中的布爾類型

a = 'python'
print 'hello,', a or 'world' #hello, python

b = ''
print 'hello,', b or 'world' #hello, word

Python之創建tuple

  • tuple和list非常類似,但是,tuple一旦創建完畢,就不能修改了。創建tuple和創建list唯一不同之處是用()替代了[]
t = ('Adam','Lisa','Bart')
  • 單元素tuple要多加一個逗號,避免歧義
 t=(1,)

Python中什麼是set

  • 創建set的方式是調用set()並傳入一個list,list的元素將作爲set的元素
  • set中的元素不重複且無序
  • 用add()可以直接添加,而remove()前需要判斷。因爲remove()不存在的元素會報錯

Python之調用函數

  • Python的函數返回多值其實就是返回一個tuple,但可以省略括號,寫起來更方便

第一個Python程序

輸入和輸出

  • Python提供了一個input(),可以讓用戶輸入字符串,並存放到一個變量裏
>>> name = input()
Michael

Python基礎

數據類型和變量

  • 整數的地板除//永遠是整數,即使除不盡。要做精確的除法,使用/就可以。

使用list和tuple

  • 只有1個元素的tuple定義時必須加一個逗號,,來消除歧義
>>> t = (1,)
>>> t
(1,)

使用dict和set

  • 要刪除一個key,用pop(key)方法,對應的value也會從dict中刪除
  • 對於不變對象來說,調用對象自身的任意方法,也不會改變該對象自身的內容。相反,這些方法會創建新的對象並返回,這樣,就保證了不可變對象本身永遠是不可變的。

函數

函數的參數

  • *args是可變參數,args接收的是一個tuple;**kw是關鍵字參數,kw接收的是一個dict。

生成器

  • 如果一個函數定義中包含yield關鍵字,那麼這個函數就不再是一個普通函數,而是一個generator

迭代器

  • 凡是可作用於for循環的對象都是Iterable類型;凡是可作用於next()函數的對象都是Iterator類型,它們表示一個惰性計算的序列;集合數據類型如list、dict、str等是Iterable但不是Iterator,不過可以通過iter()函數獲得一個Iterator對象。

返回函數

  • 返回閉包時牢記的一點就是:返回函數不要引用任何循環變量,或者後續會發生變化的變量。如果一定要引用循環變量怎麼辦?方法是再創建一個函數,用該函數的參數綁定循環變量當前的值,無論該循環變量後續如何更改,已綁定到函數參數的值不變
def count():
    def f(j):
        def g():
            return j*j
        return g
    fs = []
    for i in range(1, 4):
        fs.append(f(i)) # f(i)立刻被執行,因此i的當前值被傳入f()
    return fs

序列化

  • Pytho語言特定的序列化模塊是pickle,但如果要把序列化搞得更通用、更符合Web標準,就可以使用json模塊
  • json模塊的dumps()和laods()函數是定義得非常好的接口的典範。當我們使用時,只需要傳入一個必須的參數。

進程和線程

多進程

  • 在Unix/Linux下,可以使用fork()調用實現多進程
  • 要實現跨平臺的多進程,可以使用multiprocessing模塊
  • 進程間的通信是通過Queue、Pipes等實現的

多線程

  • 多線程編程,模型複雜,容易發生衝突,必須用鎖加以隔離,同時,又要小心死鎖的發生
  • Python解釋器由於設計時有GIL全局鎖,導致了多線程無法利用多核。多線程的併發在Python中就是一個美麗的夢。但可以通過多進程實現多核任務。多個Python進程有各自獨立的GIL鎖
  • 一個ThreadLocal變量雖然是全局變量,但每個線程都只能讀寫自己線程的獨立副本,互補干擾。ThreadLocal解決了參數在一個線程中各個函數之間互相傳遞的問題
  • 在Thread和Porcess中,應當優先選擇Process,因爲Process更穩定
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章