中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

什么是Python中的模塊

發布時間:2020-08-25 14:02:14 來源:億速云 閱讀:164 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家帶來有關什么是Python中的模塊,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

一、python中的模塊

有過C語言編程經驗的朋友都知道在C語言中如果要引用sqrt函數,必須用語句#include <math.h>引入math.h這個頭文件,否則是無法正常進行調用的。

那么在Python中,如果要引用一些其他的函數,該怎么處理呢?

在Python中有一個概念叫做模塊(module),這個和C語言中的頭文件以及Java中的包很類似,比如在Python中要調用sqrt函數,必須用import關鍵字引入math這個模塊,下面就來了解一下Python中的模塊。

說的通俗點:模塊就好比是工具包,要想使用這個工具包中的工具(就好比函數),就需要導入這個模塊。

模塊的概念:

1.每一個以擴展名py結尾的python源代碼文件都是一個模塊。

2.模塊名同樣也是一個標識符,需要符合標識符的命名規范。

3.在模塊中定義的全局變量、函數、類都是提供給外界直接使用的工具。

4.模塊就好比工具包,要想使用這個工具包中的工具,就需要先導入這個模塊。

二、import

在Python中用關鍵字import來引入某個模塊,比如要引用模塊math,就可以在文件最開始的地方用import math來引入。

import導入

import 模塊名1,模塊名2 #不推薦

說明:在導入模塊時,每個導入應該獨占一行(推薦)

import 模塊1
import 模塊2

導入之

通過模塊名使用模塊提供的工具---全局變量、函數、類。

只用as指定模塊的別名。

如果模塊的名字太長,可以使用as指定模塊的別名,以方便在代碼中的使用。

import 模塊名1 as 模塊別名

注意:模塊別名應該符合托峰值命名規范

為什么要加上模塊名呢?

因為可能存在這樣一種情況:在多個模塊中含有相同名稱的函數,此時如果只是通過函數名來調用,解釋器無法知道到底要調用哪個函數。所以如果像上述這樣引入模塊的時候,調用函數必須加上模塊名。

三、from … import

from...import導入

1.如果想從某一模塊中導入部分工具,就可以使用from...import的方式。

2.import模塊名是一次性把模塊中所有的工具全部導入,并且通過模塊名/別名訪問。

#從模塊中導入某一個工具
from 模塊名 import 工具名#可以通過as為工具指定別名

導入之后

1.不需要通過模塊名. 的方式使用模塊提供的工具

2.可以直接使用模塊提供的工具  --- 全局變量、函數、類

注意:

1.如果兩個模塊,存在同名的函數,name后導入模塊的函數會覆蓋先導入的函數

2.開發時import代碼應該統一寫在代碼的頂部,更容易及時發現沖突

3.如果發生沖突,可以使用as關鍵字,給其中一個工具起一個別名

from...import *
#從模塊中導入所有工具
from 模塊名 import *

注意:

這種法師不推薦使用,因為函數重名并沒有任何的提示,出現問題不好排查

案例:

demo.py(自定義的模塊)

#全局變量
title = "模塊1"
#函數
def say_hello():
    print("我是%s"%title)
#類
class Dog(object):
    pass
#類
class Cat(object):
    pass

test.py中使用demo.py模塊

#導入模塊中的所有工具,同時為模塊指定別名為myTest
import demo as myTest
#導入模塊中所有工具,不推薦,工具同名不好排查
#from...import * 
#from...import導入模塊中的部分工具(Dog類)
from demo import Dog
#為導入工具Cat類指定別名Test_Cat,防止與其他模塊中工具重名
from demo import Cat as Test_Cat
myTest.say_hello()
dog=Dog()
cat=Test_Cat()

四、python模塊導入的搜索路

程序的主目錄

PTYHONPATH目錄(如果已經進行了設置)

標準連接庫目錄(一般在/usr/local/lib/python2.X/)

任何的.pth文件的內容(如果存在的話).新功能,允許用戶把有效果的目錄添加到模塊搜索路徑中去 .pth后綴的文本文件中一行一行的地列出目錄。

這四個組建組合起來就變成了sys.path了,

當python import模塊的時候,就通過sys.path里面的目錄列表下面去查找。

sys.path是python的搜索模塊的路徑集,是一個list。

查看sys.path方法:

import sys
print(sys.path)
['C:\\Users\\Se7eN_HOU\\Desktop\\Tools\\sublimetext3\\Sublime Text Build 3176 x86', 
'C:\\Program Files\\Python37\\python37.zip', 
'C:\\Program Files\\Python37\\DLLs', 
'C:\\Program Files\\Python37\\lib', 
'C:\\Program Files\\Python37', 
'C:\\Users\\Se7eN_HOU\\AppData\\Roaming\\Python\\Python37\\site-packages', 
'C:\\Program Files\\Python37\\lib\\site-packages']

程序執行時導入模塊路徑

import sys
#因為sys.path是一個列表,所以可以在后面追加一個自定的模塊路徑
sys.path.append("/home/Se7eN_HOU")
#通過insert可以將路徑插到前面
sys.path.insert(0,"Home/Se7eN")
print(sys.path)

運行結果為:

['Home/Se7eN', 
'C:\\Users\\Se7eN_HOU\\Desktop\\Tools\\sublimetext3\\Sublime Text Build 3176 x86', 
'C:\\Program Files\\Python37\\python37.zip', 'C:\\Program Files\\Python37\\DLLs', 
'C:\\Program Files\\Python37\\lib', 'C:\\Program Files\\Python37', 
'C:\\Users\\Se7eN_HOU\\AppData\\Roaming\\Python\\Python37\\site-packages', 
'C:\\Program Files\\Python37\\lib\\site-packages', 
'/home/Se7eN_HOU']

 五、模塊制作

1、定義自己的模塊

在Python中,每個Python文件都可以作為一個模塊,模塊的名字就是文件的名字。

比如有這樣一個文件test.py,在test.py中定義了函數add

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

2、調用自己的模塊

那么在demo.py文件中就可以先import test,然后通過test.add(a,b)來調用了,當然也可以通過from test import add來引入

import test
result = test.add(1,2)
print(result)

運行結果為:3

3、測試模塊

在實際開中,當一個開發人員編寫完一個模塊后,為了讓模塊能夠在項目中達到想要的效果,這個開發人員會自行在py文件中添加一些測試信息,例如:test.py文件

def add(a,b):
    return a+b
    #用來測試
ret = add(11,22)
print("in test.py 測試11+22 = %d"%ret)

如果此時,在demo.py文件中引入了此文件的話,想想看,測試的那段代碼是否也會執行呢!

import test
result = test.add(1,2)
print(result)

運行結果為:

in test.py 測試11+22 = 33
3

至此,可發現test.py中的測試代碼,應該是單獨執行test.py文件時才應該執行的,不應該是其他的文件中引用而執行。為了解決這個問題,python在執行一個文件時有個變量__name__

test.py文件中:

def add(a,b):    
    return a+b
#用來測試
#ret = add(11,22)
#print("in test.py 測試11+22 = %d"%ret)
print("in test.py,__name__ is %s"%__name__)

運行結果為:

in test.py,__name__ is __main__

在demo.py文件中導入test.py模塊運行為

import test
result = test.add(1,2)
print(result)

運行結果為:

in test.py,__name__ is test
3

可以根據__name__變量的結果能夠判斷出,是直接執行的python腳本還是被引入執行的,從而能夠有選擇性的執行測試代碼。

test.py模塊中代碼改為:

def add(a,b):
    return a+b
if __name__ == "__main__":
    ret = add(11,22)
    print("in test.py 測試11+22 = %d"%ret)

在test.py中運行結果為:

in test.py 測試11+22 = 33

在demo.py中導入test.py模塊

import test
result = test.add(1,2)
print(result)

運行結果為:3

這樣我們在開中測試的代碼,就不會在其他模塊中出現了。

六、模塊中的_ _all_ _

1、沒有_ _all_ _

test.py模塊

class Test(object):
    def test(self):
        print("---Test類中的test方法---")
def test1():
    print("---test1方法---")
def test2():
    print("---test2方法---")

在demo.py中導入test.py模塊

from test import *
a = Test()
a.test()
test1()
test2()

運行結果為:

---Test類中的test方法---
---test1方法---
---test2方法---

2、模塊中有_ _all_ _

test.py模塊

__all__ = ["Test","test1"]
class Test(object):
    def test(self):
        print("---Test類中的test方法---")
def test1():
    print("---test1方法---")
def test2():
    print("---test2方法---")

demo.py模塊

from test import *
a = Test()
a.test()
test1()
test2()

運行結果為:

---Test類中的test方法---Traceback (most recent call last):
---test1方法---
  File "C:\Users\Se7eN_HOU\Desktop\Tools\sublimetext3\Sublime Text Build 3176 x86\demo.py", line 5, in <module>
    test2() 
NameError: name 'test2' is not defined

如果一個文件中有__all__變量,那么也就意味著只有這個變量中的元素,才會被from xxx import *時導入。

七、系統sys模塊介紹

sys是python自帶模塊,常用的函數有:

sys.argv: 實現從程序外部向程序傳遞參數。

sys.exit([arg]): 程序中間的退出,arg=0為正常退出。

sys.getdefaultencoding(): 獲取系統當前編碼,一般默認為ascii。

sys.setdefaultencoding(): 設置系統默認編碼,執行dir(sys)時不會看到這個方法,在解釋器中執行不通過,可以先執行reload(sys),在執行 setdefaultencoding('utf8'),此時將系統默認編碼設置為utf8。(見設置系統默認編碼 )

sys.getfilesystemencoding(): 獲取文件系統使用編碼方式,Windows下返回'mbcs',mac下返回'utf-8'。

sys.path: 獲取指定模塊搜索路徑的字符串集合,可以將寫好的模塊放在得到的某個路徑下,就可以在程序中import時正確找到。

sys.platform: 獲取當前系統平臺。

1、sys.argv[]

sys.argv[]說白了就是一個從程序外部獲取參數的橋梁,這個“外部”很關鍵。因為我們從外部取得的參數可以是多個,所以獲得的是一個列表(list),也就是說sys.argv其實可以看作是一個列表,所以才能用[]提取其中的元素。其第一個元素是程序本身,隨后才依次是外部給予的參數。

下面我們通過一個極簡單的test.py程序的運行結果來說明它的用法。

#test.py 
import sys
a=sys.argv[0]
print(a)

將test.py保存在c盤的根目錄下。

在程序中找到 ‘運行’->點擊->輸入"cmd"->回車鍵   進入控制臺命令窗口(如下圖),先輸入cd c:\   (作用是將命令路徑改到c盤根目錄),然后輸入test.py運行我們剛剛寫的程序:

什么是Python中的模塊

得到的結果是C:\test.py,這就是0指代碼(即此.py程序)本身的意思。

然后我們將代碼中0改為1 :

a=sys.argv[1]

保存后,再從控制臺窗口運行,這次我們加上一個參數,輸入:test.py what

#test.py
import sys

a=sys.argv[1]
print(a)

運行結果是:

什么是Python中的模塊

得到的結果就是我們輸入的參數what,看到這里你是不是開始明白了呢。

那我們再把代碼修改一下:

a=sys.argv[2:]

保存后,再從控制臺窗臺運行程序,這次多加幾個參數,以空格隔開:

test.py a b c d e f

什么是Python中的模塊

得到的結果為[‘b’, ’c’, ’d’, ’e’, ’f’]

應該大徹大悟了吧。Sys.argv[ ]其實就是一個列表,里邊的項為用戶輸入的參數,關鍵就是要明白這參數是從程序外部輸入的,而非代碼本身的什么地方,要想看到它的效果就應該將程序保存了,從外部來運行程序并給出參數。

2、sys.path已經在上面講過了

3、sys.exit()

程序中間的退出, arg=0為正常退出 

一般情況下執行到主程序末尾,解釋器自動退出,但是如果需要中途退出程序,可以調用sys.exit函數,帶有一個可選的整數參數返回給調用它的程序,表示你可以在主程序中捕獲對sys.exit的調用。(0是正常退出,其他為異常)當然也可以用字符串參數,表示錯誤不成功的報錯信息。

import sys
def exitfunc(value):
    print (value)
    sys.exit(0)
print("hello")
try:
    sys.exit(90)
except SystemExit as value:
    exitfunc(value)   
print("come?")

運行結果:

hello
90

程序首先打印hello,在執行exit(90),拋異常把90傳給values,values在傳進函數中執行,打印90程序退出。后面的”come?”因為已經退出所以不會被打印. 而此時如果把exitfunc函數里面的sys.exit(0)去掉,那么程序會繼續執行到輸出”come?”。

4、sys.modules 

sys.modules是一個全局字典,該字典是python啟動后就加載在內存中。每當程序員導入新的模塊,sys.modules將自動記錄該模塊。當第二次再導入該模塊時,python會直接到字典中查找,從而加快了程序運行的速度。它擁有字典所擁有的一切方法。

import sys
print(sys.modules.keys())
print("**************************************************************************")
print(sys.modules.values())
print("**************************************************************************")
print(sys.modules["os"])

運行結果為:

dict_keys(['sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', 'zipimport',
 '_frozen_importlib_external', '_io', 'marshal', 'nt', 'winreg', 'encodings', 'codecs', '_codecs',
  'encodings.aliases', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', 'io', 'abc', '_abc', 'site', 
  'os', 'stat', '_stat', 'ntpath', 'genericpath', 'os.path', '_collections_abc', '_sitebuiltins'])
**************************************************************************
dict_values([<module 'sys' (built-in)>, <module 'builtins' (built-in)>, <module '_frozen_importlib' (frozen)>, 
<module '_imp' (built-in)>, <module '_thread' (built-in)>, <module '_warnings' (built-in)>, <module '_weakref' 
(built-in)>, <module 'zipimport' (built-in)>, <module '_frozen_importlib_external' (frozen)>, <module 'io' 
(built-in)>, <module 'marshal' (built-in)>, <module 'nt' (built-in)>, <module 'winreg' (built-in)>, 
<module 'encodings' from 'C:\\Program Files\\Python37\\lib\\encodings\\__init__.py'>, <module 'codecs'
 from 'C:\\Program Files\\Python37\\lib\\codecs.py'>, <module '_codecs' (built-in)>, <module 'encodings.aliases'
  from 'C:\\Program Files\\Python37\\lib\\encodings\\aliases.py'>, <module 'encodings.utf_8' from '
  C:\\Program Files\\Python37\\lib\\encodings\\utf_8.py'>, <module '_signal' (built-in)>, <module '__main__' 
  from 'C:\\Users\\Se7eN_HOU\\Desktop\\demo.py'>, <module 'encodings.latin_1' from 
  'C:\\Program Files\\Python37\\lib\\encodings\\latin_1.py'>, <module 'io' from
   'C:\\Program Files\\Python37\\lib\\io.py'>, <module 'abc' from 'C:\\Program Files\\Python37\\lib\\abc.py'>,
    <module '_abc' (built-in)>, <module 'site' from 'C:\\Program Files\\Python37\\lib\\site.py'>, <module 'os' from
     'C:\\Program Files\\Python37\\lib\\os.py'>, <module 'stat' from 'C:\\Program Files\\Python37\\lib\\stat.py'>,
      <module '_stat' (built-in)>, <module 'ntpath' from 'C:\\Program Files\\Python37\\lib\\ntpath.py'>,
       <module 'genericpath' from 'C:\\Program Files\\Python37\\lib\\genericpath.py'>, <module 'ntpath' from 
       'C:\\Program Files\\Python37\\lib\\ntpath.py'>, <module '_collections_abc' from '
       C:\\Program Files\\Python37\\lib\\_collections_abc.py'>, <module '_sitebuiltins' from 
       'C:\\Program Files\\Python37\\lib\\_sitebuiltins.py'>])
**************************************************************************
<module 'os' from 'C:\\Program Files\\Python37\\lib\\os.py'>

5、sys.stdin, sys.stdout, sys.stderr 

stdin,stdout,stderr在Python中都是文件屬性對象, 他們在python啟動時自動與shell環境中的標準輸入, 輸出, 出錯相關. 而python程序在shell中的I/O重定向是有shell來提供的,與python本身沒有關系.python程序內部將stdin, stdout, stderr讀寫操作重定向到一個內部對象.

#import sys
print("Hi, %s!' %input('Please enter your name: "))
#運行結果:Please enter your name: er
#Hi, er!
#等同于:
import sys
print('Please enter your name:')
name=sys.stdin.readline()[:-1]
print('Hi, %s!' %name)
#標準輸出
print('Hello World!\n')
#等同于:
import sys
sys.stdout.write('Hello world!\n')

上述就是小編為大家分享的什么是Python中的模塊了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桃园县| 体育| 宝清县| 阳西县| 绥棱县| 泰顺县| 嫩江县| 沁水县| 三江| 南靖县| 古浪县| 日照市| 海兴县| 呼图壁县| 汝城县| 达尔| 广东省| 咸阳市| 通化县| 阳朔县| 宣武区| 民县| 远安县| 当阳市| 乌鲁木齐市| 泗洪县| 安丘市| 温宿县| 县级市| 巴中市| 宝丰县| 黄浦区| 元朗区| 信宜市| 灵丘县| 盈江县| 新宁县| 丰原市| 舞钢市| 娱乐| 汶川县|