Python -呼叫函數 function,副程式的寫法與差異? 最後要不要加上 () ?

更新 發佈閱讀 7 分鐘


問題一:Python程式,DO_A與 DO_A()這兩種寫法有何差異?都是呼叫 DO_A函數

第一種寫法: print(f”Hello”) DO_A # 注意!後面沒加上()

第二種寫法: print(f”Hello”) DO_A()

答:

在 Python 中,DO_A 和 DO_A() 這兩種寫法有本質上的差異:

第一種寫法 DO_A (注意!後面沒加上()) :這是指向函數物件的引用。當你這樣寫時,你並沒有執行函數,而是將函數本身作為一個物件來處理。例如,你可以將它傳遞給其他函數或存儲在變數中。

ChatGPT的說法:

這樣的寫法,DO_A 其實是一個函數物件、函數對象(function object),它並沒有被呼叫。 這行代碼只是參考了 DO_A 函數,並且沒有執行它。

如果這段代碼後面沒有其他上下文,Python 會將 DO_A 視為一個 "不被執行" 的語句,並不會有任何的效果。這樣的寫法不會執行 DO_A 函數,只是指向它。

def DO_A():    print("執行 DO_A 函數")
# 將函數引用存儲在變數中func = DO_Aprint("Hello")
func()  # 執行 DO_A 函數

第二種寫法 DO_A():這是實際執行函數的方式。當你這樣寫時,Python 會立即執行 DO_A 函數並執行其中的代碼。

def DO_A():  print("執行 DO_A 函數")
print("Hello")DO_A()  # 執行 DO_A 函數

在你的例子中:

print(f”Hello”) DO_A # 注意!後面沒加上() ……這樣寫並不會執行 DO_A 函數,只是引用了它。

ChatGPT比較棒,都會給一個總結:

DO_A (沒有括號的 DO_A) 只是引用函數物件,不會執行它。

DO_A() 是呼叫 DO_A 函數,並執行它。

換句話說,沒有括號的 DO_A 是函數物件本身,而加上括號的 DO_A() 是對該函數的實際執行。


問題二:使用PyQt5.QtCore的QTimer。以下的寫法,第二種卻無法執行?

第一種寫法,成功運作 QTimer.singleShot(1100, self.DO_A) # 注意!後面沒加上() 第二種寫法,QTimer.singleShot(1100, self.DO_A()) 卡住不動,無法運行。

答:

第一種寫法:成功運作!

QTimer.singleShot(1100, self.DO_A) 將 self.rDO_A 函數的引用,傳遞給 QTimer.singleShot。這意味著計時器在 1100 毫秒後 執行 self.DO_A 函數。

第二種寫法:會出問題~

QTimer.singleShot(1100, self.DO_A()) 則是 “立即執行” self.DO_A函數,並將其 傳回值傳遞給 QTimer.singleShot。

如果 self.DO_A 函數沒有傳回值(即返回 None),這樣的寫法會導致 QTimer.singleShot 接收到 None,而不是函數引用,從而導致程式卡住。

** 錯誤原因:這個 DO_A函數沒有傳回值,所以後面不要加上 ()

Google Germini的回答:

始終使用第一種寫法 QTimer.singleShot(1100, self.DO_A),將函式物件本身傳遞給 QTimer。

使用 QTimer.singleShot() 設定一個 1100 毫秒(1.1秒)的計時器,並將 self.DO_A 函式物件傳遞給它。

計時器到期後,self.DO_A() 函式會被呼叫,並輸出 "計時器觸發!"。

ChatGPT的說明還是比較詳細!

正確的寫法:應該保持第一種寫法,即傳遞函數物件、函數對象 而不是函數執行結果:

QTimer.singleShot(1100, self.DO_A)

如果你想傳遞帶”參數”的函數,也可以使用 functools.partial 或 lambda 來達成:

from functools import partial QTimer.singleShot(1100, partial(self.DO_A, some_argument))

或者使用 lambda:

QTimer.singleShot(1100, lambda: self.DO_A(some_argument))

這樣你就能在 QTimer 觸發時正確呼叫 DO_A 函數了。

我將思想傳授他人, 他人之所得,亦無損於我之所有;

猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。 — — Thomas Jefferson

線上課程教學,遠距教學 (Web Form 約 51hr) https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015

線上課程教學,遠距教學 (ASP.NET MVC 約 140hr) https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab

寫信給我,不要私訊 — mis2000lab (at) yahoo.com.tw 或 school (at) mis2000lab.net

(1) 第一天 ASP.NET MVC5 完整影片(5.5小時 / .NET 4.x版)免費試聽。影片 https://youtu.be/9spaHik87-A

(2) 第一天 ASP.NET Core MVC 完整影片(3小時 / .NET Core 6.0~8.0)免費試聽。影片 https://youtu.be/TSmwpT-Bx4I

[學員感言] mis2000lab課程評價 — ASP.NET MVC , WebForm 。 https://mis2000lab.medium.com/%E5%AD%B8%E5%93%A1%E6%84%9F%E8%A8%80-mis2000lab%E8%AA%B2%E7%A8%8B%E8%A9%95%E5%83%B9-asp-net-mvc-webform-77903ce9680b

ASP.NET遠距教學、線上課程(Web Form + MVC)。 第一天課程, “完整” 試聽。

……… facebook社團 https://www.facebook.com/mis2000lab ………………….

……… YouTube (ASP.NET) 線上教學影片 https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/

留言
avatar-img
MIS2000 Lab. - ASP.NET 線上教學
4會員
133內容數
2025/03/25
Youtube影片網址 - https://youtu.be/bfHJBZvkSgg https://youtu.be/bfHJBZvkSgg ASP.NET MVC 第一天課程  完整內容試聽,共有三則影片,擇一試聽即可! .NET Core 8.0版 MVC(其實 MVC非常穩定,
2025/03/25
Youtube影片網址 - https://youtu.be/bfHJBZvkSgg https://youtu.be/bfHJBZvkSgg ASP.NET MVC 第一天課程  完整內容試聽,共有三則影片,擇一試聽即可! .NET Core 8.0版 MVC(其實 MVC非常穩定,
2024/12/23
適用於 .NET Framework 4.x版(非 .NET Core版) Youtube網址與功能介紹 - https://www.youtube.com/watch?v=RDdIQr3kVQM https://www.youtube.com/watch?v=RDdIQr3kVQM** 線
2024/12/23
適用於 .NET Framework 4.x版(非 .NET Core版) Youtube網址與功能介紹 - https://www.youtube.com/watch?v=RDdIQr3kVQM https://www.youtube.com/watch?v=RDdIQr3kVQM** 線
2024/12/23
Youtube網址與功能介紹 - https://www.youtube.com/watch?v=gXB_IoIYwj8 ASP.NET MVC畢業專題 - 網路購物商城 / 購物車 / 訂單管理 (.NET Core 5.0 , 6.0~8.0 ,9.0版) https://www.you
2024/12/23
Youtube網址與功能介紹 - https://www.youtube.com/watch?v=gXB_IoIYwj8 ASP.NET MVC畢業專題 - 網路購物商城 / 購物車 / 訂單管理 (.NET Core 5.0 , 6.0~8.0 ,9.0版) https://www.you
看更多
你可能也想看
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
在 Python 中,print( ) 函數用於將結果輸出到螢幕上。當你嘗試將不同資料型別(例如字串和數字)混合在一起輸出時,print( )函數無法直接處理這些不同型別的資料,因此你需要先將它們轉換為相同的資料型別。通常,這意味著需要將數字轉換為字串型別,以便與其他字串一同輸出。 雖然我們也可以
Thumbnail
在 Python 中,print( ) 函數用於將結果輸出到螢幕上。當你嘗試將不同資料型別(例如字串和數字)混合在一起輸出時,print( )函數無法直接處理這些不同型別的資料,因此你需要先將它們轉換為相同的資料型別。通常,這意味著需要將數字轉換為字串型別,以便與其他字串一同輸出。 雖然我們也可以
Thumbnail
Function的使用方式
Thumbnail
Function的使用方式
Thumbnail
呈上次使用logging來撰寫日誌,利用類別包裝的方式,可實現多個日誌紀錄器,但發現這樣就失去它原先,可以回傳是誰呼叫他並記錄行數的功能。 [Python]使用logging創建兩個以上的日誌紀錄 若開啟函式名稱、行數及訊息的功能,就會像這樣,幾乎都是記錄到,我定義中類別的函式
Thumbnail
呈上次使用logging來撰寫日誌,利用類別包裝的方式,可實現多個日誌紀錄器,但發現這樣就失去它原先,可以回傳是誰呼叫他並記錄行數的功能。 [Python]使用logging創建兩個以上的日誌紀錄 若開啟函式名稱、行數及訊息的功能,就會像這樣,幾乎都是記錄到,我定義中類別的函式
Thumbnail
在Python中,我們可以用def關鍵字定義函數,並透過函數名稱呼叫它。函數參數可以是必填、關鍵字、默認或不定長度的類型。return語句負責結束函數並回傳值。全域變數可以在整個程序中使用,而區域變數只能在特定函數內使用。我們還可以在一個文件中定義函數,然後在另一個文件中呼叫它。
Thumbnail
在Python中,我們可以用def關鍵字定義函數,並透過函數名稱呼叫它。函數參數可以是必填、關鍵字、默認或不定長度的類型。return語句負責結束函數並回傳值。全域變數可以在整個程序中使用,而區域變數只能在特定函數內使用。我們還可以在一個文件中定義函數,然後在另一個文件中呼叫它。
Thumbnail
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
Thumbnail
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
本文詳細解說了 Python print() 函數的各種隱藏語法,包括 value、sep、end、file 和 flush。作者以清晰的範例和解說,讓從未接觸程式語言的人也能夠理解。而最後提到了訂閱房間的付費方式,並歡迎大家訂閱。文章內容較為詳細,提供了豐富的資訊。
Thumbnail
本文詳細解說了 Python print() 函數的各種隱藏語法,包括 value、sep、end、file 和 flush。作者以清晰的範例和解說,讓從未接觸程式語言的人也能夠理解。而最後提到了訂閱房間的付費方式,並歡迎大家訂閱。文章內容較為詳細,提供了豐富的資訊。
Thumbnail
在 Python 中,dir() 函式用於列舉對象的所有屬性和方法。這包括對象的內建屬性、方法以及自定義的屬性和方法。以下是一個簡單的示例: 列舉所有屬性與方法 class MyClass: def __init__(self): self.attribute1 = 42
Thumbnail
在 Python 中,dir() 函式用於列舉對象的所有屬性和方法。這包括對象的內建屬性、方法以及自定義的屬性和方法。以下是一個簡單的示例: 列舉所有屬性與方法 class MyClass: def __init__(self): self.attribute1 = 42
Thumbnail
本文介紹了Python中函式引數的*args和**kwargs用法,通過*args處理可變數量的位置引數,通過**kwargs處理可變數量的關鍵字引數。不僅介紹了相應的語法和程式範例,還解釋了它們的順序問題和建議的慣例用法。
Thumbnail
本文介紹了Python中函式引數的*args和**kwargs用法,通過*args處理可變數量的位置引數,通過**kwargs處理可變數量的關鍵字引數。不僅介紹了相應的語法和程式範例,還解釋了它們的順序問題和建議的慣例用法。
Thumbnail
本文將介紹自定函式及應用,利用程式範例解釋為什麼要用到自定函式 自定函式好處當然就是,讓你的程式碼看起來比較簡潔,在重複使用到的程式碼區塊,可以包裝成函式,讓你重複使用它。
Thumbnail
本文將介紹自定函式及應用,利用程式範例解釋為什麼要用到自定函式 自定函式好處當然就是,讓你的程式碼看起來比較簡潔,在重複使用到的程式碼區塊,可以包裝成函式,讓你重複使用它。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News