極簡教程
數據類型(私信小編07獲取Python學習教程)
我們可以使用 type() 函數類獲取對象的類型,Python3中內置數據類型包括: None,int,float,complex,str,list,dict,tuple,set,frozenset,range 等,Python2中還有 long 類型,Python中並沒有內置數組類型。
dict,list,set 這些是可變類型(用戶自定義類型也可變),可以改變類型對象的值;數值和字符串類型則是不可變的。如果你感覺學不會?莫慌,小編推薦大家加入群,
前面548中間377後面875,群裡有志同道合的小夥伴,
互幫互助,還可以拿到許多視頻教程!
- str
- 與js一樣,python中字符串即可用單引號也可用雙引號表示
- numbers
- Python3中數值類型有: int 和 float 兩種
- list
- 字面量表示:[1,1.0,False,'list']
- 列表推導式 ,創建列表的一種簡易方法:
- tuple
- 字面量表示:(1,1.0,False,'tuple')
- range
list、tuple、range均屬於 序列類型(Sequence Types)
- dict
- set/frozenset
- 集合是不包含重複元素的數據集,frozenset是不可變的,set是可變的,可以使用字面量構建一個集合 {1,2,2,4,5} 會輸出 {1,2,4,5}
類型轉換
Python中 類型轉換 只需調用相關函數即可
函數
# 函數定義模板
def func_name([self,][args]):
pass
def say_hello():
print('hello python!')
# python3.5之後,定義函數時可以添加類型說明
# 這裡只是提供一個說明文檔而非強制類型約束
def type_instruction(num:int)->int:
return num
定義 多返回值 函數
# 多返回值函數,返回一個tuple對象
def multi_returns():
return 0,1
內置函數
Python中有許多 內置函數 :
- dir
- 我們可以使用 dir() 函數來查看對象都含有哪些成員:
- map
- filter
- reduce 不是內置函數,但也很有用
lambda
Python中使用 lambda 關鍵字即可創建lambda表達式:
*args 與 **kvargs
*args 和 **kvargs 都用於函數中接收多個參數,這裡 args 和 kvargs 只是約定俗成的寫法,可以換成其它的名稱,但 * 和 ** 則是必須的。
*args 和 **kvargs 的區別是, *args 用於接受普通參數, **kvargs 用於接受鍵值對參數。
三元運算符
面向對象
Python中一切皆對象(這句話理解起來並不是那麼容易),包括函數(C#,JAVA中函數不能獨立存在)。這裡貼一篇以前寫的文章: Python中的類、對象、繼承
Python按引用傳遞對象,對於不可變對象在修改時會產生新的對象;而對於可變對象,所有的修改都會反映在原有對象上。
魔術方法 是Python 對象模型 的重要部分。
可以動態的給對象/類型添加屬性,若給類型添加屬性,則該屬性在已產生的實例上也是可見的:
異常與錯誤
Python中異常與錯誤類間關係如下:
自定義異常只需繼承 Exception 或各種 Error 類即可
異常處理
try:
raise IOError('使用raise語句拋出異常')
except IOError as err:
print(err)
else:
print('未發生異常則執行')
finally:
pass
捕獲多個異常類型:
try:
raise IOError()
except (IOError,TypeError):
pass
with語句
with...as... 語句等價於 try...finally... ,與C#中的 using 語句類似
命名規範
module_name, package_name, ClassName, method_name, ExceptionName, function_name, GLOBAL_VAR_NAME, instance_var_name, function_parameter_name, local_var_name.
應該避免的名稱
- 單字符名稱, 除了計數器和迭代器.
- 包/模塊名中的連字符(-)
- 雙下劃線開頭並結尾的名稱(Python保留, 例如init)
命名約定
- 所謂”內部(Internal)”表示僅模塊內可用, 或者, 在類內是保護或私有的.
- 用單下劃線(_)開頭表示模塊變量或函數是protected的(使用import * from時不會包含).
- 用雙下劃線(__)開頭的實例變量或方法表示類內私有.
- 將相關的類和頂級函數放在同一個模塊裡. 不像Java, 沒必要限制一個類一個模塊.
- 對類名使用大寫字母開頭的單詞(如CapWords, 即Pascal風格), 但是模塊名應該用小寫加下劃線的方式(如lower_with_under.py). 儘管已經有很多現存的模塊使用類似於CapWords.py這樣的命名, 但現在已經不鼓勵這樣做, 因為如果模塊名碰巧和類名一致, 這會讓人困擾.
Python之父Guido推薦的規範
包與模塊
- 模塊
- 包含Python語句或定義的文件就是一個模塊,文件名就是模塊名。在一個模塊中,模塊名是全局變量 __name__ 的值。
- 包
- 包含 __init__.py 文件的文件夾即可視為一個包,包用於管理模塊,可以防止模塊命名衝突。如: A.C 和 B.C ,分別表示A包中的C模塊和B包中的C模塊。
- 導入模塊 :
- import a 、 import a as alias 、 from a import * 、 from a import b,c
- Python解釋器會先從內置模塊中尋找導入的模塊,然後從 sys.path 中指定的 模塊搜索路徑尋找模塊
測試
編寫一個文件操作類,文件名為 file_operator.py :
# coding=utf-8
import codecs
class FileOperator:
def save_file(self, file_path, content, encoding="utf-8"):
with codecs.open(file_path, "w", encoding) as f:
f.write(content)
編寫測試用例,文件名為 test_file_operator.py :
# coding=utf-8
import unittest
class TestFileOperator(unittest.TestCase):
def test_save_file(self):
content = "file content \r\n 文本內容"
opt = file.FileOperator()
opt.save_file("1.txt", content)
if __name__ == "__main__":
unittest.main()
工具推薦
- iPython
- VS Code
- PyCharm
小結
以上是自己近期學習Python的一些總結,全文的主要關注點在Python語言本身。掌握以上內容後,便可以用Python寫些腳本,輔以其他第三方包或框架就可以幹更多更復雜的事了。如,爬蟲、數據分析、後端開發以及現在比較熱的人工智能(其實,我是不建議追熱點的)。
用了一段時間的Python後,會覺著Python挺有意思的。
最後附上一張,個人總結的語言學習套路:
閱讀更多 編程夢工廠 的文章