成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何在 Python 中調用函數?九種方法任你挑選

開發 后端
如果把所有的函數都放在類中,并定義為靜態方法,就可以使用getattr()get和調用它們。

1. 直接函數調用

這是最簡單、最直觀的方式:

  1. def test(): 
  2.     print("This is a test") 
  3. test() 

2. 使用partial()函數

在 的內置庫中functools,有一個專用于生成偏函數的偏函數partial。

  1. def power(x, n): 
  2.     s = 1 
  3.     while n > 0: 
  4.         nn = n - 1 
  5.         ss = s * x 
  6.     return s 
  7.  
  8.  
  9. from functools import partial 
  10.  
  11. power_2 = partial(power, n=2
  12. power_2(3)  # output: 9 
  13. power_2(4)  # output: 16 

3. 使用 eval()

如果需要動態執行函數,可以使用 eval + string 來執行函數。

  1. # demo.py 
  2. import sys 
  3.  
  4.  
  5. def pre_task(): 
  6.     print("running pre_task") 
  7.  
  8.  
  9. def task(): 
  10.     print("running task") 
  11.  
  12.  
  13. def post_task(): 
  14.     print("running post_task") 
  15.  
  16.  
  17. argvs = sys.argv[1:] 
  18.  
  19.  
  20. for action in argvs: 
  21.     eval(action)() 

執行:

  1. $ python demo.py pre_task task post_task 
  2. running pre_task 
  3. running task 
  4. running post_task 

4. 使用 getattr()

如果把所有的函數都放在類中,并定義為靜態方法,就可以使用getattr()get和調用它們。

  1. import sys 
  2.  
  3.  
  4. class Task: 
  5.     @staticmethod 
  6.     def pre_task(): 
  7.         print("running pre_task") 
  8.  
  9.  
  10.     @staticmethod 
  11.     def task(): 
  12.         print("running task") 
  13.  
  14.  
  15.     @staticmethod 
  16.     def post_task(): 
  17.         print("running post_task") 
  18.  
  19.  
  20. argvs = sys.argv[1:] 
  21.  
  22.  
  23. task = Task() 
  24.  
  25.  
  26. for action in argvs: 
  27.     func = getattr(task, action) 
  28.     func() 

5. 使用 __dict__()

我們都知道對象有一個__dict__()魔法方法,它存儲任何對象的屬性和方法。

您可以調用類方法使用__dict__.get

  1. import sys 
  2.  
  3.  
  4. class Task: 
  5.     @staticmethod 
  6.     def pre_task(): 
  7.         print("running pre_task") 
  8.  
  9.  
  10. func = Task.__dict__.get("pre_task") 
  11. func.__func__() 
  12. # Output 
  13. $ python /tmp/demo.py 
  14. running pre_task 

6. 使用 global()

在 的內置庫中functools,有一個專用于生成偏函數的偏函數partial。

  1. import sys 
  2.  
  3.  
  4. def pre_task(): 
  5.     print("running pre_task") 
  6.  
  7.  
  8. def task(): 
  9.     print("running task") 
  10.  
  11.  
  12. def post_task(): 
  13.     print("running post_task") 
  14.  
  15.  
  16. argvs = sys.argv[1:] 
  17.  
  18.  
  19. for action in argvs: 
  20.     globals().get(action)() 
  21. # Output 
  22. $ python /tmp/demo.py pre_task task post_task 
  23. running pre_task 
  24. running task 
  25. running post_task 

7. 從文本編譯和運行

您可以在字符串中定義您的函數,并使用該compile函數將其編譯為字節碼,然后用于exec執行它。

  1. pre_task = ""
  2. print("running pre_task") 
  3. """ 
  4. exec(compile(pre_task, '', 'exec')) 
  5. # Or from a text file 
  6. with open('source.txt') as f: 
  7.     source = f.read() 
  8.     exec(compile(source, 'source.txt', 'exec')) 

8. 使用attrgetter()

在 的內置庫中operator,有一個獲取屬性的方法,稱為attrgetter,獲取函數后執行。

  1. from operator import attrgetter 
  2.  
  3.  
  4. class People: 
  5.     def speak(self, dest): 
  6.         print("Hello, %s" %dest) 
  7.  
  8.  
  9. p = People() 
  10. caller = attrgetter("speak") 
  11. caller(p)("Tony") 
  12. # Output 
  13. $ python /tmp/demo.py 
  14. Hello, Tony 

9. 使用methodcaller()

還有一個methodcaller方法在operator

  1. from operator import methodcaller 
  2.  
  3.  
  4. class People: 
  5.     def speak(self, dest): 
  6.         print("Hello, %s" %dest) 
  7.  
  8.  
  9. caller = methodcaller("speak", "Tony") 
  10. p = People() 
  11. caller(p) 
  12. # Output 
  13. $ python /tmp/demo.py 
  14. Hello, Tony 

 

責任編輯:趙寧寧 來源: Python學會
相關推薦

2020-12-11 16:39:16

程序員編程網站

2021-08-18 11:55:25

Python函數代碼

2020-09-19 18:03:42

Docker

2017-11-03 10:40:25

Python復制文件方法

2009-06-17 13:19:50

Java調用DLL

2010-04-16 09:06:03

2022-01-16 09:30:34

Ansible自動化工具開源

2023-03-07 15:47:15

2010-04-07 15:47:32

Oracle 11g

2024-04-24 10:47:20

物聯網智能建筑

2010-04-27 15:39:54

Oracle 11g

2022-01-17 21:11:32

Windows 11Windows微軟

2011-07-22 12:58:16

服務器管理Android

2023-05-17 10:53:43

AICIO

2020-02-03 09:36:08

物聯網智慧城市IOT

2025-01-14 07:00:00

線程池ExecutorsJava

2023-12-21 14:32:51

Python函數

2010-07-14 10:53:20

Web應用

2010-11-03 09:21:27

2012-03-27 10:08:08

JavaScript
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩快播电影网 | 国产精品不卡一区 | 一区二区伦理电影 | 高清18麻豆 | avtt国产 | 色吧久久 | 亚洲精品一区二区三区丝袜 | 日日爱视频 | 国产欧美精品 | 国产一区二区三区www | 午夜免费精品视频 | 99久久久无码国产精品 | 午夜精品一区二区三区在线 | 亚洲精品一区二三区不卡 | 999精品视频在线观看 | 草草草影院 | 99精品国产一区二区青青牛奶 | 男人的天堂在线视频 | 久久久久九九九女人毛片 | 精品色 | 国产精品久久久久久一区二区三区 | 成人在线精品视频 | 国产精品久久久亚洲 | 久草久 | 久久av一区二区 | av国产精品毛片一区二区小说 | 日韩靠逼 | 国产激情一区二区三区 | 国产成人高清视频 | 国产三级网站 | 国产精品久久久久久 | 精品久久久久久久久久久 | 午夜精品一区二区三区免费视频 | 久久久久久久97 | 国产成人99久久亚洲综合精品 | 天天操天天干天天爽 | 亚洲一区二区三区四区在线观看 | 成人久久视频 | 九一视频在线观看 | 欧美日韩在线一区二区 | 国产高清一区二区三区 |