Python -呼叫函数 function,副程式的写法与差异? 最后要不要加上 () ?

问题一:Python程式,DO_A与 DO_A()这两种写法有何差异?都是呼叫 DO_A函数

问题二:使用PyQt5.QtCore的QTimer。以下的写法,第二种却无法执行?

 

问题一:Python程式,DO_A与 DO_A()这两种写法有何差异?都是呼叫 DO_A函数

     第一种写法:
     print(f"Hello")
     DO_A

     第二种写法:
     print(f"Hello")
     DO_A()

答: 

在 Python 中,DO_A 和 DO_A() 这两种写法有本质上的差异

第一种写法 DO_A  (注意!后面没加上()) :这是指向函数物件的引用。当你这样写时,你并没有执行函数,而是将函数本身作为一个物件来处理。例如,你可以将它传递给其他函数或存储在变数中。

def DO_A():
    print("执行 DO_A 函数")

# 将函数引用存储在变数中
func = DO_A
print("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 函数,只是引用了它。


问题二:使用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函数没有传回值,所以后面不要加上 ()
 

 

我将思想传授他人, 他人之所得,亦无损于我之所有;

犹如一人以我的烛火点烛,光亮与他同在,我却不因此身处黑暗。----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/

 

Blog文章 "附的範例" 无法下载,请看 https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download

请看我们的「售后服务」範围(严格认定)。

...................................................................................................................................................... 

ASP.NET MVC  => .NET Core MVC 线上教学  ...... 第一天课程 完整内容 "免费"让您评估 / 试听

[远距教学、教学影片] ASP.NET (Web Form) 课程 上线了!MIS2000Lab.主讲   事先录好的影片,并非上课侧录!   观看时,有如「一对一」面对面讲课

 

 

 

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章

5 点赞(415) 阅读(67)