day 20 02 模塊的導入

来源:https://www.cnblogs.com/wxm422562/archive/2019/04/30/10797729.html
-Advertisement-
Play Games

day 20 02 模塊的導入 運行結果: 9. 兩種不同導入的優缺點: (1)import demo demo:裡面的名字都會導入 會占很多記憶體 裡面的命名空間和不是模塊裡面的命名空間是分開的,所以外面如果有和demo裡面相同的變數名,也是不會相互影響 (2)from demo import 變數 ...


day 20 02  模塊的導入

1.
模塊:
就是一個文件:放置一些通用的有獨立功能程式或者函數.
比如建立一個py文件,文件名為:demo,文件裡面的內容:
demo模塊:
print('嗨大米')
def tx():
print('123')#函數沒有進行調用
2.
怎麼導入demo的
:首先import+文件名(文件名要符合命名規則)

1.import demo#此時就可以導入並且運行出demo的結果
2.demo.tx()#調用demo文件裡面的函數tx,此時寫好的函數就可以調用了
(每次要使用模塊裡面的參數函數名字,都得通過demo.名字才可以使用)
3.
每次import一個模塊所做的事情:

找到模塊(文件:有它自己的路徑)
創建這個模塊的命名空間
把文件中的名字都放到命名空間裡面

4.
假設demo裡面有一個參數money=100而在導入的模塊外面也有一個參數money=200

導入模塊後面的代碼:
import demo#此時就可以導入並且運行出demo的結果
money=200
demo.tx()#調用demo文件裡面的函數tx
print(demo.money)

#
當調用demo裡面的函數tx的時候,裡面的money是等於100的,因為在demo模塊裡面有自己的命名空間, 自己裡面有就使用自己文件裡面的,與外面的money=200不相關



demo模塊裡面的代碼:
print('嗨大米')
money = 100
def tx():
    print('123',money)

運行結果:

嗨大米
123 100
100
5.
為什麼一個模塊不會被重覆導入:
import sys
print(sys.modules.keys())
print(sys.path)
先從sys.modules裡面查看是否已經被導入(正是因為這樣查看是否被導入,被導入後,後面的都不會去看了,所以才不會被重覆導入)
#如果沒有被導入,就依據sys.path路徑去尋找模塊
#找到了就導入
#創建這個模塊的命名空間
#執行文件,把文件中的名字都放到命名空間裡面
 
6.
給一個模塊起別名:即重命名
import time as t
print(t.time())

為什麼要起別名:寫一個代碼可以在兩個地方都可以用,即代碼具有相容性
兩個資料庫:Oracle和mysql,對這兩個資料庫的使用的操作一般都是:
連接資料庫:
登入資料庫
增刪改查
關閉資料庫
oracle.connect  mysql.connect
同樣方式只是導入的模塊名字不一樣而已,此時給兩個資料庫起同一個別名就方便簡單的多:
if 資料庫=='oracle':
import oracle as db
elif 資料庫=='mysql':
import mysql as db

import time as t
time.time #報錯:重命名為t了,原來的time就不能用了

7.
寫程式的時候,應該先一次性把使用的模塊都在文件開頭依次導入:
內置模塊
擴展模塊:別人寫好的,需要安裝的
自定義的模塊:自己寫的
最好不要寫一點程式就導入一個模塊

import time,sys,os 一行可以導入多個模塊

8.
單獨從某個模塊當中導入一個方法或者是變數,就用:from 模塊 import 方法/變數


from time import sleep  #從time模塊當中導入sleep方法
sleep(1)  #直接調用sleep方法


from demo import tx
tx()
#此時的執行結果中的money還會使用demo模塊裡面函數tx外面的money=100,但是我只是調用了函數而已,為什麼會這樣呢:
因為在導入模塊的時候,都會一次將模塊裡面的代碼看過並且將參數保存起來,當使用到的時候會直接拿來用

9.

兩種不同導入的優缺點:

(1)import demo demo:裡面的名字都會導入 會占很多記憶體 裡面的命名空間和不是模塊裡面的命名空間是分開的,所以外面如果有和demo裡面相同的變數名,也是不會相互影響

(2)from demo import 變數名:不占記憶體 但是只是導入單一的變數或者方法,不方便後面使用,這裡的變數名如果在模塊外面存在一樣的變數名的話,就會依據外面的變數名為準,demo裡面的將不會存在



from demo import money,tx
print(money)
tx()
money=200
tx()#調用tx還是會繼續使用demo裡面的money,而不會使用200

運行結果:

嗨大米
123 100
100
100
123 100

10.

_all_ = ['demo模塊裡面的變數名/方法']與import*

demo模塊:

_all_ = ['tx']
   #這裡沒有money,下麵的demo.money就不能使用,即money沒有被導入,存在_all_裡面的才會被導入
print('嗨大米')
money = 100

def tx():
    print('123',money)

導入模塊後的代碼:

import sys
print(sys.path)
from demo import *  #如果demo模塊裡面沒有_all_ = ['tx']的話,這裡就會導入全部的變數名,但是此時有,就受到了限制,沒有在列表裡面的變數名或者方法都不會被導入
tx() #tx已經被導入
print(demo.money) #報錯,money沒有被導入

11.

_name_與_main_

如果在demo模塊裡面 print(_name_),此時的列印結果,_name_=_main_
當我們使用其他模塊,而在其他模塊裡面引用demo模塊的時候,這個模塊中的_name_=demo
我們可以用 if _name_=_main_,來判斷是否執行模塊裡面的某個獨立功能的函數,這樣在導入模塊的時候就不會全部都執行

12.
複習總結:
# 所有模塊導入儘量往上寫:且導入順序:
    內置模塊
    擴展模塊:需要安裝的都是擴展模塊
    自定義模塊
# import 模塊名
     #模塊名. 變數名 和本文件中的變數名完全不衝突
   import 模塊名 as 重命名的模塊名:提高代碼的相容性
   import 模塊1,模塊2


# from import
   from 模塊名 import 變數名
      直接使用 變數名 就可以完成操作
      如果本文件中有相同的變數名會發生衝突
   from 模塊名 import 變數名 as 重命名變數名
   from 模塊名 import 變數名1,變數名2..
   from 模塊名 import *
#    將模塊中的所有變數名都放到記憶體中
#     如果文件中有相同的變數名會發生衝突
#     from 模塊名 import * 和_all_是一對
       沒有這個變數,就會導入所有名字
       有_all_就導入_all_列表裡面的名字而已

# 包:一大堆模塊的集合

 

 

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在Java運行時的幾個數據區域中,程式計數器,虛擬機棧,本地方法棧3個區域隨著線程而生,隨線程而滅,因此這幾個區域的記憶體分配和回收具有確定性,不需要過多考慮垃圾回收問題,因為方法結束或者線程結束時,記憶體就回收了。但是方法區和堆區不一樣,一個介面或者實現類所需要的記憶體可能不一樣,一個方法的多個分支需要 ...
  • 本文分享了一下我對API的理解以及百度地圖API的使用舉例。 ...
  • 補充上期str尾碼小魔法: .swapcase() 將字元串大小寫互轉,小變大,大變小 .isnumeric() 判斷是否為數字,支持漢字,範圍廣 .isprinttable() 檢測變數中是否有無法顯示的字元,如\n\t存在則返回False .isspace() 判斷是否全部為空格,\t\n也可以 ...
  • 1. 查看Linux 版本 2. 安裝selemium 2.1 通過pip 安裝selenium,先安裝pip: 2.2 如果提示pip更新則執行如下命令: 2.3 pip安裝selenium 2.4 卸載Centos自帶的Mozilla firefox 2.5 下載、解壓firefox 2.6 創 ...
  • Python多繼承MRO 在Python2.1中,採用了經典類,使用深度優先演算法解析。 Python2.2中,引入了新式類,使用深度優先演算法和廣度優先演算法。 在Python2.3以後的版本中,經典類和新式類共存,使用了DFS演算法和C3演算法。 Python2中的經典類 Python3的新式類 C3演算法 ...
  • 題目 "P2711 小行星" 解析 這道題挺巧妙的,乍一看是空間上的,無從下手,稍微轉換一下就可以了。 看到題目,求消除這些行星的最少次數,就是求最小割,也就是求最大流,考慮怎樣建圖。 考慮當我們消去一個面上的所有點時,我們消去這個面後,這個面就不會再被消了, 也就是只能被消一次 ,比如我們消去與$ ...
  • 思路 既然$x$的數量那麼小,我們就可以先把每個$x$搜索一遍。 枚舉x的時候不需要把$a,b,c$全枚舉一遍,只要枚舉其中的兩個就可以枚舉到當前 ...
  • (劍指offer)輸入一個遞增排序的數組和一個數字S,在數組中查找兩個數,使得他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的。 思路:選定第一個數字,然後遍歷後面的數字求和並與S比較,需要n-1次,不行的話再選定第2,3,,,n個數字,需要n^2次,時間複雜度比較高。更簡單的方法 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...