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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python基础概念_6_模块

發布時間:2024/9/27 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python基础概念_6_模块 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

模塊

7 模塊

7.1?簡介

在上一章里我們知道了如何創建和使用函數。如果你想要在其它程序中重用很多函數,那么你該如何實現呢?你可能已經猜到了,答案是使用本章要講的模塊。

模塊可以讓你能夠有邏輯的組織你的Python代碼段。通過把相關的代碼分配到一個模塊里能讓你的代碼更好用,更易懂。模塊就是一個保存了Python代碼的文件。模塊可以定義函數,類和變量,當然模塊里也能包含可執行的代碼。

7.2 ?import語句

如果python文件中想引用另外個文件,則可以使用import語句。這里給個例子:

1) 假設我們將之前的函數getRectangleArea保存成文件MyTools.py。

defgetRectangleArea(length,breadth=2):

??? return "形參里的長度是:"+str(length)+"\t形參里的寬度是"+str(breadth)+"\n當前長方形的面積是:"+str(length*breadth)

?

注:這里文件類型要是utf-8編碼。

2)我們再新建個文件加MyMain.py里面的內容是調用MyTools.py里定義的getRectangleArea函數。

import MyTools

print(MyTools.getRectangleArea(breadth=3,length=8))

?

這段代碼是怎么執行的呢?

首先Python遇到import會在.py文件的當前目錄找MyTools.py這個文件,

當執行到下一行時先會調用MyTools.py里定義的getRectangleArea方法。

最后通過print打印出函數的返回值,也就是3*8=24。

注:這里我們調用getRectangleArea函數時需要加上MyTools.不然會函數未定義的錯:

?

C:\PythonTest>python MyMain.py

Traceback (most recent call last):

? File"MyMain.py", line 2, in <module>

???print(getRectangleArea(breadth=4,length=9))

NameError: name 'getRectangleArea' is notdefined

3)我們在命令行里通過python MyMain.py來驗證:

結果:

形參里的長度是:8??????? 形參里的寬度是3

當前長方形的面積是:24

7.3 from…import 語句

該語句是允許你從模塊中一個指定的部分到當前命名空間中,語法如下:

from modname import name1[, name2[, ...nameN]]

所以上一節我們可以這么寫:

fromMyTools import getRectangleArea

print(getRectangleArea(breadth=4,length=9))

注:這里我們不需要再加MyTools.getRectangleArea

7.4 from…import* 語句

如果想把一個模塊的所有內容都導入到當前的命名空間就可以用該語句。

?

7.5?定位模塊

當我們導入一個模塊,Python解析器對模塊位置的搜索順序是:

?? 當前目錄

?? PYTHONPATH下的每個目錄,這里是Python的環境變量。

?? 默認路徑,如:UNIX下一般為/usr/local/lib/python/

?

7.6 dir函數

如果想了解一個模塊定義的標識符,可以通過dir函數進行查看,這里的標識符有函數、類和變量。比如我們看系統內的sys模塊,可以在python命令行里這么做:

>>>import sys

>>>dir(sys)

結果:

['__displayhook__','__doc__', '__excepthook__', '__interactivehook__', '__loade

r__', '__name__','__package__', '__spec__', '__stderr__', '__stdin__', '__stdou

t__','_clear_type_cache', '_current_frames', '_debugmallocstats', '_enablelegac

ywindowsfsencoding','_getframe', '_home', '_mercurial', '_xoptions', 'api_versi

on', 'argv','base_exec_prefix', 'base_prefix', 'builtin_module_names', 'byteord

er', 'call_tracing','callstats', 'copyright', 'displayhook', 'dllhandle', 'dont

_write_bytecode','exc_info', 'excepthook', 'exec_prefix', 'executable', 'exit',

?'flags', 'float_info', 'float_repr_style','get_asyncgen_hooks', 'get_coroutine

_wrapper','getallocatedblocks', 'getcheckinterval', 'getdefaultencoding', 'getf

ilesystemencodeerrors','getfilesystemencoding', 'getprofile', 'getrecursionlimi

t', 'getrefcount','getsizeof', 'getswitchinterval', 'gettrace', 'getwindowsvers

ion', 'hash_info','hexversion', 'implementation', 'int_info', 'intern', 'is_fin

alizing', 'last_traceback','last_type', 'last_value', 'maxsize', 'maxunicode',

'meta_path','modules', 'path', 'path_hooks', 'path_importer_cache', 'platform',

?'prefix', 'ps1', 'ps2', 'set_asyncgen_hooks','set_coroutine_wrapper', 'setchec

kinterval','setprofile', 'setrecursionlimit', 'setswitchinterval', 'settrace',

'stderr', 'stdin','stdout', 'thread_info', 'version', 'version_info', 'warnopti

ons', 'winver']

?

?

看上去有點復雜,這些都是Python系統預定義的函數或者類。我們還是以求面積的函數為例來講解下dir函數。不過在MyTools.py的getRectangleArea函數后再加個函數MyName,具體內容見下:

defgetRectangleArea(length,breadth=2):

??? return "形參里的長度是:"+str(length)+"\t形參里的寬度是"+str(breadth)+"\n當前長方形的面積是:"+str(length*breadth)

defgetMyName(firstName,LastName):

??? return "我的名字是"+firstName+"\t"+LastName

?

importMyTools

print(dir(MyTools))

?

結果:

我的名字是james bond

['__builtins__','__cached__', '__doc__', '__file__', '__loader__', '__name__',

'__package__','__spec__', 'getMyName','getRectangleArea']

注:這里dir查到的函數就是getMyName和getRectangleArea。

7.7?模塊的__name__

上一節我們執行dir函數查找模塊的標識符時會看到__name__,它是每個模塊內置的屬性,記錄著模塊的名字。所以我們在執行MyMain.py時會有這樣的結果:

MyMain.py文件內容:

importMyTools

print(MyTools.__name__)

print(__name__)

C:\PythonTest>python MyMain.py

結果:

MyTools

__main__

7.8?包

包是一個分層次的文件目錄結構,它定義了一個由模塊及子包下的模塊的組成結構。眾所周知世界分5大洲,其中有亞洲,亞洲里包含中國、印度,它們的首都分別是北京和新德里。我們就通過python代碼結合這個層次來演示下包的概念,它們的層次可表示為下圖樹形結構:

C:\PythonTest>tree /f

注:
1這里為了演示方便僅貼出了MyPackage.py和beijing.py的代碼因為它們的內容大同小異。
2 這里tree是windows/linux里的命令,可以顯示目錄的樹形結構。通過上面可以看出文件夾china和india是一級的。

MyPackage.py代碼:

importworld.asia.china.beijing as beijing

importworld.asia.india.newdelhi as newdelhi

importworld.asia.indiadesc as india

importworld.asia.chinadesc as china

importworld.asiadesc as asia

importworlddesc as world

if__name__ == '__main__':

??? print(beijing.getCurrentLevelName())

??? print(newdelhi.getCurrentLevelName())

??? print(india.getCurrentLevelName())

??? print(china.getCurrentLevelName())

??? print(asia.getCurrentLevelName())

??? print(world.getCurrentLevelName())

beijing.py代碼:

defgetCurrentLevelName(LevelName='beijing'):

??? return "我在第"+str(4)+"層,我是:"+LevelName+"(北京)"+"。我的上層是china(中國)"

?

執行MyPackage.py

C:\PythonTest>python MyPackage.py

結果:

我在第4層,我是:beijing(北京)。我的上層是china(中國)

我在第4層,我是:newdelhi(新德里)。我的上層是india(印度)

我在第3層,我是:india(印度)我的上層是asia(亞洲)

我在第3層,我是:china(中國)我的上層是asia(亞洲)

我在第2層,我是:asia(亞洲)我的上層是world(世界)

我在第1層,我是:world(世界),我的上層沒了

注:

1需要注意個細節,包同一級內的文件夾里不能再存在和包相同的py文件,如果存在了也不能引用里面的模塊。

2 部分源代碼見下:chinadesc.py及indiadesc.py方法與外圍的worlddesc.py方法類似,打印的名字不同而已.以下以MyPackage.py和worlddesc.py為例:

MyPackage.py源碼:

import world.asia.china.beijing as beijing import world.asia.india.newdelhi as newdelhi import world.asia.indiadesc as india import world.asia.chinadesc as china import world.asiadesc as asia import worlddesc as world if __name__ == '__main__':print(beijing.getCurrentLevelName())print(newdelhi.getCurrentLevelName())print(india.getCurrentLevelName())print(china.getCurrentLevelName())print(asia.getCurrentLevelName())print(world.getCurrentLevelName()) ?

worlddesc.py源碼: def getCurrentLevelName(LevelName='world'):return "我在第"+str(1)+"層,我是:"+LevelName+"(世界)"+",我的上層沒了"

完整示例代碼詳見資源:

http://download.csdn.net/detail/shenliang1985/9874376

7.9?總結

通過本章的學習我們知道了模塊可更好將函數封裝起來,還知道了如何自己定義一個模塊,以及自己通過包的方式管理模塊,以及怎么看模塊的內置屬性。接下來,來了解另外個概念數據結構。

?

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Python基础概念_6_模块的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。