<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          輕松導(dǎo)入和執(zhí)行Python模塊的3種技巧

          共 3098字,需瀏覽 7分鐘

           ·

          2021-03-01 10:34



          引言


          作為一名程序員,你肯定希望與團(tuán)隊(duì)其他用戶共享你所創(chuàng)建的有用模塊。盡管你的模塊可能有用,但是如果其他人需要花費(fèi)大量精力來訪問模塊中的有用功能,則其他人將不會(huì)使用它。


          因此,如果想使用戶易于使用你的模塊,導(dǎo)入和運(yùn)行模塊的代碼應(yīng)該簡(jiǎn)短。本文將向你展示3種簡(jiǎn)化導(dǎo)入和執(zhí)行Python模塊的方法。


          導(dǎo)入


          場(chǎng)景


          假設(shè)我們有一個(gè)名為 utils.py 的文件,其中包含所有重要的函數(shù)和類

          def add_two(num: int):    return num + 2   
          def multiply_by_two(num: int): return num * 2
          a = 5

          在另一個(gè)腳本中,我們使用 from utils import * 從 utils.py 中導(dǎo)入所有內(nèi)容,除了變量 a 。那我們?cè)撛趺醋瞿兀?/span>


          解決方案


          要做到這點(diǎn)很容易,只要加入__all__ = [“add_two”, “multiply_by_two”]即可。使用 import * 時(shí),__all__ 中指定的函數(shù)、類和包將被導(dǎo)入。

          __all__ = ["add_two", "multiply_by_two"]
          def add_two(num: int): return num + 2
          def multiply_by_two(num: int): return num * 2
          a = 5

          現(xiàn)在嘗試在另一個(gè)腳本中使用 import *

          from utils import *
          num = 3 print(add_two(num))print(multiply_by_two(num))print(a)
          56Traceback (most recent call last):  File "main.py", line 6, in <module>    print(a)NameError: name 'a' is not defined

          Cool!這個(gè)錯(cuò)誤告訴我們,只從 utils.py 中導(dǎo)入了 add_two 和 multiply_by_two ,而并未導(dǎo)入變量 a 。


          合并多個(gè)文件


          場(chǎng)景


          想象一下我們目錄中文件的結(jié)構(gòu)如下:

          .├── data_modules│   ├── load_data.py│   └── process_data.py└── main.py

          load_data.py 如下所示:

          class DataLoader:    def __init__(self, data_dir: str):        self.data_dir = data_dir
          def load_data(self): print(f"Loading data from {self.data_dir}")

          process _ data.py 如下所示:

          class DataProcessor:     def __init__(self, data_name: str):        self.data_name = data_name        def process_data(self):        print(f"Processing {self.data_name}")

          要使用來自兩個(gè)不同文件的類,我們需要從每個(gè)文件導(dǎo)入每個(gè)類。

          from data_modules.load_data import DataLoaderfrom data_modules.process_data import DataProcessor
          data_loader = DataLoader('data/')data_loader.load_data()
          data_processor = DataProcessor('data1')data_processor.process_data()

          這個(gè)方法很好,但是使用2個(gè)導(dǎo)入語句是很繁瑣的。有沒有一種方法,我們可以把兩個(gè)導(dǎo)入語句變成一個(gè)導(dǎo)入語句,就像下面這樣。

          from data_modules import DataLoader, DataProcessor

          解決方案


          在 data _ modules 目錄下插入 _ init _. py 文件可以很容易地解決這個(gè)問題:

          touch data_modules/__init__.py

          然后將前面提到的 import 語句插入到 _ init _. py 文件中:

          from .load_data import DataLoaderfrom .process_data import DataProcessor

          我們?cè)谶@里使用一個(gè) "." ,因?yàn)?load_data.py 和 _init _. py 在同一個(gè)目錄中。


          現(xiàn)在,讓我們嘗試從 data_modules 導(dǎo)入 DataLoader 和 DataProcessor 。

          from data_modules import DataLoader, DataProcessor
          data_loader = DataLoader('data/')data_loader.load_data()
          data_processor = DataProcessor('data1')data_processor.process_data()
          Loading data from data/Processing data1

          太棒了! 成功了!


          像腳本一樣運(yùn)行目錄


          場(chǎng)景


          我們的目錄是這樣的:

          .└── data_modules    ├── __init__.py    ├── load_data.py    ├── main.py    └── process_data.py

          當(dāng)我們運(yùn)行 main.py 的時(shí)候是這樣的:

          $ python data_modules/main.py

          我們可能希望簡(jiǎn)化用戶或隊(duì)友運(yùn)行 main.py 代碼的步驟,只需運(yùn)行父目錄:

          $ python data_modules

          這比運(yùn)行 data_modules/main.py 更好,因?yàn)樗蹋脩舨恍枰?data_modules 中有哪些文件。


          我們?cè)趺床拍茏龅侥兀?/span>


          解決方案


          這時(shí),__main__.py 就派上用場(chǎng)了。只需將運(yùn)行頂級(jí)目錄時(shí)要運(yùn)行的腳本更改為__main__.py  即可。在我們的例子中,我們需要將 main.py 變?yōu)?span style="color: rgb(41, 41, 41);background-color: rgb(242, 242, 242);">__main__.py

          # Rename main.py to __main__.py$ mv data_modules/main.py data_modules/__main__.py

          我們的新目錄將如下所示

          .└── data_modules    ├── __init__.py    ├── load_data.py    ├── __main__.py    └── process_data.py

          現(xiàn)在讓我們測(cè)試下

          $ python data_modulesLoading data from data/Processing data1

          效果非常好!


          總結(jié)


          在本文中,我們了解了如何讓你和那些使用你的軟件包的人更容易使用它。希望可以幫到你~

          ·  END  ·


          HAPPY LIFE


          瀏覽 48
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中日韩欧美视频操逼 | 欧美精品操B | www日| 欧美性爱黑人大屌 | 在线高清无吗一本道 |