自動目錄
上一篇說明了資料型態及一些重點整理,這篇整理其它的部分。
會說寫給有程式基礎的人是因為我只是列出一些注意點而已,不算是完整的教學說明。
函數
使用 def 來定義函數
1. def要在引用之前定義
2. 可同時回傳多個值
3. 函數中所有變數都是區域變數,可用global 修飾子使用全域變數。
def double(x):
return x, x**2
x, x2= double(10) #引用函數
print(x,x2) # 10, 100
引數可以照順序傳入,或不照順序指定方式傳入,關鍵字參數。
這個顯然是 python 極具特色的寫法,稱為關鍵字參數(Keyword Argument)
def energy(mass=1, velocity=0):
return mass*velocity**2/2
print(energy(1,3)) #4.5
print(energy(velocity=3)) #4.5
上面公式中,mass, velocity都有預設值,你可以照順序傳值進去,也可以直接給定某值,不必照順序。
*name 和 **name 參數
當傳入的變數不確定的時候,可以在參數前加上*,帶給pythone更大的彈性(或是災難?)
一個星 * Python會將參數資料打包成唯讀串列資料型態,那如果想打包成字典資料型態,則可以使用二個星 ** 符號,如下範例:
def energy(*mass, **param):
totalmass= sum(mass)
velocity= param['velocity']
return totalmass*velocity**2/2
print(energy(2,3,4,5,6,7,3,velocity=3)) # =30*3^2/2
這簡直沒有太方便。
引數中的 '/' 和 '*'
這是指定函數的引數的代入條件,稱為定位引數。
簡單來說
'/' 左邊只接受依順序傳入的引數,不接受使用關鍵字傳入引數
'*' 右邊只接受使用關鍵字依順序傳入的引數,不接受依順序傳入引數
以下範例 p1, p2 是依序傳入的引數;p_or_kw是能依順序或使用關鍵字傳入引數; kw是只能使用關鍵字傳入引數,以下是幾種可用的情況:
def name(p_or_kw) # 無定位引數,兩種都能接受
def name(p1, p2, /, p_or_kw, *, kw):
def name(p1, p2=None, /, p_or_kw=None, *, kw):
def name(p1, p2=None, /, *, kw):
def name(p1, p2=None, /):
def name(p1, p2, /, p_or_kw):
def name(p1, p2, /):
說實話不好懂,不懂就算了,其實也不會太難。
類別
使用 class 來定義類別
class solar():
planet = ['mec', 'ven', 'ear', 'mar', 'jup', 'sat', 'ura', 'nep']
def __init__(self): #建構子
self.planetnum =8
def getplanet(self,order):
return self.planet[order]
def __del__(self): #解構子
print("end class")
def __str__(self):#告訴別人你這個類別是什麼
return "I AM ROBOT"
s=solar()
print(s) #I AM ROBOT
print(s.planet[2]) #ear
print(s.getplanet(2)) #ear
s.earth=['moon'] #<==earth 不存在類別中但直接給值不會出錯。
python 類別特性
1. 可以直接設定或讀取類別的變數,類別變數前加上雙底線可設為 private,例如 __privatevalue。
2. 要防止被子類別繼承,可以在方法前加上兩個下底線變成私有方法。
3. __init__是建構子,類別變數可在 __init__中指定,或在類別中指定,不必先宣告
4. 類別中所有的方法第一個引數一定是 self
類別可以多重繼承
class ChildClass(Base1, Base2, Base3):
python 類別繼承特性
1. 子類別要繼承父類別,只要在子類別的名稱中括號加入父類別即可,如
2. 在繼承時,如果子類類別裡某個方法的名稱和父類別相同(包括 __init__ ,則會完全複寫父類別的方法
3. 多繼承時,相同變數名稱或相同名稱的方法會以括孤中最先出現的為準(前壓後),換句話上,ChildClass> Base1 > Base 2> Base 3
4. 使用 super()來取用父類別的方法或變數。例如 super().fathermethod();
5. 變數或方法的名稱以兩個下底線開始的話,不會被繼承,就算使用 super也讀不到
檔案讀取和寫入
讀取檔案
f = open('myfile.txt', 'r', encoding='UTF-8')
datalist = f.readlines()
for data in datalist:
print(data, end='\n')#一行行印出來
f.close()
使用while來讀取
f = open('myfile.txt', 'r',encoding='UTF-8')
while True:
data = f.readline()
if data == '':# 使用 ''空白判斷,簡單粗暴
break
print (data)
f.close()
寫入檔案
f = open('myfile.txt', 'a') # 原檔不存在建立新檔,已存在檔案加在原內容後面
f = open('myfile.txt', 'x') # 原檔不存在建立新檔,已存在檔案報錯FileExistsError
使用串列寫入資料
f = open('myfile.txt', 'w', encoding='UTF-8')
f.write('您好嗎?\n')# 寫入一行
datalist = ['I am good\n', 'それではまた\n']
f.writelines(datalist)# 寫入出行
f.close()
結論
python的指令和功能不只這些,只是我做了簡要的整理,對於有其它程式基礎的人,希望這篇會對你有幫助。
有了以上對python的背景知識,接下來就可以玩點什麼了。