是的,從以前就說要學,但是太懶就沒動。終於在最近開始動手看著教學一步步學習,學習
最好的一個方法就是把自己的學習歷程寫出來,方便日後有一個參考。恩?那我現在再做什
麼?沒錯,我就是在寫學習歷程,說來慚愧,知道要寫但一直在學python,有心得也忘了補
上,只好現在亡羊補牢。
寫在前面,本網誌基本上,你應該很難看到有什麼新發現之類,畢竟Python的官方文件都寫
得很清楚,但我還是會貼一些我自己寫的東西,不過第一篇文章我還事先統整我到目前為只學習的Python的心得筆記,這是簡潔籠統的。
個人用,但也歡迎提出意見一起學習
~20170626
System: Mint Linux(VmWare)
Python version: version3
Python tutorial web : liaoxuefeng.com ( I' m very thanks it)
(環境安裝 / Linux 相關使用方法請自行搞定)
Python note:
1.
Python 是直譯方式執行程式,走到那才執行到哪邊(跟網頁有點類似..),因此Python是"執行"時候才會爆出問題,跟C/C++/Java不太一樣,這三者可以透過編譯先告知錯誤。
2.
Terminal模式下的Python,是交互方法執行Python,當然也可以寫成檔案後(XXXX.py),注意副檔名".py",透過Python3 XXXX.py執行,檔案跟Terminal不同的地方在於:前者會一次執行,後者輸入一行就解釋一行,後者適合學習使用,前者則是開發。
Note : Python3 XXXX.py的意思是透過Python3編譯器執行XXXX.py,但是過往的Python1.2則是Python XXXX.py,不須要加"版本編號",因為Python3改了很多東西,為了區別跟1.2版的不同,特地用這方式。對了,如果你堅持用Windows下安裝Python運行,執行的cmd是不一樣,請自行處理,本文不描述
3.
關於輸出:
a.print('hello,'world') #hello world - python透過"," 分隔,輸出時會變成空白字元,對,字串使用' 單引號進行處理,不過"也可以,基於官方用單引號,這邊還是以單引號為主
b.python 註解使用"#",編寫使用Tab進行縮排(default 4 space)
c.需要使用特定字元包含在輸出中,可以使用"\"在要輸出的文字之前,特殊字元其實跟C/C++等語言一樣
4.
'''...'''需要顯示多行時可以使用,在交互氏看起來會像是
.
但是寫成檔案的話,將 ">>>"去掉就可以
5.
Python在string上的處理有點不同,舉個例子
a='string1'
b=a
a='abcd'
pritn(a) #abcd
print(b) #string1
關於解釋可以參考:點這
6.
"/" 符號用在除法有不同的意思: 單 / 除出來的數字會是浮點數, // 則是整數(永遠),要取餘數的話跟C/C++一樣,掛 "%"就好
7.
'ABC'.encoder('ascii') # b'ABC' ,掛b表示變成bytes形式
' 中文'.encoder('u-tf8') #b'\xe4\xb8\xad\xe6\x96\x87' ,中文字是兩byte表示一個字,但有6byte阿?空格阿..空格算一個字元。
不過中文請勿使用ASCII進行encode,會解不出來
8.
b'ABC' .decode('ascii') # 'ABC' 用ascii 進行解碼,還原罷了
9.
進行檔案編寫,Python3請用utf-8處理,方法是在最前面加上這兩行:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
10.
python一樣可以跟C相同,進行字串的格式化處理
%d int
%f float
%s string
%x hex value
ex: 'Hello, %s' % 'world' # 'Hello, world' , 注意格式化字串不是用","隔開,而是用"%"
另外,如果不確定該用什麼格式,用%s就對了,永遠有效
11.
list - 有序集合 : 可以任意添加任何的數值,想同頭尾開開的array就好
list的宣告 : L=[x,y,z]
tuple - 有序集合:不同的地方在tuple宣告完畢(包含數值),就無法在變更裡面的內容
tuple的宣告 : t=(x,y,z)
tuple在定義只有一個元素的時候,要宣告成: t=(1,),注意 ,
這樣一來,print(t) 就會顯示(1,)
12.
tuple其實有一個可變得方法,但需要使用到list包含在tuple中,原理其實就是改變list的內容,.....?tuple的內容不是不能變嘛?但我今天改的是list阿?tuple裡面有放list可以改?可以,但其實這算偷雞啦,為了系統的安全還是不要這樣搞吧
t = ('a', 'b', ['A', 'B'])
t[2][0] = 'X'
t[2][1] = 'Y'
print(t) #('a', 'b', ['X', 'Y'])
想想list的特性吧
13
dict ,辭典,有用jave或者C#的對字典的資料表示不陌生(C++好像也有?)
就是key:value的組合
d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
字典就是速度快,缺點就是浪費空間(因為你比人家多key,多佔兩倍空間)
14
set其實跟dict很類似,但是set有自動過濾重複value的功能,類似dict中key不能重複的,所以set其實是保存key,但實際上使用你不太需要去瞭解這方面,另Set沒有排序功能,所以大量set element時,每次輸出的順序有可能不同
s = set([1, 1, 2, 2, 3, 3])
print(s) #{1,2,3}
注意,Set經過print後,是用{}顯示,跟輸入時不同
set可以做and/or的運算喔
s1 = set([1, 2, 3])
s2 = set([2, 3, 4])
print(s1 & s2) #{2, 3}
print(s1 | s2) #{1, 2, 3, 4}
整理: list使用[],tuple使用(),字典使用{}
15.
from (filename but no sub name) import (function name) 引用自寫python function時,需要宣告這一串
16.
power(x) / power(x, n) : 位置參數,宣告使用該參數時候一定至少要有對應的input,前者要一個,後者要兩個,Power(x, n=2):其中n有先定義,這是默認參數。這表示使用的時候不輸入第二個參數的話,自動使用預設值2處理,定義一個function:
def power(x, n=2):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
result=power(5)
print(result) # 25
但如果是
result=power(5,3)
print(result) # 125
當使用者需要修改輸入的階層數的話
Note:當傳入的是一個list的話
def add_end(L=[]):
L.append('END')
return L
result = add_end([1, 2, 3])
print(result) #[1, 2, 3, 'END']
傳入空值 :
result = add_end()
print(result) #['END']
但是在乎叫一次的話就變成
result = add_end()
print(result) #['END','END']
那是因為L跟[]其實都是變量,相當於b=a這樣的安排,所以[]有變化,L就會變化,避免這情況的話,要改寫成為
def add_end(L=None):
if L is None:
L = []
L.append('END')
return L
result = add_end()
print(result) #['END']
result = add_end()
print(result) #['END']
17. 可變參數
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
加個* 表示cale接收到的numbers是一個tuple形式的參數
EX:
nums = [1, 2, 3]
calc(*nums) #可以寫成這樣
18.
關鍵字參數
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
注意 **kw ,它傳進來的是一個dict,字典
EX:
print(person('Michael', 30)) #name: Michael age: 30 other: {}
print(person('Bob', 35, city='Beijing')) #name: Bob age: 35 other: {'city': 'Beijing'}
print(person('Adam', 45, gender='M', job='Engineer')) #name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
不過除了可以直接傳參數進去,也可以先在外面組成字典後再傳進去
extra = {'city': 'Beijing', 'job': 'Engineer'}
person('Jack', 24, city=extra['city'], job=extra['job']) #name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
關鍵字參數另外一個作用就是,可以在函數中判斷進入的關鍵字是否包含指定的value
def person(name, age, **kw):
if 'city' in kw:
# 有city
pass
if 'job' in kw:
# 有job
pass
print('name:', name, 'age:', age, 'other:', kw)
19.
命名關鍵字
命名關鍵字
這是用來限制使用者一定要輸入指定的參數
def person(name, age, *, city, job):
print(name, age, city, job)
其中 * 一定要寫,而 * 後面的參數就是使用者一定要輸入的參數
EX :
person('Jack', 24, city='Beijing', job='Engineer') #Jack 24 Beijing Engineer
Note :
Python的函數可以將上面提到的關鍵字全部整合在一起,但是,有順序:
必選參數、默認參數、可變參數、命名關鍵字參數和關鍵字參數。

沒有留言:
張貼留言