MSCBSC 移動(dòng)通信論壇
搜索
登錄注冊(cè)
網(wǎng)絡(luò)優(yōu)化工程師招聘專(zhuān)欄 4G/LTE通信工程師最新職位列表 通信實(shí)習(xí)生/應(yīng)屆生招聘職位

  • 閱讀:3382
  • 回復(fù):0
PYTHON學(xué)習(xí)筆記【模塊和包】
細(xì)阿哥
中級(jí)會(huì)員
鎵嬫満鍙風(fēng)爜宸查獙璇? style=


 發(fā)短消息    關(guān)注Ta 

積分 500
帖子 100
威望 9542 個(gè)
禮品券 15 個(gè)
專(zhuān)家指數(shù) 0
注冊(cè) 2009-2-25
專(zhuān)業(yè)方向  通信
回答問(wèn)題數(shù) 0
回答被采納數(shù) 0
回答采納率 0%
 
發(fā)表于 2019-11-05 09:58:51  只看樓主 

1     python中的模塊

python中有一個(gè)概念叫做模塊,這個(gè)和C語(yǔ)言中的頭文件以及JAVA中的JAVA包很類(lèi)似,比如在PYTHON中要調(diào)用sqrt函數(shù),必須 import關(guān)鍵字引入math這個(gè)模塊。

通俗點(diǎn),模塊就好比是工具包,要想使用這個(gè)工具包中的工具(就好比函數(shù)),就必須導(dǎo)入這個(gè)模塊。

import

python中用關(guān)鍵字import來(lái)引入某個(gè)模塊,比如要引入模塊math,就可以文件開(kāi)始的地方使用import math來(lái)引入。

       import module1,module2...

在調(diào)用math模塊中的函數(shù)時(shí),必須 這樣引用

       模塊名.函數(shù)名

 

import random
print(random.randint(0,5))

 

from ...import...

Pythonfrom語(yǔ)句讓你從模塊中導(dǎo)入一個(gè)指定的部分到當(dāng)前命名空間中:

       from modulename import name[,name2...]

例如,要導(dǎo)入模塊fibfibonacci函數(shù):

       from fib import Fibonacci

注意:不會(huì)把整 個(gè)fib模塊導(dǎo)入到當(dāng)前的命名空間中,它中會(huì)將fib里的fibonacci單個(gè)引入。

from random import randint
print(randint(0,9))# 直接寫(xiě)方法名

 

from...import*

把一個(gè)模塊的所有內(nèi)容全都導(dǎo)入到當(dāng)前的命名空間,只需要如下聲明:

       from modname import *

注意:這提供了一個(gè)簡(jiǎn)單的方法來(lái)導(dǎo)入一個(gè)模塊中的所有項(xiàng)目,然而這種聲明不該被過(guò)多使用,因?yàn)椴煌K可能存在一樣的方法名字,導(dǎo)致后面導(dǎo)入的模塊的方法覆蓋了前面模塊的同名方法。

as

給導(dǎo)入的模塊重新命名

import random as rd
print(rd.randint(0,5))

 

查看包的代碼:

>>> import random

>>> random.__file__

'D:\Program Files\Python\Python37\lib\random.py'

 

定義自己的模塊

python中,每個(gè)python文件都可以作為一個(gè)模塊,模塊的名字就是文件的名字。

例,調(diào)用自定義模塊

1.      編寫(xiě)一個(gè)module1.py的模塊

# 寫(xiě)一個(gè)工具方法,判斷字符 是否為null,當(dāng)字符串為nonenull,還有''還為null,還有'  '也為null
def isnull( str ):
if not str:
return True
    elif
str.strip() == '':
return True
    else
:
return False

def
test1():
print("……中的test1方法……")

2.      調(diào)用自己編寫(xiě)的模塊(main.py

import module1
a =
'a'
print(module1.isnull(a))
module1.test1()


from module1 import isnull,test1
a =
'a'
print(isnull(a))
test1()

 

模塊的測(cè)試和模塊中的__all__

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

# 寫(xiě)一個(gè)工具方法,判斷字符 是否為null,當(dāng)字符串為nonenull,還有''還為null,還有'  '也為null
__all__=['isnull'# 表示被引用的方法,在from module1 import *有效,

def isnull( str ):
if not str:
return True
    elif
str.strip() == '':
return True
    else
:
return False

def
test1():
print("……中的test1方法……")

# print(isnull(" ")) # 這行雖然是測(cè)試代碼,但只要被當(dāng)作模塊被導(dǎo)入就會(huì)自動(dòng)執(zhí)行
#print(__name__)
if __name__=='__main__'#python解釋器主動(dòng)執(zhí)行該模塊代碼,測(cè)試時(shí)執(zhí)行,當(dāng)被當(dāng)作模塊調(diào)用時(shí),以下代碼不執(zhí)行
print(isnull(" "))

 

2     python中的包

引入包,包就是一個(gè)目錄,把多個(gè)py文件放到同一個(gè)文件夾下。

執(zhí)行順序:當(dāng)前目錄-python系統(tǒng)目錄

Ø  使用” import文件夾.模塊的方式導(dǎo)入,python3可以導(dǎo)入,python2不行

Ø  使用”from 文件夾 import 模塊的方式導(dǎo)入,python3可以導(dǎo)入,python2不行

Ø  在包的文件夾上創(chuàng)建__init__.py文件,雖然 文件內(nèi)容沒(méi)有,但是python2可以用了。在python2中,有一個(gè)目錄,并且目錄下有一個(gè)__init__.py文件,才認(rèn)為是包。

__init__.py文件在python3中沒(méi)有錯(cuò),以后均在包的目錄上新建一個(gè)__init__.py文件。

Ø  __init__.py文件中寫(xiě)入

       from . import 模塊1

       from . import 模塊2

那么可以使用“import 文件夾導(dǎo)入,也可以使用” from 文件夾 import 模塊的方式導(dǎo)入

 

#encoding=UTF-8
'''
import my_package.module1   # python3,
引入包中的模塊,方法1
a = 'a'
print(my_package.module1.isnull(a))


from my_package import module1  # python3,
引入包中的模塊,方法1
a = 'a'
print(module1.isnull(a))
'''

import my_package  # 引入包中的模塊,方法3 在包目錄下的__init__.py文件 寫(xiě)代碼from . import 模塊1
a = 'a'
print(my_package.module1.isnull(a))

 

模塊/包的發(fā)布

1.      發(fā)布的模塊/包的目錄結(jié)構(gòu):

[root@localhost test_pub]# tree

.

├── my_package    #要發(fā)布的包名

│   ├── __init__.py  

│   ├── module1.py  #待發(fā)布的模塊1

│   ├── module2.py

│   └── __pycache__

│       ├── __init__.cpython-37.pyc  #.pyc是自解碼文件

│       ├── module1.cpython-37.pyc

│       └── module2.cpython-37.pyc

└── setup.py    # 與包同級(jí)

2.      編輯setup.py文件

py_modules需要指明所需包含的py文件

from distutils.core import setup
#setup(name='壓縮包的名字',version='1.0',description='描述',author='作者',py_modules=['suba.aa','suba.bb'])
setup(name='my_pub',version='3.7',description='沒(méi)有',author='me',py_modules=['my_package.module1','my_package.module2'])

 

3.      構(gòu)建模塊

python setup.py build

                                              image.png

4.      生成發(fā)布?jí)嚎s包

python setup.py sdist

image.png

模塊/包的安裝、使用

1.      安裝的方式

找到模塊的壓縮包-》解決-》進(jìn)入文件夾-》執(zhí)行命令”python setup.py install”

注意:如果在install的時(shí)候,執(zhí)行目錄安裝,可以使用”python setup.py install –prefix 安裝路徑

image.png

image.png

 

2.      模塊的引入

在程序中,使用 “from import ”即可完成對(duì)安裝的模塊的使用

       from 模塊名 import 模塊名或*

image.png

1.      導(dǎo)入模塊的路徑設(shè)置

Ø  查看模塊搜索路徑

image.png

Ø  添加搜索路徑

image.png

Ø  重新導(dǎo)入模塊

from imp import *

reload(模塊名)

 

 

2.      查看已經(jīng)安裝的模塊help()

 

image.png

3.      模塊內(nèi)定義的所有名稱(chēng)dir()函數(shù)

dir()函數(shù)能夠返回由對(duì)象所定義的名稱(chēng)列表,例如:這一對(duì)象是一模塊,則dir()函數(shù)可以找到模塊內(nèi)定義的所有名稱(chēng)(含函數(shù)、類(lèi)、變量),以一個(gè)字符串列表的形式返回

dir()是有參數(shù)的,如果參數(shù)是模塊名稱(chēng)(當(dāng)然參數(shù)也可以是類(lèi),函數(shù)等),那么將返回這一指定模塊的名稱(chēng)列表。如果沒(méi)有參數(shù),那么函數(shù)將返回當(dāng)前文件(即當(dāng)前模塊的名稱(chēng)列表):比如你在test2.py下指定dir(test),那么返回test模塊的名稱(chēng)列表,如果是dir(),那么返回test2.py名稱(chēng)列表

image.png

 

4.      循環(huán)導(dǎo)入,兩個(gè)模塊互相導(dǎo)入

 

image.png

image.png

image.png


掃碼關(guān)注5G通信官方公眾號(hào),免費(fèi)領(lǐng)取以下5G精品資料
  • 1、回復(fù)“YD5GAI”免費(fèi)領(lǐng)取《中國(guó)移動(dòng):5G網(wǎng)絡(luò)AI應(yīng)用典型場(chǎng)景技術(shù)解決方案白皮書(shū)
  • 2、回復(fù)“5G6G”免費(fèi)領(lǐng)取《5G_6G毫米波測(cè)試技術(shù)白皮書(shū)-2022_03-21
  • 3、回復(fù)“YD6G”免費(fèi)領(lǐng)取《中國(guó)移動(dòng):6G至簡(jiǎn)無(wú)線接入網(wǎng)白皮書(shū)
  • 4、回復(fù)“LTBPS”免費(fèi)領(lǐng)取《《中國(guó)聯(lián)通5G終端白皮書(shū)》
  • 5、回復(fù)“ZGDX”免費(fèi)領(lǐng)取《中國(guó)電信5G NTN技術(shù)白皮書(shū)
  • 6、回復(fù)“TXSB”免費(fèi)領(lǐng)取《通信設(shè)備安裝工程施工工藝圖解
  • 7、回復(fù)“YDSL”免費(fèi)領(lǐng)取《中國(guó)移動(dòng)算力并網(wǎng)白皮書(shū)
  • 8、回復(fù)“5GX3”免費(fèi)領(lǐng)取《 R16 23501-g60 5G的系統(tǒng)架構(gòu)1
  • 對(duì)本帖內(nèi)容的看法? 我要點(diǎn)評(píng)

     
    [充值威望,立即自動(dòng)到帳] [VIP貴賓權(quán)限+威望套餐] 另有大量?jī)?yōu)惠贈(zèng)送活動(dòng),請(qǐng)光臨充值中心
    充值擁有大量的威望和最高的下載權(quán)限,下載站內(nèi)資料無(wú)憂

    快速回復(fù)主題    
    標(biāo)題
    內(nèi)容
     上傳資料請(qǐng)點(diǎn)左側(cè)【添加附件】

    當(dāng)前時(shí)區(qū) GMT+8, 現(xiàn)在時(shí)間是 2025-02-02 14:34:09
    渝ICP備11001752號(hào)  Copyright @ 2006-2016 mscbsc.com  本站統(tǒng)一服務(wù)郵箱:mscbsc@163.com

    Processed in 0.365289 second(s), 13 queries , Gzip enabled
    TOP
    清除 Cookies - 聯(lián)系我們 - 移動(dòng)通信網(wǎng) - 移動(dòng)通信論壇 - 通信招聘網(wǎng) - Archiver