做爲一個python小白,徹底從零基礎開始學習 。在學習中主要是參考着Java的語法在學習python。下面是我在此次的學習中總結的一些pyhton須要我注意的地方(在我心中與Java不同的地方),個人目標其實很簡單,可以看懂並能作簡單修改就能夠了。html
參考文檔:python
實驗樓python簡明教程express
https://www.shiyanlou.com/courses/596數組
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000數據結構
Python 入門指南(中文)app
http://www.pythondoc.com/pythontutorial3/index.htmlide
Python for you and me(英文)函數
http://pymbook.readthedocs.io/en/latest/性能
Python簡介
Python 是一個腳本語言,你能夠在 Python 解釋器中直接寫代碼或者將代碼寫到一個文件裏,而後執行這個文件(即腳本文件)。
在 Python 中,空格很重要,咱們使用空格將標識符區分開,行開始處的空格咱們稱之爲縮進,若是你的縮進是錯誤的,Python 解釋器會拋出錯誤。
1、建議遵照如下約定:
一、使用 4 個空格來縮進
二、、永遠不要混用空格和製表符
三、在函數之間空一行
四、在類之間空兩行
五、字典,列表,元組以及參數列表中,在 , 後添加一個空格。對於字典,: 後面也添加一個空格
六、在賦值運算符和比較運算符周圍要有空格(參數列表中除外),可是括號裏側不加空格:a = f(1, 2) + g(3, 4)
七、Python 的註釋以 # 字符開始的,在 # 字符到行尾之間的全部東西都被程序忽略爲註釋,也就說對程序沒有任何影響。
八、模塊是包含了咱們能複用的代碼的文件,包含了不一樣的函數定義,變量。模塊文件一般以 .py 爲擴展名。
2、Python3 的關鍵字
False def if raise
None del import return
True elif in try
and else is while
as except lambda with
assert finally nonlocal yield
break for not
class from or
continue global pass
在 Python 中 咱們不須要爲變量指定數據類型。在 Python 中 咱們不須要爲變量指定數據類型。
3、運算符和表達式
控制流 If-else
語法以下:
if expression:
do this
else
do this
else:
do this
若是表達式 expression 得值爲真(不爲零的任何值都爲真),程序將執行縮進後的內容。務必要使用正確的縮進,在表達式爲真的狀況將會執行縮進的全部行。
while 語句的語法以下:
while condition:
statement1
statement2
想要屢次執行的代碼必須以正確的縮進放在 while 語句下面。在表達式 condition 爲真的時候它們纔會執行。同 if-else 同樣,非零值爲真。
4、列表的數據結構。
它能夠寫做中括號之間的一列逗號分隔的值。列表的元素沒必要是同一類型
備註:就是數組
列表的方法 a.append(45) 添加元素 45 到列表末尾。你能夠看到元素 45 已經添加到列表的末端了。有些時候咱們須要將數據插入到列表的任何位置,這時咱們可使用列表的 insert() 方法。列表方法 count(s) 會返回列表元素中 s 的數量。
remove()
reverse()
sort()
del 關鍵字刪除指定位置的列表元素
列表推導式由包含一個表達式的中括號組成,表達式後面跟隨一個 for 子句,以後能夠有零或多個 for 或 if 子句。結果是一個列表,由表達式依據其後面的 for 和 if 子句上下文計算而來的結果構成。
例如,以下的列表推導式結合兩個列表的元素,若是元素之間不相等的話:
>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
等同於:
>>> combs = []
>>> for x in [1,2,3]:
... for y in [3,1,4]:
... if x != y:
... combs.append((x, y))
...
>>> combs
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
值得注意的是在上面兩個方法中的 for 和 if 語句的順序。
列表推導式也能夠嵌套。
>>> a=[1,2,3]
>>> z = [x + 1 for x in [x ** 2 for x in a]]
>>> z
[2, 5, 10]
若是咱們使用負數的索引,那將會從列表的末尾開始計數
你甚至能夠把它切成不一樣的部分,這個操做稱爲切片,例子在下面給出:
>>> a[0:-1]
[1, 342, 223, 'India']
>>> a[2:-2]
[223]
切片並不會改變正在操做的列表,切片操做返回其子列表,
切片的索引有很是有用的默認值;省略的第一個索引默認爲零,省略的第二個索引默認爲切片的字符串的大小:
5、Python 裏的 for 循環與 C 語言中的不一樣。這裏的 for 循環遍歷任何序
如同 break ,咱們能夠在循環中使用另外一個語句 continue。它會跳過其後的代碼回到循環開始處執行。這意味着它能夠幫助你跳過部分循環。
6、元組是由數個逗號分割的值組成。
元組是不可變類型,這意味着你不能在元組內刪除或添加或編輯任何值。
7、集合是一個無序不重複元素的集。
基本功能包括關係測試和消除重複元素。集合對象還支持 union(聯合),intersection(交),difference(差)和 symmetric difference(對稱差集)等數學運算。
從集合中添加add()或彈出pop()元素
大括號或 set() 函數能夠用來建立集合。注意:想要建立空集合,你必須使用 set() 而不是 {}。
8、字典是是無序的鍵值對(key:value)集合,同一個字典內的鍵必須是互不相同的。一對大括號 {} 建立一個空字典。初始化字典時,在大括號內放置一組逗號分隔的鍵:值對,這也是字典輸出的方式。咱們使用鍵來檢索存儲在字典中的數據。
建立新的鍵值對很簡單:
>>> data['parthan'] = 'Ubuntu'
>>> data
{'kushal': 'Fedora', 'Jace': 'Mac', 'kart_': 'Debian', 'parthan': 'Ubuntu'}
使用 del 關鍵字刪除任意指定的鍵值對:
>>> del data['kushal']
>>> data
{'Jace': 'Mac', 'kart_': 'Debian', 'parthan': 'Ubuntu'
使用 in 關鍵字查詢指定的鍵是否存在於字典中。
>>> 'ShiYanLou' in data
False
必須知道的是,字典中的鍵必須是不可變類型,好比你不能使用列表做爲鍵。
dict() 能夠從包含鍵值對的元組中建立字典。
>>> dict((('Indian','Delhi'),('Bangladesh','Dhaka')))
{'Indian': 'Delhi', 'Bangladesh': 'Dhaka'}
若是你想要遍歷一個字典,使用字典的 items() 方法。
>>> data
{'Kushal': 'Fedora', 'Jace': 'Mac', 'kart_': 'Debian', 'parthan': 'Ubuntu'}
>>> for x, y in data.items():
... print("{} uses {}".format(x, y))
...
Kushal uses Fedora
Jace uses Mac
kart_ uses Debian
parthan uses Ubuntu
許多時候咱們須要往字典中的元素添加數據,咱們首先要判斷這個元素是否存在,不存在則建立一個默認值。若是在循環裏執行這個操做,每次迭代都須要判斷一次,下降程序性能。
咱們可使用 dict.setdefault(key, default) 更有效率的完成這個事情。
>>> data = {}
>>> data.setdefault('names', []).append('Ruby')
>>> data
{'names': ['Ruby']}
>>> data.setdefault('names', []).append('Python')
>>> data
{'names': ['Ruby', 'Python']}
>>> data.setdefault('names', []).append('C')
>>> data
{'names': ['Ruby', 'Python', 'C']}
試圖索引一個不存在的鍵將會拋出一個 keyError 錯誤。咱們可使用 dict.get(key, default) 來索引鍵,若是鍵不存在,那麼返回指定的 default 值。
>>> data['foo']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'foo'
>>> data.get('foo', 0)
0
若是你想要在遍歷列表(或任何序列類型)的同時得到元素索引值,你可使用 enumerate()。
>>> for i, j in enumerate(['a', 'b', 'c']):
... print(i, j)
...
0 a
1 b
2 c
你也許須要同時遍歷兩個序列類型,你可使用 zip() 函數。
>>> a = ['Pradeepto', 'Kushal']
>>> b = ['OpenSUSE', 'Fedora']
>>> for x, y in zip(a, b):
... print("{} uses {}".format(x, y))
...
Pradeepto uses OpenSUSE
Kushal uses Fedora
9、字符串的3種表示
單引號('...')或雙引號("...")你想要分幾行輸入字符串,而且但願行尾的換行符自動包含到字符串當中,可使用三對引號:"""...""" 或 '''...'''
字符串的分割、鏈接、大小寫轉換、搜索等經常使用操做
10、函數的定義
使用關鍵字 def 來定義一個函數
11、局域/全局變量的概念
經過關鍵字 global 來告訴 a 的定義是全局的
默認參數,關鍵字參數及強制關鍵字參數
函數的參數變量能夠有默認值,也就是說若是咱們對指定的參數變量沒有給出任何值則會賦其默認值。
函數能夠經過關鍵字參數的形式來調用
在 Python 裏咱們使用文檔字符串(docstrings)來講明如何使用代碼,這在交互模式很是有用,也能用於自動建立文檔。
12、文檔字符串的使用
#!/usr/bin/env python3
import math
def longest_side(a, b):
"""
Function to find the length of the longest side of a right triangle.
:arg a: Side a of the triangle
:arg b: Side b of the triangle
:return: Length of the longest side c as float
"""
return math.sqrt(a*a + b*b)
if __name__ == '__main__':
print(longest_side.__doc__)
print(longest_side(4,5))
十3、高階函數,map() 函數
高階函數(Higher-order function)或仿函數(functor)是內部至少含有一個如下步驟的函數:
使用一個或多個函數做爲參數
返回另外一個函數做爲輸出
Python 裏的任何函數均可以做爲高階函數。
map 是一個在 Python 裏很是有用的高階函數。它接受一個函數和一個序列(迭代器)做爲輸入,而後對序列(迭代器)的每個值應用這個函數,返回一個序列(迭代器),其包含應用函數後的結果。
其它高級語言常見的函數重載,Python 是沒有的,這是由於 Python 有默認參數這個功能,函數重載 的功能大均可以使用默認參數達到。
十4、文件打開模式
咱們使用 open() 函數打開文件。它須要兩個參數,第一個參數是文件路徑或文件名,第二個是文件的打開模式。模式一般是下面這樣的:
"r",以只讀模式打開,你只能讀取文件但不能編輯/刪除文件的任何內容
"w",以寫入模式打開,若是文件存在將會刪除裏面的全部內容,而後打開這個文件進行寫入
"a",以追加模式打開,寫入到文件中的任何數據將自動添加到末尾
默認的模式爲只讀模式,也就是說若是你不提供任何模式,open() 函數將會以只讀模式打開文件。
打開文件後咱們應該老是關閉文件。咱們使用方法 close() 完成這個操做。
始終確保你顯式關閉每一個打開的文件,一旦它的工做完成你沒有任何理由保持打開文件。由於程序能打開的文件數量是有上限的。若是你超出了這個限制,沒有任何可靠的方法恢復,所以程序可能會崩潰。每一個打開的文件關聯的數據結構(文件描述符/句柄/文件鎖...)都要消耗一些主存資源。所以若是許多打開的文件沒用了你能夠結束大量的內存浪費,而且文件打開時始終存在數據損壞或丟失的可能性。
十5、文件讀取與寫入
使用 read() 方法一次性讀取整個文件。
若是你再一次調用 read(),它會返回空字符串由於它已經讀取完整個文件。
read(size) 有一個可選的參數 size,用於指定字符串長度。若是沒有指定 size 或者指定爲負數,就會讀取並返回整個文件。當文件大小爲當前機器內存兩倍時,就會產生問題。反之,會盡量按比較大的 size 讀取和返回數據。
readline() 能幫助你每次讀取文件的一行。
write() 方法打開一個文件而後咱們隨便寫入一些文本。
十6、with 語句
實際狀況中,咱們應該嘗試使用 with 語句處理文件對象,它會在文件用完後會自動關閉,就算髮生異常也不要緊。它是 try-finally 塊的簡寫:
十7、lscpu 命令的實現
在 Linux 下你可使用 lscpu 命令來查看當前電腦的 CPU 相關信息
NameError
當有人試圖訪問一個未定義的變量則會發生 NameError。
TypeError
TypeError 也是一種常常出現的異常。當操做或函數應用於不適當類型的對象時引起,一個常見的例子是對整數和字符串作加法
十9、異常處理(try..except)
咱們使用 try...except 塊來處理任意異常。
它以以下方式工做:
首先,執行 try 子句 (在 try 和 except 關鍵字之間的部分)。
若是沒有異常發生,except 子句 在 try 語句執行完畢後就被忽略了。
若是在 try 子句執行過程當中發生了異常,那麼該子句其他的部分就會被忽略。
若是異常匹配於 except 關鍵字後面指定的異常類型,就執行對應的 except 子句。而後繼續執行 try 語句以後的代碼。
若是發生了一個異常,在 except 子句中沒有與之匹配的分支,它就會傳遞到上一級 try 語句中。
若是最終仍找不到對應的處理語句,它就成爲一個 未處理異常,終止程序運行,顯示提示信息。
異常拋出(raise)
使用 raise 語句拋出一個異常
二11、finally 子句
try 語句還有另外一個可選的 finally 子句,目的在於定義在任何狀況下都必定要執行的功能。
無論有沒有發生異常,finally 子句 在程序離開 try 後都必定會被執行。當 try 語句中發生了未被 except 捕獲的異常(或者它發生在 except 或 else 子句中),在 finally 子句執行完後它會被從新拋出。
在真實場景的應用程序中,finally 子句用於釋放外部資源(文件或網絡鏈接之類的),不管它們的使用過程當中是否出錯。
二12、類的定義
Class聲明類
類的實例化使用函數符號。只要將類對象看做是一個返回新的類實例的無參數函數便可
對象初始化
二十3、模塊的導入
模塊是包括 Python 定義和聲明的文件。文件名就是模塊名加上 .py 後綴。
咱們必須使用模塊名來訪問模塊內的函數。
import bars
從模塊中導入指定的函數。
>>> from bars import simplebar, starbar
包
含有 __init__.py 文件的目錄能夠用來做爲一個包,目錄裏的全部 .py 文件都是這個包的子模塊
含有 __init__.py 文件的目錄能夠用來做爲一個包,目錄裏的全部 .py 文件都是這個包的子模塊
os 模塊提供了與操做系統相關的功能
默認/第三方模塊介紹
可使用 get() 方法獲取任意一個網頁
二十4、命令行參數
collections是Python內建的一個集合模塊,提供了許多有用的集合類
Counter 類
defaultdict 類
namedtuple 類