Python語法總結

Python 簡明語法總結

!!! 只針對有經驗開發人員

簡單輸入輸出

  • 輸出
    print 10 , '十'
  • 輸入
    name = raw_input()

python基礎

  • 數據類型和變量
  1. 常規類型:整形、浮點型、字符串(以' 或者 " 括起來)、布爾值(True, False 奇怪為什么用大寫)。</br>
  2. 轉義使用</br>
  3. 多行請用'''...'''表示 </br>
  4. 布爾運算符:and or not </br>
  5. 空值:None
  6. python并無實質常量,只有約定常量,全大寫表示(個人覺得使用objective-c的k開頭表示法也不錯。比如kServerAddress)
  • 字符串和編碼

在日常編寫中似乎用不太到字符編碼互轉的功能

  1. 字符串格式化: 'hello , %@' % 'world!'</br>
    使用%s占位符, 使用 % 表示需要格式化字符串,后跟tuple變量
  • 使用list和tuple
  1. list其實就是數組,定義:['1', 'hello']</br>
  2. 使用len(list)計算數組元素個數</br>
  3. 使用(1, 2, 3)定義tuple,其實就是不可變的數組。
  • 條件判斷和循環
  1. if condition : block elif condition: block else : block 代碼段落需要嚴格縮進,不需要大括號。</br>
  2. for item in list: block </br>
  3. range(number)可以生成從0 到 number-1的list</br>
  4. while condition : block</br>
  5. 可以使用int('string')或者float('string')獲取對應值
  • 使用dict和set
  1. 字典類型:dict = {'key' : value}</br>
  2. 使用dict[key]直接取值會報錯,方法是使用 dict.get(key),如果沒有值會返回None </br>
  3. 使用pop(key)刪除一個item</br>
  4. set可以看成是在幫你管理一個不可重復元素的列表,并提供一些高級功能,比如聯合(\)、交(&)、差(-)和對稱差集(^)

函數

  • 定義函數
  1. 空函數:pass</br>
  2. 類型檢查,python是類型不安全的,所以我們可以通過isinstance(var, (type1, type2))來檢查類型 </br>
  3. 返回多個值,使用tuple。不過可以省略括號,類似x, y = 3, 4</br>
  4. 默認值:def method(arg1 = 'arg1'),注意默認參數只能放到最后</br>
  5. 可變參數:def method(*var_arg):,其中var_arg是一個tuple,可以使用for in來遍歷</br>
  6. 關鍵字參數:def method(**key):,關鍵字參數不限制傳入的參數個數和類型,會在函數內部組合成一個dict </br>
  7. 參數組合:當定義為def func(a, b, c=0, *args, **kw):可以這樣調用:func(*args, **kw)其中,args為tuple, kw為字典 </br>
  8. 遞歸函數,注意遞歸函數的溢出崩潰問題。python并沒有為尾遞歸做優化,所以還是會崩潰的。

高級特性

  • 切片
  1. array[0:3]:表示從第0個元素開始,取3個</br>
  2. array[-3:-1]:表示取倒數第三,第二個元素,-1表示最后一個。</br>
  3. array[::5]:表示每5個取一個元素</br>
  4. 字符串也可以切片
  • 迭代
  1. 迭代即使用:for item in array,array既可以是數組,也可以是字典或者字符串</br>
  2. 判斷是否可以迭代,isinstance(object, Iterable),判斷對象是否實現了Iterable接口
  3. 迭代dict:</br>for key in dict遍歷key。</br>for value in dict.itervalues()遍歷value。</br>for k, v in dict.iteritems()遍歷key和value
  • 列表生成器
  1. 列表生成使用range(start, end)函數</br>
  2. 混合生成使用簡寫for in 迭代。[x * x for x in range(1, 10) if x % 2 == 0]</br>
  3. 也可以使用兩層循環,[x * y for x in range(1, 10) for y in range(20, 30)]
  • 生成器
  1. 如果你需要一組序列,但是太大,占用內存過多。那么可以使用生成器,它是實時計算的列表。
  2. 將列表生成表達式的[]變為()即可。
  3. 可以將一個函數變成一個生成器,只需要添加yield item語句即可,生成器會在遇到yield的時候返回對應結果,下次next從上次yield之后開始執行。

函數式編程

  • 高階函數
  1. 函數可以賦值給變量,可以當成參數傳遞給函數
  2. map:對每個列表中得元素作用一個函數,并返回。
  3. reduce:將結果和下個元素傳給函數,最終返回一個結果。
  4. filter:過濾器,使用方法跟map差不多,是返回結果為true的元素
  5. sorted:排序,跟map差不多
  • 返回函數
  1. 可以在函數中定義函數,并返回。就像一個變量一樣。
  2. 閉包:返回的函數可以使用定義函數內部的變量
  • 匿名函數

匿名函數即lamdba表達式:lamdba 參數 : 表達式

  • 裝飾器
  1. 概念:即在函數執行前后加一些邏輯不想管的代碼,比如log
  2. 實現</br>
def log(func):
    @functools.wraps(func)
    def wrapper(*args, **kw):
        print 'call %s():' % func.__name__
        return func(*args, **kw)
    return wrapper
@log
def now():
    print '2013-12-25'
  • 偏函數
  1. 簡單的講就是創建具有特定模式的函數別名,這個特定模式大概指的是設定好某些參數(默認參數),來達到簡寫的目的。</br>
  2. int2 = functools.partial(int, base=2)這樣就創建了一個專門轉化二進制的函數了。因為我們設定了默認參數 base = 2
  3. 當參數太多需要簡化的時候就是用偏函數

模塊

  • 模塊

一個py文件就是一個模塊,目錄就是包名

  • 使用模塊
    這是一個標準的模塊模板
#!/usr/bin/env python
# -*- coding: utf-8 -*-

' a test module '

__author__ = 'Michael Liao'

import sys

def test():
    args = sys.argv
    if len(args)==1:
        print 'Hello, world!'
    elif len(args)==2:
        print 'Hello, %s!' % args[1]
    else:
        print 'Too many arguments!'

if __name__=='__main__':
    test()

模塊內部的私有變量和函數一律使用_開頭,且不要在外部進行引用。

  • 安裝第三方模塊

pip install 模塊名稱

  • 使用__future__

future可以把下個版本的新功能添加到當前版本

面向對象編程

  • 類和實例
    定義類
class ClassName(SuperClass):
    pass

構造方法def __init__(self,args)`

  • 訪問限制

使用__雙下劃線開頭可以讓變量成為私有,外部無法訪問。也可以通過添加getter、setter來控制訪問操作。

  • 繼承和多態

繼承就在定義的時候寫上父類的名稱,多態就覆蓋父類的方法。

  • 獲取對象信息
  1. 使用type()判斷類型信息
  2. 使用isinstance()判斷繼承關系
  3. 使用dir()獲取對象的所有方法和屬性

面向對象高級編程

  • 使用slots
  1. 動態添加屬性:instance.pro = 10
  2. 動態添加方法:instance.newmethod = MethodType(method_name, instance, class_name)
  3. 為了防止胡亂添加屬性可以使用__slots__ = (被允許的屬性)
  • 使用@property
    如下,定義了一個score的屬性
@property
    def score(self):
        return self._score

    @score.setter
    def score(self, value):
        if not isinstance(value, int):
            raise ValueError('score must be an integer!')
        if value < 0 or value > 100:
            raise ValueError('score must between 0 ~ 100!')
        self._score = value
  • 多重繼承
  1. 最好不要用多重繼承,用mixin
  2. mixin其中概念,用類來提供一組相似功能。類似實現過的接口。
  • 定制類
  1. 使用類似slots 來定制一個類的行為。
  2. str 打印類時的信息
  3. repr直接寫打印出來的信息
  4. iter 用于 for ... in迭代,__iter__返回下一個迭代對象,next()用于拿到循環的下一個值
  5. getitem 提供下標訪問
  6. getattr 當找不到這個屬性的時候會調用這個方法
  7. call 當使用instance()這樣來把對象實例當成方法調用的時候,其實調用的就是__call__
  8. 可以使用callable(thing)來判斷一個東西是否可以被當成方法調用
  • 使用元類
  1. types():使用它來動態構建類,方法是types('ClassName', (SuperClass, ), dict(methodName = method))

錯誤、調試和測試

  • 錯誤
  1. try...except...finally...
  2. 錯誤基類是BaseException
    常見的錯誤類型
  3. 記錄錯誤,使用python模塊logginglogging.exception(exception instance)可以將錯誤調用對戰輸出出來
  4. 也可以自定義錯誤類型,方法是繼承自某個Exception,然后使用raise語句
  5. 直接寫raise可以把當前exception拋出,讓上層調用處理。
  • 調試
  1. 斷言:assert is true? , 'error message'
  2. logging可以方便的輸出日志,包括錯誤。
  3. logging.info('info')。method可以是debug,info,warning,error中的一個。
  4. 可以指定當前輸出的method,方法是指定當前輸出級別logging.basicConfig(level=logging.INFO)
  5. pdb:python -m pdb err.py 開始調試 l 查看代碼 n單步執行 p查看變量 q結束測試 c繼續執行
  6. 程序內部設置斷點:import pdb,在可能出錯的地方放置pdb.set_trace()
  7. 還是使用IDE吧pycharm,下載http://www.jetbrains.com/pycharm/
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,443評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,530評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,407評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,981評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,759評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,204評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,263評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,415評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,955評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,650評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,892評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,675評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,967評論 2 374

推薦閱讀更多精彩內容