當前位置:
首頁 > 知識 > Python 簡明語法總結

Python 簡明語法總結


Linux編程

點擊右側關注,免費入門到精通!



作者丨_賴筆小新
https://www.jianshu.com/p/b6c1888e9ed7




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/






 推薦↓↓↓ 






??

16個技術公眾號

】都在這裡!


涵蓋:程序員大咖、源碼共讀、程序員共讀、數據結構與演算法、黑客技術和網路安全、大數據科技、編程前端、Java、Python、Web編程開發、Android、iOS開發、Linux、資料庫研發、幽默程序員等。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python開發 的精彩文章:

GBDT回歸的原理及Python實現
常見Python面試題 — 手寫代碼系列

TAG:Python開發 |