<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 模塊和包 [python模塊與包的導入 - 滄瀾猛獸 - 博客園](https://www.cnblogs.com/charles1ee/p/6560277.html) ## 什么是模塊 一個模塊就是一個包含了python定義和聲明的文件,文件名就是模塊名字加上.py的后綴 >模塊名字不能是中文 >在Python中一切皆對象,所以模塊也是一個對象 ## 為什么要使用模塊 首先來說,運行python文件的方式一共有兩種: 1. 一種是`腳本`運行 1. 命令行 2. 編輯器 2. 一種就是`模塊`導入的方式 模塊化的程序是指將大型的,笨重的編程任務劃分成單獨的,小巧的更易于管理的子任務或者模塊的過程,然后在通過關聯來創造完成一個大型的任務 ### 模塊化的優點: 簡單性 可維護性 重用性 范圍 ![f56e5662.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/f56e5662.png) ## 部分知識點 ## 在import的過程中發生了那些事情 import一個模塊相當與執行了這個模塊 一個模塊不會被重復導入 如何去使用被導入模塊中的名字 > 模塊名.[模塊中的變量名字] 在import ![76f2ebb5.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/76f2ebb5.png) 1. 尋找模塊 2. 如果找到了,就開辟一塊空間,執行這個模塊 3. 把這個模塊中用到的名字都收錄到這個新開辟的空間中 4. 創建一個變量來引用這個模塊的空間 > 1. 模塊不會被重復導入 > 2. 模塊和文件之間的內存空間始終是隔離的 > 3. 模塊的名字必須是符合變量命名規范的 > ![7e5804fc.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/7e5804fc.png) ## 導入多個模塊 ![fd6fcace.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/fd6fcace.png) > `注意`: PEP8 不允許這個寫,必須一行導入模塊 > 導入的話 也需要按照 內置 第三方模塊 自定義模塊的順序 > ```python import os # 內置 import django # 第三方 import my_module # 自定義 ``` ## 給模塊 起別名 例如: ```python import my_module as m m.name ``` > 一旦起了別名 原名字就不可以使用了. > 所以這里面my_moudle.name 就不可以使用了 方便\簡化 用途 ![6e82f09f.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/6e82f09f.png) ## 模塊搜索路徑 ```python import ``` 目前正常的sys.path中除了內置\擴展模塊所在的路徑之外只有一個路徑是永遠不會出問題的 你執行執行的是這個文件所在的目錄 一個模塊是否能被導入,就看這個模塊所在的目錄在不在sys.path中 ![e78c10ff.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/e78c10ff.png) 這樣使用就可以使用了,雖然pycharm報錯但是可以執行 ![77f56e2b.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/77f56e2b.png) ## 兩種運行一個py文件的方式 1.直接運行 cmd pycharm 腳本 2.導入 模塊 `__name__` ==`__main__` ![fcc99e70.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/fcc99e70.png) ![1ead9eff.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/1ead9eff.png) 如果這個py文件既想被執行又可能被導入,這樣就把想打印的內容就放在if下載 以后開發的使用,把一執行就打印出來的動作,放在if下載 ## from ----import ![29810b98.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/29810b98.png) ![be0f4ab2.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/be0f4ab2.png) ![595a1ef9.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/595a1ef9.png) all 和* 配合使用 使用方式: `__all__` = ['xxxx','xxxx'] 如果使用了`__all__`參數,那么后面要跟一個列表,然后里面以字符串的形式寫入,代表著如果里面寫入了一些名字,那么誰在通過import test from * 調用,只會調用`__all__`里面的名字,那么沒有寫在里面的名字就不會被調用 ![b2d7e361.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/b2d7e361.png) 強制導入 仍然可以使用 ## 補充內容 ![5ca33664.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/5ca33664.png) pyc只能提高程序的啟動效率并不能提高程序的執行效率 ### 模塊的導入和修改 讀到內存中的內容 修改沒用 如下如 ![f8f8d0eb.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/f8f8d0eb.png) 就算再次導入 也是無效的 ![003c938f.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/003c938f.png) 如果一定要修改 ![ccf88253.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/ccf88253.png) 不要reload 不會這個用的 ### 模塊的循環使用 ![0a4509db.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/0a4509db.png) 程序設計問題 ![6e01325c.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/6e01325c.png) 就會出現 報錯 不能這樣 ![f4195596.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/f4195596.png) 即便是發生了循環引用,但沒有發生報錯,也會出現莫名的問題,所以絕對不用 ### dir模塊 可以獲取這個模塊中的所有名字 ![60f1b0c7.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/60f1b0c7.png) # 包 ## 從包當中導入模塊 **** ### 什么是包 含有一個__init__.py的文件夾就是一個包 包包中通常還有一些py文件 python2 沒有 `__init__`的文件 兩個文件不能互相導入 python3 無所謂 ### 導入方法一 import ![79791e23.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/79791e23.png) 點的左邊一定是個包 終點一定是個模塊,具體到某個模塊,不然就GG ### 導入方法二 from import ![86175f4f.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/86175f4f.png) 也可以這么寫 ![ea6db9a7.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/ea6db9a7.png) ## 直接導入包 ** ![c26dea8e.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/c26dea8e.png) ### 絕對導入 導入包的過程中發生了什么事情 相當于執行了這個包的`__init__`.py文件 sys.path中的內容 永遠是你當前工作的路徑 ### 導入包的相對導入 只能在包中使用 1 ![31e09822.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/31e09822.png) > `問題`:沒有辦法直接執行了 >說明: >**無論是lmport 形式還是from...import形式,凡是在導入語句中(而不是在使用時)遇到的帶點的,就說明這是包才有的導入語法,不能直接執行該文件了** > ![e9e3e3b4.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/e9e3e3b4.png) 作為一個包來說 包里面的文件導入都應該 考慮到 sys.path 的文件的問題 ## 一些說明 1. 關于包相關的導入語句也分為`import`和`from...import...`兩種,但是無論哪種,無論什么位置,在導入時都必須遵循一個原則:**`凡事在導入時帶點的,點的左邊必須是一個包,否則非法`**。可以帶有一連串的點,如item.subitem,subsubitem.但是都必須遵循這個原則 2. 對于導入后,在使用時就沒有這種限制了,點的左邊可以是包,模塊,函數類(他們都可以用點的方式調用自己的屬性) 3. 對于什么時候選擇from..import..的場景 如果我們想直接使用name那么就必須使用這個了 ```python import sys import glance.api.policy as gl print(sys.path) g1.get() ``` # 軟件的開發規范 ![410e88ef.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/410e88ef.png) ![988c96e9.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/988c96e9.png) ![19ccc77c.png](:storage/f89aeb57-736a-4373-b7d2-90a35ab6f911/19ccc77c.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看