[精讚] [會員登入]
715

Python 特色寫法整理(2):給有程式基礎的人

python初心者:Python 特色寫法整理,函數、類別、引用等等

分享此文連結 //n.sfs.tw/15843

分享連結 Python 特色寫法整理(2):給有程式基礎的人@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2022-06-13 02:29:23 最後編修
2022-05-24 13:22:37 By 張○○
 

自動目錄

上一篇說明了資料型態及一些重點整理,這篇整理其它的部分。

會說寫給有程式基礎的人是因為我只是列出一些注意點而已,不算是完整的教學說明。

函數

 

使用 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

這簡直沒有太方便。

 

引數中的 '/' 和 '*'

這是指定函數的引數的代入條件,稱為定位引數。

簡單來說

  '/' 左邊只接受依順序傳入的引數,不接受使用關鍵字傳入引數

  '*' 右邊只接受使用關鍵字依順序傳入的引數,不接受依順序傳入引數

def name(只能依順序傳入的引數, /, 能依順序或使用關鍵字傳入引數, *, 只能使用關鍵字傳入引數):

 以下範例 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.  子類別要繼承父類別,只要在子類別的名稱中括號加入父類別即可,如

class Son(Father):

   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', 'w')   # 原檔不存在建立新檔,已存在檔案內容覆寫(原資料消失)
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的背景知識,接下來就可以玩點什麼了。

 

END

你可能感興趣的文章

Python 特色寫法整理(2):給有程式基礎的人 python初心者:Python 特色寫法整理,函數、類別、引用等等

Python 特色寫法整理(1):給有程式基礎的人 python初心者:Python 特色寫法整理

[Python3+Line] 使用 line notify 傳送訊息、圖片和貼圖 python+ line notify 傳送訊息、圖片和貼圖

我有話要說

>>

限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

[CodeIgniter3] 解決無法上傳特定檔案(.sb2)的問題 上傳時出現The filetype you are attempting to upload is not allowed,要怎麼解決?

[PHP] 檢查檔案是否是圖檔 使用getimagesize函數檢查檔案是否是圖檔

設計的工作絕不接受比價 拿買陽春麵的價格想買牛肉麵,寧願倒掉也不賣

[PHP]解決ksort新增的SORT_NATURAL|SORT_FLAG_CASE方法 php>=5.4中ksort函數多了SORT_NATURAL 和 SORT_FLAG_CASE 旗標,對舊版的PHP中要怎麼辦?

網頁的標頭(head)搜尋引擎和FB最佳化 網頁的標頭(head)搜尋引擎和facebook最佳化