91aaa在线国内观看,亚洲AV午夜福利精品一区二区,久久偷拍人视频,久久播这里有免费视播

<strong id="fvuar"></strong>

  • <sub id="fvuar"><dl id="fvuar"><em id="fvuar"></em></dl></sub>

    1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

      手機(jī)站
      千鋒教育

      千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

      千鋒教育

      掃一掃進(jìn)入千鋒手機(jī)站

      領(lǐng)取全套視頻
      千鋒教育

      關(guān)注千鋒學(xué)習(xí)站小程序
      隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

      當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > 使用 Python 函數(shù)進(jìn)行模塊化

      使用 Python 函數(shù)進(jìn)行模塊化

      來(lái)源:千鋒教育
      發(fā)布人:xqq
      時(shí)間: 2023-11-07 05:35:08 1699306508

      你是否對(duì)函數(shù)、類(lèi)、方法、庫(kù)和模塊等花哨的編程術(shù)語(yǔ)感到困惑?你是否在與變量作用域斗爭(zhēng)?無(wú)論你是自學(xué)成才的還是經(jīng)過(guò)正式培訓(xùn)的程序員,代碼的模塊化都會(huì)令人困惑。但是類(lèi)和庫(kù)鼓勵(lì)模塊化代碼,因?yàn)槟K化代碼意味著只需構(gòu)建一個(gè)多用途代碼塊集合,就可以在許多項(xiàng)目中使用它們來(lái)減少編碼工作量。換句話(huà)說(shuō),如果你按照本文對(duì)Python函數(shù)的研究,你將找到更聰明的工作方法,這意味著更少的工作。

      本文假定你對(duì)Python很熟(LCTT譯注:稍微熟悉就可以),并且可以編寫(xiě)和運(yùn)行一個(gè)簡(jiǎn)單的腳本。如果你還沒(méi)有使用過(guò)Python,請(qǐng)首先閱讀我的文章:Python簡(jiǎn)介。

      函數(shù)

      函數(shù)是邁向模塊化過(guò)程中重要的一步,因?yàn)樗鼈兪切问交闹貜?fù)方法。如果在你的程序中,有一個(gè)任務(wù)需要反復(fù)執(zhí)行,那么你可以將代碼放入一個(gè)函數(shù)中,根據(jù)需要隨時(shí)調(diào)用該函數(shù)。這樣,你只需編寫(xiě)一次代碼,就可以隨意使用它。

      以下一個(gè)簡(jiǎn)單函數(shù)的示例:

      #!/usr/bin/envpython3

      importtime

      defTimer():

      print("Timeis"+str(time.time()))

      創(chuàng)建一個(gè)名為mymodularity的目錄,并將以上函數(shù)代碼保存為該目錄下的timestamp.py。

      除了這個(gè)函數(shù),在mymodularity目錄中創(chuàng)建一個(gè)名為_(kāi)_init__.py的文件,你可以在文件管理器或bashshell中執(zhí)行此操作:

      $touchmymodularity/__init__.py

      現(xiàn)在,你已經(jīng)創(chuàng)建了屬于你自己的Python庫(kù)(Python中稱(chēng)為“模塊”),名為mymodularity。它不是一個(gè)特別有用的模塊,因?yàn)樗龅闹皇菍?dǎo)入time模塊并打印一個(gè)時(shí)間戳,但這只是一個(gè)開(kāi)始。

      要使用你的函數(shù),像對(duì)待任何其他Python模塊一樣對(duì)待它。以下是一個(gè)小應(yīng)用,它使用你的mymodularity軟件包來(lái)測(cè)試Pythonsleep()函數(shù)的準(zhǔn)確性。將此文件保存為sleeptest.py,注意要在mymodularity文件夾之外,因?yàn)槿绻銓⑺4嬖趍ymodularity里面,那么它將成為你的包中的一個(gè)模塊,你肯定不希望這樣。

      #!/usr/bin/envpython3

      importtime

      frommymodularityimporttimestamp

      print("TestingPythonsleep()...")

      #modularity

      timestamp.Timer()

      time.sleep(3)

      timestamp.Timer()

      在這個(gè)簡(jiǎn)單的腳本中,你從mymodularity包中調(diào)用timestamp模塊兩次。從包中導(dǎo)入模塊時(shí),通常的語(yǔ)法是從包中導(dǎo)入你所需的模塊,然后使用模塊名稱(chēng)+一個(gè)點(diǎn)+要調(diào)用的函數(shù)名(例如timestamp.Timer())。

      你調(diào)用了兩次Timer()函數(shù),所以如果你的timestamp模塊比這個(gè)簡(jiǎn)單的例子復(fù)雜些,那么你將節(jié)省大量重復(fù)代碼。

      保存文件并運(yùn)行:

      $python3./sleeptest.py

      TestingPythonsleep()...

      Timeis1560711266.1526039

      Timeis1560711269.1557732

      根據(jù)測(cè)試,Python中的sleep函數(shù)非常準(zhǔn)確:在三秒鐘等待之后,時(shí)間戳成功且正確地增加了3,在微秒單位上差距很小。

      Python庫(kù)的結(jié)構(gòu)看起來(lái)可能令人困惑,但其實(shí)它并不是什么魔法。Python被編程為一個(gè)包含Python代碼的目錄,并附帶一個(gè)__init__.py文件,那么這個(gè)目錄就會(huì)被當(dāng)作一個(gè)包,并且Python會(huì)首先在當(dāng)前目錄中查找可用模塊。這就是為什么語(yǔ)句frommymodularityimporttimestamp有效的原因:Python在當(dāng)前目錄查找名為mymodularity的目錄,然后查找timestamp.py文件。

      你在這個(gè)例子中所做的功能和以下這個(gè)非模塊化的版本是一樣的:

      #!/usr/bin/envpython3

      importtime

      frommymodularityimporttimestamp

      print("TestingPythonsleep()...")

      #nomodularity

      print("Timeis"+str(time.time()))

      time.sleep(3)

      print("Timeis"+str(time.time()))

      對(duì)于這樣一個(gè)簡(jiǎn)單的例子,其實(shí)沒(méi)有必要以這種方式編寫(xiě)測(cè)試,但是對(duì)于編寫(xiě)自己的模塊來(lái)說(shuō),優(yōu)秀的實(shí)踐是你的代碼是通用的,可以將它重用于其他項(xiàng)目。

      通過(guò)在調(diào)用函數(shù)時(shí)傳遞信息,可以使代碼更通用。例如,假設(shè)你想要使用模塊來(lái)測(cè)試的不是系統(tǒng)的sleep函數(shù),而是用戶(hù)自己實(shí)現(xiàn)的sleep函數(shù),更改timestamp代碼,使它接受一個(gè)名為msg的傳入變量,它將是一個(gè)字符串,控制每次調(diào)用timestamp時(shí)如何顯示:

      #!/usr/bin/envpython3

      importtime

      #更新代碼

      defTimer(msg):

      print(str(msg)+str(time.time()))

      現(xiàn)在函數(shù)比以前更抽象了。它仍會(huì)打印時(shí)間戳,但是它為用戶(hù)打印的內(nèi)容msg還是未定義的。這意味著你需要在調(diào)用函數(shù)時(shí)定義它。

      Timer函數(shù)接受的msg參數(shù)是隨便命名的,你可以使用參數(shù)m、message或text,或是任何對(duì)你來(lái)說(shuō)有意義的名稱(chēng)。重要的是,當(dāng)調(diào)用timestamp.Timer函數(shù)時(shí),它接收一個(gè)文本作為其輸入,將接收到的任何內(nèi)容放入msg變量中,并使用該變量完成任務(wù)。

      以下是一個(gè)測(cè)試測(cè)試用戶(hù)正確感知時(shí)間流逝能力的新程序:

      #!/usr/bin/envpython3

      frommymodularityimporttimestamp

      print("PresstheRETURNkey.Countto3,andpressRETURNagain.")

      input()

      timestamp.Timer("Startedtimerat")

      print("Countto3...")

      input()

      timestamp.Timer("Yousleptuntil")

      將你的新程序保存為response.py,運(yùn)行它:

      $python3./response.py

      PresstheRETURNkey.Countto3,andpressRETURNagain.

      Startedtimerat1560714482.3772075

      Countto3...

      Yousleptuntil1560714484.1628013

      函數(shù)和所需參數(shù)

      新版本的timestamp模塊現(xiàn)在需要一個(gè)msg參數(shù)。這很重要,因?yàn)槟愕牡谝粋€(gè)應(yīng)用程序?qū)o(wú)法運(yùn)行,因?yàn)樗鼪](méi)有將字符串傳遞給timestamp.Timer函數(shù):

      $python3./sleeptest.py

      TestingPythonsleep()...

      Traceback(mostrecentcalllast):

      File"./sleeptest.py",line8,in

      timestamp.Timer()

      TypeError:Timer()missing1requiredpositionalargument:'msg'

      你能修復(fù)你的sleeptest.py應(yīng)用程序,以便它能夠與更新后的模塊一起正確運(yùn)行嗎?

      變量和函數(shù)

      通過(guò)設(shè)計(jì),函數(shù)限制了變量的范圍。換句話(huà)說(shuō),如果在函數(shù)內(nèi)創(chuàng)建一個(gè)變量,那么這個(gè)變量只在這個(gè)函數(shù)內(nèi)起作用。如果你嘗試在函數(shù)外部使用函數(shù)內(nèi)部出現(xiàn)的變量,就會(huì)發(fā)生錯(cuò)誤。

      下面是對(duì)response.py應(yīng)用程序的修改,嘗試從timestamp.Timer()函數(shù)外部打印msg變量:

      #!/usr/bin/envpython3

      frommymodularityimporttimestamp

      print("PresstheRETURNkey.Countto3,andpressRETURNagain.")

      input()

      timestamp.Timer("Startedtimerat")

      print("Countto3...")

      input()

      timestamp.Timer("Yousleptfor")

      print(msg)

      試著運(yùn)行它,查看錯(cuò)誤:

      $python3./response.py

      PresstheRETURNkey.Countto3,andpressRETURNagain.

      Startedtimerat1560719527.7862902

      Countto3...

      Yousleptfor1560719528.135406

      Traceback(mostrecentcalllast):

      File"./response.py",line15,in

      print(msg)

      NameError:name'msg'isnotdefined

      應(yīng)用程序返回一個(gè)NameError消息,因?yàn)闆](méi)有定義msg。這看起來(lái)令人困惑,因?yàn)槟憔帉?xiě)的代碼定義了msg,但你對(duì)代碼的了解比Python更深入。調(diào)用函數(shù)的代碼,不管函數(shù)是出現(xiàn)在同一個(gè)文件中,還是打包為模塊,都不知道函數(shù)內(nèi)部發(fā)生了什么。一個(gè)函數(shù)獨(dú)立地執(zhí)行它的計(jì)算,并返回你想要它返回的內(nèi)容。這其中所涉及的任何變量都只是本地的:它們只存在于函數(shù)中,并且只存在于函數(shù)完成其目的所需時(shí)間內(nèi)。

      Return語(yǔ)句

      如果你的應(yīng)用程序需要函數(shù)中特定包含的信息,那么使用return語(yǔ)句讓函數(shù)在運(yùn)行后返回有意義的數(shù)據(jù)。

      時(shí)間就是金錢(qián),所以修改timestamp函數(shù),以使其用于一個(gè)虛構(gòu)的收費(fèi)系統(tǒng):

      #!/usr/bin/envpython3

      importtime

      defTimer(msg):

      print(str(msg)+str(time.time()))

      charge=.02

      returncharge

      現(xiàn)在,timestamp模塊每次調(diào)用都收費(fèi)2美分,但最重要的是,它返回每次調(diào)用時(shí)所收取的金額。

      以下一個(gè)如何使用return語(yǔ)句的演示:

      #!/usr/bin/envpython3

      frommymodularityimporttimestamp

      print("PressRETURNforthetime(costs2cents).")

      print("PressQRETURNtoquit.")

      total=0

      whileTrue:

      kbd=input()

      ifkbd.lower()=="q":

      print("Youowe$"+str(total))

      exit()

      else:

      charge=timestamp.Timer("Timeis")

      total=total+charge

      在這個(gè)示例代碼中,變量charge為timestamp.Timer()函數(shù)的返回,它接收函數(shù)返回的任何內(nèi)容。在本例中,函數(shù)返回一個(gè)數(shù)字,因此使用一個(gè)名為total的新變量來(lái)跟蹤已經(jīng)進(jìn)行了多少更改。當(dāng)應(yīng)用程序收到要退出的信號(hào)時(shí),它會(huì)打印總花費(fèi):

      $python3./charge.py

      PressRETURNforthetime(costs2cents).

      PressQRETURNtoquit.

      Timeis1560722430.345412

      Timeis1560722430.933996

      Timeis1560722434.6027434

      Timeis1560722438.612629

      Timeis1560722439.3649364

      q

      Youowe$0.1

      內(nèi)聯(lián)函數(shù)

      函數(shù)不必在單獨(dú)的文件中創(chuàng)建。如果你只是針對(duì)一個(gè)任務(wù)編寫(xiě)一個(gè)簡(jiǎn)短的腳本,那么在同一個(gè)文件中編寫(xiě)函數(shù)可能更有意義。唯一的區(qū)別是你不必導(dǎo)入自己的模塊,但函數(shù)的工作方式是一樣的。以下是時(shí)間測(cè)試應(yīng)用程序的最新迭代:

      #!/usr/bin/envpython3

      importtime

      total=0

      defTimer(msg):

      print(str(msg)+str(time.time()))

      charge=.02

      returncharge

      print("PressRETURNforthetime(costs2cents).")

      print("PressQRETURNtoquit.")

      whileTrue:

      kbd=input()

      ifkbd.lower()=="q":

      print("Youowe$"+str(total))

      exit()

      else:

      charge=Timer("Timeis")

      total=total+charge

      它沒(méi)有外部依賴(lài)(Python發(fā)行版中包含time模塊),產(chǎn)生與模塊化版本相同的結(jié)果。它的優(yōu)點(diǎn)是一切都位于一個(gè)文件中,缺點(diǎn)是你不能在其他腳本中使用Timer()函數(shù),除非你手動(dòng)復(fù)制和粘貼它。

      全局變量

      在函數(shù)外部創(chuàng)建的變量沒(méi)有限制作用域,因此它被視為全局變量。

      全局變量的一個(gè)例子是在charge.py中用于跟蹤當(dāng)前花費(fèi)的total變量。total是在函數(shù)之外創(chuàng)建的,因此它綁定到應(yīng)用程序而不是特定函數(shù)。

      應(yīng)用程序中的函數(shù)可以訪問(wèn)全局變量,但要將變量傳入導(dǎo)入的模塊,你必須像發(fā)送msg變量一樣將變量傳入模塊。

      全局變量很方便,因?yàn)樗鼈兯坪蹼S時(shí)隨地都可用,但也很難跟蹤它們,很難知道哪些變量不再需要了但是仍然在系統(tǒng)內(nèi)存中停留(盡管Python有非常好的垃圾收集機(jī)制)。

      但是,全局變量很重要,因?yàn)椴皇撬械淖兞慷伎梢允呛瘮?shù)或類(lèi)的本地變量?,F(xiàn)在你知道了如何向函數(shù)傳入變量并獲得返回,事情就變得容易了。

      以上內(nèi)容為大家介紹了使用Python函數(shù)進(jìn)行模塊化,希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。http://www.jsszjs.cn/

      聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
      10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
      請(qǐng)您保持通訊暢通,專(zhuān)屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
      免費(fèi)領(lǐng)取
      今日已有369人領(lǐng)取成功
      劉同學(xué) 138****2860 剛剛成功領(lǐng)取
      王同學(xué) 131****2015 剛剛成功領(lǐng)取
      張同學(xué) 133****4652 剛剛成功領(lǐng)取
      李同學(xué) 135****8607 剛剛成功領(lǐng)取
      楊同學(xué) 132****5667 剛剛成功領(lǐng)取
      岳同學(xué) 134****6652 剛剛成功領(lǐng)取
      梁同學(xué) 157****2950 剛剛成功領(lǐng)取
      劉同學(xué) 189****1015 剛剛成功領(lǐng)取
      張同學(xué) 155****4678 剛剛成功領(lǐng)取
      鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
      董同學(xué) 138****2867 剛剛成功領(lǐng)取
      周同學(xué) 136****3602 剛剛成功領(lǐng)取
      相關(guān)推薦HOT
      python隊(duì)列Queue

      QueueQueue是python標(biāo)準(zhǔn)庫(kù)中的線(xiàn)程安全的隊(duì)列(FIFO)實(shí)現(xiàn),提供了一個(gè)適用于多線(xiàn)程編程的先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),即隊(duì)列,用來(lái)在生產(chǎn)者和消費(fèi)者線(xiàn)程...詳情>>

      2023-11-07 08:24:21
      Python和PHP的區(qū)別

      從開(kāi)發(fā)的角度來(lái)看,PHP是面向WEB的語(yǔ)言。PHP應(yīng)用程序更像是一組單獨(dú)的腳本,甚至只是一個(gè)單獨(dú)入口。而Python是多用途語(yǔ)言,也可以用于WEB開(kāi)發(fā),...詳情>>

      2023-11-07 08:02:45
      Python爬蟲(chóng)原理

      簡(jiǎn)單來(lái)說(shuō)互聯(lián)網(wǎng)是由一個(gè)個(gè)站點(diǎn)和網(wǎng)絡(luò)設(shè)備組成的大網(wǎng),我們通過(guò)瀏覽器訪問(wèn)站點(diǎn),站點(diǎn)把HTML、JS、CSS代碼返回給瀏覽器,這些代碼經(jīng)過(guò)瀏覽器解析...詳情>>

      2023-11-07 07:33:56
      使用Cython為Python編寫(xiě)更快的C擴(kuò)展

      使用Python很有趣,但有時(shí),用它編寫(xiě)的程序可能很慢。所有的運(yùn)行時(shí)動(dòng)態(tài)調(diào)度會(huì)帶來(lái)很大的代價(jià):有時(shí)它比用C或Rust等系統(tǒng)語(yǔ)言編寫(xiě)的等效代碼慢10...詳情>>

      2023-11-07 07:23:08
      Python字符串連接

      字符串是Python中常用的數(shù)據(jù)類(lèi)型,在開(kāi)發(fā)過(guò)程中可以對(duì)字符創(chuàng)進(jìn)行截取并與其他字符創(chuàng)進(jìn)行連接。下面小編整理了5種方法完成Python字符創(chuàng)的連接!加...詳情>>

      2023-11-07 06:47:08