日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

模块概念与使用及注意事项

發(fā)布時(shí)間:2024/7/5 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 模块概念与使用及注意事项 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1 模塊概念

模塊就是包含了python代碼的文本文件,通俗講,一個(gè)py文件就是一個(gè)模塊

?

2 使用模塊(import)

?

比如,我們單獨(dú)編寫(xiě)了一個(gè)模塊,命名為mymodule.py,在該模塊中我們定義一些函數(shù)和類(lèi),我們?nèi)绾卧趖est.py中使用呢?答案是使用import.

mymodule.py內(nèi)容如下:

#Person類(lèi)

class Person(object):

??? def __init__(self,name,age):

??????? self.name = name

??????? self.age = age

?

??? def showPerson(self):

??????? print("Name:%s Age:%d"%(self.name,self.age))

?

#函數(shù)

def myAdd(a,b):

??? ret = a + b

??? return ret

test.py如下:

#引入mymodule模塊

import mymodule

?

#使用mymodule模塊中的myAdd函數(shù)

#注意在使用mymodule中的符號(hào)的時(shí)候,必須指定模塊名.符號(hào)的方式

ret = mymodule.myAdd(10,20)

print("ret = %d"%ret)

?

#使用mymodule模塊中的Person類(lèi)

person= mymodule.Person("Edward",22)

person.showPerson()

?

不僅可以引入函數(shù),還可以引入一些全局變量、類(lèi)等.

為什么必須加上模塊名調(diào)用呢?

因?yàn)榭赡艽嬖谶@樣一種情況:在多個(gè)模塊中含有相同名稱(chēng)的函數(shù),此時(shí)如果只是通過(guò)函數(shù)名來(lái)調(diào)用,解釋器無(wú)法知道到底要調(diào)用哪個(gè)函數(shù)。所以如果像上述這樣引入模塊的時(shí)候,調(diào)用函數(shù)必須加上模塊名.

3 使用模塊(from...import...)

有時(shí)候我們只需要用到模塊中的某個(gè)函數(shù),只需要引入該函數(shù)即可.通過(guò)這種方式引入的時(shí)候,調(diào)用函數(shù)時(shí)只能給出函數(shù)名,不能給出模塊名,但是當(dāng)兩個(gè)模塊中含有相同名稱(chēng)函數(shù)的時(shí)候,后面一次引入會(huì)覆蓋前一次引入。也就是說(shuō)假如模塊A中有函數(shù)function( ),在模塊B中也有函數(shù)function( ),如果引入A中的function在先、B中的function在后,那么當(dāng)調(diào)用function函數(shù)的時(shí)候,是去執(zhí)行模塊B中的function函數(shù)。如果想一次性引入math中所有的東西,還可以通過(guò)from math import *來(lái)實(shí)現(xiàn)

#引入mymodule模塊中的myAdd函數(shù)

from mymodule import? myAdd

?

#使用mymodule模塊中的myAdd函數(shù)

#注意不可添加模塊名

ret = myAdd(10,20)

print("ret = %d"%ret)

?

#使用mymodule模塊中的Person類(lèi)出錯(cuò)

#person= mymodule.Person("Edward",22)

#person.showPerson()

使用import xxx import *

#引入mymodule模塊中的所有符號(hào)

from mymodule import *

?

#使用mymodule模塊中的myAdd函數(shù)

#注意不可添加模塊名

ret = myAdd(10,20)

print("ret = %d"%ret)

?

#使用mymodule模塊中的Person類(lèi)出錯(cuò)

person= Person("Edward",22)

person.showPerson()

這提供了一個(gè)簡(jiǎn)單的方法來(lái)導(dǎo)入一個(gè)模塊中的所有項(xiàng)目。然而這種聲明不該被過(guò)多地使用。

?

4 使用模塊(import...as...)

將引入的模塊重新命名:

#引入mymodule并重新命名為md

#此時(shí)再使用mymodule就會(huì)未定義

import mymodule as md

?

#使用mymodule模塊中的myAdd函數(shù)

#注意不可添加模塊名

ret = md.myAdd(10,20)

print("ret = %d"%ret)

?

#使用mymodule模塊中的Person類(lèi)出錯(cuò)

person= md.Person("Edward",22)

?

person.showPerson()

?

5 定位模塊

當(dāng)你導(dǎo)入一個(gè)模塊,Python解析器對(duì)模塊位置的搜索順序是:

  • 當(dāng)前目錄。
  • 如果不在當(dāng)前目錄,Python則搜索在shell變量PYTHONPATH下的每個(gè)目錄。
  • 如果都找不到,Python會(huì)察看默認(rèn)路徑。UNIX下,默認(rèn)路徑一般為/usr/local/lib/python/
  • 模塊搜索路徑存儲(chǔ)在system模塊的sys.path變量中。變量里包含當(dāng)前目錄,PYTHONPATH和由安裝過(guò)程決定的默認(rèn)目錄。
  • ?

6 __name__變量

#引入mymodule并重新命名為md

#此時(shí)再使用mymodule就會(huì)未定義

import mymodule as md

?

#使用mymodule模塊中的myAdd函數(shù)

#注意不可添加模塊名

ret = md.myAdd(10,20)

print("ret = %d"%ret)

?

#使用mymodule模塊中的Person類(lèi)出錯(cuò)

person= md.Person("Edward",22)

person.showPerson()

?

當(dāng)我們執(zhí)行此py文件的時(shí)候,由于此py文件包含了mymodule.py,導(dǎo)致mymodule中的測(cè)試程序也被執(zhí)行了.

可以根據(jù)__name__變量的結(jié)果能夠判斷出,是直接執(zhí)行的python腳本還是被引入執(zhí)行的,從而能夠有選擇性的執(zhí)行測(cè)試代碼.

7 模塊中的__all__

?

如果一個(gè)文件中有__all__變量,當(dāng)使用fromxxx import *時(shí)導(dǎo)入的時(shí)候,只能導(dǎo)入__all__中的符號(hào),其余符號(hào)導(dǎo)入失敗.

總結(jié)

以上是生活随笔為你收集整理的模块概念与使用及注意事项的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。