国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python進階(二)導(dǎo)入import 機制 | 導(dǎo)入import 用法 工作原理全解析

這篇具有很好參考價值的文章主要介紹了python進階(二)導(dǎo)入import 機制 | 導(dǎo)入import 用法 工作原理全解析。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


參考《Python應(yīng)該如何導(dǎo)入(import)模塊及包》梳理

1. 整體概念基本介紹

雖然簡簡單單的導(dǎo)入import,其實涉及到很多的知識

我們導(dǎo)入往往是一個包,或者包內(nèi)的一個模塊,或者一個模塊內(nèi)的某些函數(shù)變量等

所以我們先對,包,模塊,函數(shù)、變量做一個簡單介紹

他們的包含關(guān)系是

包package(往往是一個目錄/文件夾)》模塊module(往往是一個文件)》變量,函數(shù),類

直觀來說,一個包往往包含多個模塊文件或者一些子包,每個模塊文件包含多個變量和函數(shù)方法,類等

下面分別是更詳細(xì)的介紹

1.1 包package

通常包是一個目錄

為了將目錄視為包,必須在其內(nèi)部包含一個名為 __init__.py 的文件。__init__.py 文件可以為空,也可以包含包的初始化代碼。

1.2 模塊 module

通常模塊為一個文件,直接使用import來導(dǎo)入就好了??梢宰鳛閙odule的文件類

一個模塊內(nèi)往往包括多個變量,函數(shù)

當(dāng)然實際上可以導(dǎo)入的四種包括

  • 使用Python寫的程序( .py文件)
  • C或C++擴展(已編譯為共享庫或DLL文件)
  • 包(包含多個模塊)
  • 內(nèi)建模塊(使用C編寫并已鏈接到Python解釋器內(nèi))

2 基本語法

這里涉及到名字空間的概念,具體可以看我前一篇博客Python進階(一)名字空間 | 超詳細(xì)名字空間解析 內(nèi)置 全局 局部 調(diào)試查看-CSDN博客
名字空間簡單理解就是一個變量和值的映射關(guān)系

2.1 import直接使用

import直接導(dǎo)入模塊,會創(chuàng)建一個新的導(dǎo)入模塊名字空間,當(dāng)前文件會引用這個導(dǎo)入模塊的名字空間

import module_name

2.2 from 及其用法

我們可以使用 from 關(guān)鍵字指定需要引入的具體內(nèi)容:

使用from語句可以將模塊中的對象直接導(dǎo)入到當(dāng)前的名字空間. from語句不創(chuàng)建一個到模塊名字空間的引用,而是把被導(dǎo)入模塊的一個或多個對象直接放入當(dāng)前的名字空間:

from module_name import function_name, class_name

from語句支持逗號分割的對象,也可以使用星號*代表模塊中下劃線開頭的所有對象(注意這里導(dǎo)入是不會導(dǎo)入單下劃線開頭的變量)

from socket import *   # 載入所有對象到當(dāng)前名字空間  

如果一個模塊如果定義有列表__all__,則from module import * 語句只能導(dǎo)入__all__列表中存在的對象。

# module: foo.py  
__all__ = [ 'bar', 'spam' ]     # 定義使用 `*` 可以導(dǎo)入的對象  

3.1 as的用法

也可以使用 as 關(guān)鍵字給模塊或內(nèi)容起別名:

import module_name as alias

另外, as 也可以和 from 聯(lián)合使用:

from socket import gethostname as hostname  
h = hostname()

3 工作原理

3.1 搜尋

現(xiàn)在有一個問題,就是導(dǎo)入的時候解釋器會去哪里搜尋模塊?

當(dāng)我們使用 import 語句時,Python 解釋器會在一系列目錄中搜索模塊(sys.path列表)這些目錄包括當(dāng)前目錄(包含運行腳本的目錄)、內(nèi)置模塊目錄、環(huán)境變量 PYTHONPATH 中指定的目錄等。

一個典型的sys.path 列表的值:

Linux:
[’’, ‘/usr/local/lib/python2.0’,
‘/usr/local/lib/python2.0/plat-sunos5’,
‘/usr/local/lib/python2.0/lib-tk’,
‘/usr/local/lib/python2.0/lib-dynload’,
‘/usr/local/lib/python2.0/site-packages’]

Windows:
[’’, ‘C:\WINDOWS\system32\python24.zip’, ‘C:\Documents and Settings\weizhong’, ‘C:\Python24\DLLs’, ‘C:\Python24\lib’, ‘C:\Python24\lib\plat-win’, ‘C:\Python24\lib\lib-tk’, ‘C:\Python24\Lib\site-packages\pythonwin’, ‘C:\Python24’, ‘C:\Python24\lib\site-packages’, ‘C:\Python24\lib\site-packages\win32’, ‘C:\Python24\lib\site-packages\win32\lib’, ‘C:\Python24\lib\site-packages\wx-2.6-msw-unicode’]

空字符串 代表當(dāng)前目錄. 要加入新的搜索路徑,只需要將這個路徑加入到這個列表.

3.2 執(zhí)行

假設(shè)某源代碼文件初次引入某一個模塊

執(zhí)行的具體步驟如下

  • 1.為源代碼文件中定義的對象創(chuàng)建一個模塊名字空間,通過這個名字空間可以訪問到模塊中定義的函數(shù)及變量。
  • 2.在新創(chuàng)建的名字空間里完整執(zhí)行模塊文件和源代碼文件。
  • 3.創(chuàng)建一個名為源代碼文件的對象,該對象引用模塊的名字空間,這樣就可以通過這個對象訪問模塊中的函數(shù)及變量,如:
import spam           # 導(dǎo)入并運行模塊 spam  
print (spam.a)          # 訪問模塊 spam 的屬性  
spam.foo()  
c = spam.bar()

import語句可以在程序的任何位置使用,你可以在程序中多次導(dǎo)入同一個模塊,但模塊中的代碼 僅僅 在該模塊被首次導(dǎo)入時執(zhí)行。后面的import語句只是簡單的創(chuàng)建一個到模塊名字空間的引用而已。

這里我們注意到上面的第2點,一旦模塊被導(dǎo)入,他的代碼就會被執(zhí)行一遍,但有些時候我不想讓模塊完整被執(zhí)行,那么該怎么辦呢?

3.3 避免導(dǎo)入模塊代碼執(zhí)行

當(dāng)一個模塊被導(dǎo)入時,它的代碼會被執(zhí)行一次。如果你希望某些代碼僅在模塊被直接運行時而不是被導(dǎo)入時執(zhí)行,可以使用 if __name__ == "__main__": 來進行條件判斷。

if __name__ == "__main__":
    # 這里的代碼僅在模塊被直接運行時執(zhí)行

如下所示是一個詳細(xì)的例子

假設(shè)我們有一個名為 example_module.py 的模塊文件,內(nèi)容如下:

# example_module.py

def add_numbers(a, b):
    return a + b

# 如果模塊被直接運行,則執(zhí)行以下代碼(比如直接運行python example_module.py)
if __name__ == "__main__":
    x = 5
    y = 10
    result = add_numbers(x, y)
    print(f"The sum of {x} and {y} is: {result}")

在這個例子中,example_module.py 定義了一個簡單的函數(shù) add_numbers 用于相加兩個數(shù)字。然后,在模塊的末尾,使用 if __name__ == "__main__": 來判斷模塊是被導(dǎo)入還是被直接運行。如果模塊被直接運行(比如直接運行python example_module.py),就會執(zhí)行一些特定的代碼,例如計算兩個數(shù)字的和并打印結(jié)果。

現(xiàn)在,如果我們在另一個腳本another_script.py中導(dǎo)入這個模塊,if __name__ == "__main__": 之后的代碼就不會被執(zhí)行。例如:

# another_script.py

import example_module

result = example_module.add_numbers(8, 12)
print(f"The sum of 8 and 12 is: {result}")

會輸出

The sum of 8 and 12 is: 20

在這個例子中,雖然我們導(dǎo)入了 example_module,但由于我們沒有直接運行 example_module.py,因此 if __name__ == "__main__": 之后的代碼不會執(zhí)行。只有當(dāng) example_module.py 被直接運行時,才會執(zhí)行這部分代碼。文章來源地址http://www.zghlxwxcb.cn/news/detail-806124.html

到了這里,關(guān)于python進階(二)導(dǎo)入import 機制 | 導(dǎo)入import 用法 工作原理全解析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • “深入解析JVM內(nèi)部原理:探索Java虛擬機的工作機制“

    標(biāo)題:深入解析JVM內(nèi)部原理:探索Java虛擬機的工作機制 摘要: Java虛擬機(JVM)是Java語言的核心組成部分,它負(fù)責(zé)將Java源代碼編譯為可執(zhí)行的字節(jié)碼,并提供運行時環(huán)境。本文將深入探索JVM的工作機制,包括類加載、內(nèi)存管理、垃圾回收、即時編譯等關(guān)鍵技術(shù),幫助開發(fā)者

    2024年02月11日
    瀏覽(21)
  • “深入探索JVM內(nèi)部機制:解析Java虛擬機的工作原理“

    標(biāo)題:深入探索JVM內(nèi)部機制:解析Java虛擬機的工作原理 摘要:本文將介紹Java虛擬機(JVM)的工作原理,包括類加載、內(nèi)存管理、垃圾回收和字節(jié)碼執(zhí)行等方面。通過深入理解JVM的內(nèi)部機制,開發(fā)人員可以更好地優(yōu)化代碼性能,提高應(yīng)用程序的可靠性和可擴展性。 正文: 一

    2024年02月11日
    瀏覽(20)
  • 【Spring底層原理高級進階】輕松掌握 Spring MVC 的攔截器機制:深入理解 HandlerInterceptor 接口和其實現(xiàn)類的用法

    ?????歡迎光臨???? ??我是蘇澤,一位對技術(shù)充滿熱情的探索者和分享者。???? ??特別推薦給大家我的最新專欄 《Spring 狂野之旅:底層原理高級進階》 ?? 本專欄純屬為愛發(fā)電永久免費?。?! 這是蘇澤的個人主頁可以看到我其他的內(nèi)容哦???? 努力的蘇澤 http://suze

    2024年02月20日
    瀏覽(17)
  • python包導(dǎo)入原理解析

    原文鏈接: https://www.cnblogs.com/hi3254014978/p/15317976.html 根據(jù)編程經(jīng)驗的不同,我們在運行程序時可能經(jīng)?;蛘吲紶柵龅较旅孢@些問題,仔細(xì)觀察后會發(fā)現(xiàn)這些問題無一例外都出現(xiàn)了一個相同的短語,很容易就可以發(fā)現(xiàn),這個短語就是\\\"relative import\\\"。 既然關(guān)于相對導(dǎo)入的報錯提示

    2024年02月07日
    瀏覽(11)
  • HTTP與HTTPS:深度解析兩種網(wǎng)絡(luò)協(xié)議的工作原理、安全機制、性能影響與現(xiàn)代Web應(yīng)用中的重要角色

    HTTP與HTTPS:深度解析兩種網(wǎng)絡(luò)協(xié)議的工作原理、安全機制、性能影響與現(xiàn)代Web應(yīng)用中的重要角色

    HTTP (HyperText Transfer Protocol) 和 HTTPS (Hypertext Transfer Protocol Secure) 是互聯(lián)網(wǎng)通信中不可或缺的兩種協(xié)議,它們共同支撐了全球范圍內(nèi)的Web內(nèi)容傳輸與交互。本文將深度解析HTTP與HTTPS的工作原理、安全機制、性能影響,并探討它們在現(xiàn)代Web應(yīng)用中的核心角色。 HTTP 是一種應(yīng)用層協(xié)議

    2024年04月11日
    瀏覽(37)
  • 區(qū)塊鏈工作原理,工作機制和詳細(xì)概念

    ?各位小伙伴想要博客相關(guān)資料的話,關(guān)注公眾號:chuanyeTry即可領(lǐng)取相關(guān)資料! 工作原理 ????????區(qū)塊鏈?zhǔn)且环N去中心化的分布式賬本技術(shù),它的工作原理可以簡單概括為以下幾個步驟: ????????1. 交易:區(qū)塊鏈中的交易可以是任何數(shù)字化的價值交換,例如加密貨幣

    2024年02月09日
    瀏覽(28)
  • 如何將Python的上級目錄的文件導(dǎo)入?【from.import】

    如何將Python的上級目錄的文件導(dǎo)入?【from.import】

    假如有如下目錄: -python ----file1 ---------file1_1 ------------------pfile1_1.py ---------pfile1.py ----file2 ---------pfile2.py ----pfile.py ----data.py 在pfile1_1.py中想要將pfile.py 導(dǎo)入怎么辦? 將上級文件目錄標(biāo)記為:源代碼的根目錄。 將所有from和import都設(shè)置為絕對路徑即可。 如果不想改代碼的話還有

    2024年02月09日
    瀏覽(31)
  • kafka的ISR工作機制原理

    昨日內(nèi)容回顧: ?? ?- ES的加密及客戶端的連接方式,比如logstash,filebeat,curl,es-head,postman... ?? ?- zk單點部署 ?? ?- kafka單點部署 ?? ?- kafka的集群擴容 ?? ?- kafka集群架構(gòu) ?? ?- kafka的堆內(nèi)存調(diào)優(yōu) ?? ?- kafka的集群宏觀架構(gòu) ?? ? Q1: 為什么需要配置\\\"dvertised.listeners\\\". ?

    2024年02月10日
    瀏覽(22)
  • postman的工作原理與基本用法

    ? ? ? ?postman是一個用于調(diào)試HTTP請求的工具,有友好的界面助于分析、構(gòu)造HTTP請求并分析響應(yīng)數(shù)據(jù)。在實際工作中開發(fā)和測試基本都用這款工具進行接口調(diào)試。 ? ? ? ?postman的工作原理可以理解成一個瀏覽器,可模擬瀏覽器、APP原生等客戶端向服務(wù)器發(fā)送接口請求,并獲取

    2024年02月06日
    瀏覽(18)
  • Qt——Qt工作原理:事件驅(qū)動、信號與槽機制

    Qt作為一個現(xiàn)代的GUI(圖形用戶界面)框架,采用了事件驅(qū)動的編程范式,并引入了信號與槽機制,以實現(xiàn)高度交互和松耦合的程序設(shè)計。下面詳細(xì)解釋了相關(guān)概念,以及如何在Qt中使用它們。 事件是在GUI應(yīng)用程序中的控件上產(chǎn)生的各種動作、操作或狀態(tài)變化,例如鼠標(biāo)移動

    2024年02月10日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包