在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

怎么在python中執行函數

python爬蟲知識分享 ? 來源:python爬蟲知識分享 ? 作者:python爬蟲知識分享 ? 2022-03-29 17:43 ? 次閱讀

方法一:直接調用函數運行

這種是最簡單且直觀的方法

deftask():
print("runningtask")

task()

如果是在類中,也是如此

classTask:
deftask(self):
print("runningtask")

Task().task()

方法二:使用偏函數來執行

在 functools 這個內置庫中,有一個 partial 方法專門用來生成偏函數。

defpower(x,n):
s=1
whilen>0:
n=n-1
s=s*x
returns

fromfunctoolsimportpartial

power_2=partial(power,n=2)
power_2(2)#output:4
power_2(3)#output:9

方法三:使用 eval 動態執行

如果你有需要動態執行函數的需要,可以使用 eval + 字符串 來執行函數。

importsys

defpre_task():
print("runningpre_task")

deftask():
print("runningtask")

defpost_task():
print("runningpost_task")

argvs=sys.argv[1:]

foractioninargvs:
eval(action)()

運行效果如下

$pythondemo.pypre_tasktaskpost_task
runningpre_task
runningtask
runningpost_task

方法四:使用 getattr 動態獲取執行

若把所有的函數是放在類中,并定義成靜態方法,那就不需要用 eval 了,接著使用 getattr 去獲取并調用。

importsys

classTask:
@staticmethod
defpre_task():
print("runningpre_task")

@staticmethod
deftask():
print("runningtask")

@staticmethod
defpost_task():
print("runningpost_task")

argvs=sys.argv[1:]

task=Task()

foractioninargvs:
func=getattr(task,action)
func()

方法五:使用類本身的字典

我們都知道對象都有一個__dict__()的魔法方法,存放所有對象的屬性及方法。

到這里,大家可以思考一下, 如果還是上面的代碼,我直接取實例的__dict__()能不能取到函數呢?

我相信很多人都會答錯。

上面我們定義的是靜態方法,靜態方法并沒有與實例進行綁定,因此靜態方法是屬于類的,但是不是屬于實例的,實例雖然有使用權(可以調用),但是并沒有擁有權。

因此要想通過__dict__獲取函數,得通過類本身Task,取出來的函數,調用方法和平時的也不一樣,必須先用__func__獲取才能調用。

importsys

classTask:
@staticmethod
defpre_task():
print("runningpre_task")

func=Task.__dict__.get("pre_task")
func.__func__()

方法六:使用 global() 獲取執行

上面放入類中,只是為了方便使用getattr的方法,其實不放入類中,也是可以的。此時你需要借助 globals() 或者 locals() ,它們本質上就是一個字典,你可以直接 get 來獲得函數。

importsys

defpre_task():
print("runningpre_task")

deftask():
print("runningtask")

defpost_task():
print("runningpost_task")

argvs=sys.argv[1:]

foractioninargvs:
globals().get(action)()

方法七:從文本中編譯運行

先定義一個字符串,內容是你函數的內容,比如上面的 pre_task ,再通過compile函數編進 編譯,轉化為字節代碼,最后再使用exec去執行它。

pre_task="""
print("runningpre_task")
"""
exec(compile(pre_task,'','exec'))

若你的代碼是放在一個 txt 文本中,雖然無法直接導入運行,但仍然可以通過 open 來讀取,最后使用 compile 函數編譯運行。

withopen('source.txt')asf:
source=f.read()
exec(compile(source,'source.txt','exec'))

方法八:使用 attrgetter 獲取執行

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

fromoperatorimportattrgetter

classPeople:
defspeak(self,dest):
print("Hello,%s"%dest)

p=People()
caller=attrgetter("speak")
caller(p)("明哥")

方法九:使用 methodcaller 執行

同樣還是 operator 這個內置庫,有一個 methodcaller 方法,使用它,也可以做到動態調用實例方法的效果。

fromoperatorimportmethodcaller

classPeople:
defspeak(self,dest):
print("Hello,%s"%dest)

caller=methodcaller("speak","明哥")
p=People()
caller(p)

以上就是函數執行的九種方法,很多方法,大家也都知道,但是也有幾個方法,幾乎是見不到的,尤其是后面使用 operator 庫的那兩種方法。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 函數
    +關注

    關注

    3

    文章

    4344

    瀏覽量

    62818
  • python
    +關注

    關注

    56

    文章

    4802

    瀏覽量

    84889
收藏 人收藏

    評論

    相關推薦

    邏輯異或運算符Python的用法

    Python的 ^ 符號實際上是一個按位異或運算符,用于對整數的二進制表示進行異或操作。 盡管如此,我們仍然可以通過一些方法來實現邏輯異或的功能,即當兩個布爾值不同時為真,相同時為假。這可以通過使用邏輯運算符來實現,而不是直接使用 ^ (因為 ^
    的頭像 發表于 11-19 09:46 ?259次閱讀

    Python常用函數大全

    Python 世界里,有一些寶藏函數和模塊,它們可以讓你編程更輕松、代碼更高效。這篇文章將帶你一一認識這些神器,讓你的開發生活瞬間輕松不少!
    的頭像 發表于 10-27 17:20 ?303次閱讀

    RTOS鉤子函數的用途及用法

    很多操作系統,都存在這樣一類API函數接口:HOOK函數(也叫鉤子函數)。
    的頭像 發表于 10-23 16:25 ?319次閱讀
    RTOS<b class='flag-5'>中</b>鉤子<b class='flag-5'>函數</b>的用途及用法

    Python多線程和多進程的區別

    Python作為一種高級編程語言,提供了多種并發編程的方式,其中多線程與多進程是最常見的兩種方式之一。本文中,我們將探討Python多線程與多進程的概念、區別以及如何使用線程池與進
    的頭像 發表于 10-23 11:48 ?447次閱讀
    <b class='flag-5'>Python</b><b class='flag-5'>中</b>多線程和多進程的區別

    PythonAI的應用實例

    Python人工智能(AI)領域的應用極為廣泛且深入,從基礎的數據處理、模型訓練到高級的應用部署,Python都扮演著至關重要的角色。以下將詳細探討Python
    的頭像 發表于 07-19 17:16 ?1249次閱讀

    HTTP的demo里面,回調函數執行的原因?

    HTTP的demo里面,我用下面這個函數注冊了一個回調函數,但是發現有時候正常執行有時候不執行,只是偶爾不
    發表于 07-10 08:23

    vscode esp-idf終端不能執行python命令怎么解決?

    vscode esp-idf終端不能執行python命令,先前重裝win10系統,安裝vscode,安裝esp-idf插件,選擇版本安裝,就能在終端執行idf.py。現在重裝系統,按照先前的方式安裝也不行了,是官方源問題,還是怎
    發表于 06-05 06:37

    Aurix Development Studio的某些函數(AppInit()、 blinkLED()、 NvmInit())會阻止runShellInterface() 的執行 ,為什么?

    Aurix Development Studio 遇到了一個問題,其中包含的某些函數(AppInit()、 blinkLED()、 NvmInit())會阻止
    發表于 05-22 07:41

    鴻蒙TypeScript入門學習第8天:【TypeScript 函數

    函數是一組一起執行一個任務的語句。 您可以把代碼劃分到不同的函數。如何劃分代碼到不同的函數
    的頭像 發表于 04-03 14:54 ?444次閱讀
    鴻蒙TypeScript入門學習第8天:【TypeScript <b class='flag-5'>函數</b>】

    函數發生器的作用,概念要點是什么

    概念。 理解迭代器和可迭代對象: 深入探討函數生成器之前,我們需要先了解迭代器和可迭代對象的概念。Python,迭代是一種訪問集合元素
    的頭像 發表于 02-23 16:01 ?571次閱讀

    output函數怎么用

    output 函數是一個通用的術語,并不特指某個具體的編程語言或軟件工具。 如果你使用 Python 編程語言,那么可能是指 print 函數。P
    的頭像 發表于 02-23 14:21 ?1301次閱讀

    verilogfor循環是串行執行還是并行執行

    Verilog,for循環是并行執行的。Verilog是一種硬件描述語言,用于描述和設計數字電路和系統。硬件系統,各個電路模塊是同時
    的頭像 發表于 02-22 16:06 ?3049次閱讀

    verilog function函數的用法

    Verilog 是一種硬件描述語言 (HDL),主要用于描述數字電子電路的行為和結構。 Verilog ,函數 (Function) 是一種用于執行特定任務并返回一個值的可重用代碼
    的頭像 發表于 02-22 15:49 ?5948次閱讀

    verilog函數和任務對比

    verilog,函數和任務均用來描述共同的代碼段,并且模式內任意位置被調用,提高代碼效率,讓代碼更加的直觀,提高代碼可讀性。但是實際
    的頭像 發表于 02-12 18:43 ?905次閱讀

    pythonopen函數的用法詳解

    pythonopen函數的用法詳解 Python的open()函數用于打開文件。它接受文件名
    的頭像 發表于 01-30 15:31 ?2198次閱讀
    主站蜘蛛池模板: 亚洲色图21p| 午夜大片男女免费观看爽爽爽尤物| 成年ssswww日本| 上一篇26p国模| 国产一区在线mmai| 亚洲bt欧美bt高清bt777| 天天操夜夜草| 成人网在线视频| 久久精品国产四虎| 日韩高清性爽一级毛片免费| 在线国产三级| 欧美特级午夜一区二区三区| 欧美性受xxxx| 操她射她| 免费在线观看理论片| 午夜一级福利| 12306影院午夜入口| 艹逼视频免费观看| 午夜视频观看| 国产亚洲欧美成人久久片| 欧美在线成人午夜影视| 天天干天天插天天操| 久久dvd| 女bbbbxxxx另类亚洲| v视界影院最新地址| 可以免费看黄色的网站| 人人草人| 欧美午夜精品久久久久久黑人| 国产精品视频久久久久久| 国产精品爽爽影院在线| 91亚洲国产成人久久精品网站| 欧美社区| 超h 高h 污肉1v1御书屋| 久久精品网站免费观看 | 人与禽一级一级毛片| 色多多官网| 日本有色视频| 欧美干色| 黄视频在线观看免费| 韩剧天堂| 日本aaaa|