在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ Python模塊
Python異常處理
Python循環(huán)
Python基本運(yùn)算符
Python網(wǎng)絡(luò)編程(Sockets)
Python可以開發(fā)哪些程序?
Python XML解析和處理
Python數(shù)字
Python函數(shù)
Python變量類型
Python os模塊方法
Python迭代器
Python安裝和環(huán)境配置
Python構(gòu)造函數(shù)
Python文件對象方法
Python日期和時(shí)間
Python的歷史
Python生成器
Python+MySQL數(shù)據(jù)庫操作(PyMySQL)
Python命令行參數(shù)
Python元組
Python發(fā)送郵件
Python列表
Python文件讀寫
Python教程
Python面向?qū)ο螅惡蛯ο螅?/span>
Python多線程編程
Python多重繼承
Python決策
Python是什么?
Python快速入門
Python繼承
Python字典
Python字符串
Python操作符重載
Python正則表達(dá)式
Python閉包
Python修飾器
Python功能特點(diǎn)
Python模塊

Python模塊

模塊允許邏輯地組織Python代碼。 將相關(guān)代碼分組到一個(gè)模塊中,使代碼更容易理解和使用。 模塊是一個(gè)具有任意命名屬性的Python對象,可以綁定和引用。

簡單來說,模塊是一個(gè)由Python代碼組成的文件。模塊可以定義函數(shù),類和變量。 模塊還可以包括可運(yùn)行的代碼。

示例

下面是一個(gè)名稱為aname的模塊的Python代碼通常位于一個(gè)名稱為aname.py的文件中。以下是一個(gè)簡單模塊的例子:support.py -

def print_func( par ):
   print "Hello : ", par
   return

1.import語句

可以通過在其他Python源文件中執(zhí)行import語句來將任何Python源文件用作模塊。導(dǎo)入具有以下語法 -

import module1[, module2[,... moduleN]

當(dāng)解釋器遇到導(dǎo)入語句時(shí),如果模塊存在于搜索路徑中,則導(dǎo)入該模塊。搜索路徑是導(dǎo)入模塊之前解釋器搜索的目錄的列表。例如,要導(dǎo)入模塊hello.py,需要將以下命令放在腳本的頂部 -

#!/usr/bin/python3

# Import module support
import support

# Now you can call defined function that module as follows
support.print_func("Maxsu")

當(dāng)執(zhí)行上述代碼時(shí),會(huì)產(chǎn)生以下結(jié)果 -

Hello : Maxsu

不管模塊被導(dǎo)入多少次,模塊只能加載一次。這樣可以防止模塊執(zhí)行重復(fù)發(fā)生,如果有多個(gè)導(dǎo)入。

2.from…import語句

Python from語句允許將模塊中的特定屬性導(dǎo)入到當(dāng)前的命名空間中。 from...import具有以下語法 -

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

例如,要從模塊 fib 導(dǎo)入函數(shù)fibonacci,請使用以下語句 -

#!/usr/bin/python3

# Fibonacci numbers module

def fib(n): # return Fibonacci series up to n
   result = []
   a, b = 0, 1
   while b < n:
      result.append(b)
      a, b = b, a + b
   return result
>>> from fib import fib
>>> fib(100)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

此語句不會(huì)將整個(gè)模塊fib導(dǎo)入到當(dāng)前命名空間中; 它只是將fibonacci從模塊fib引入導(dǎo)入模塊的全局符號表。

3.from…import *語句

也可以使用以下import語句將模塊中的所有名稱導(dǎo)入到當(dāng)前命名空間中 -

from modname import *

這提供了將所有項(xiàng)目從模塊導(dǎo)入到當(dāng)前命名空間中的簡單方法; 但是,這個(gè)說法應(yīng)該謹(jǐn)慎使用。

4.執(zhí)行模塊作為腳本

在模塊中,模塊的名稱(作為字符串)可用作全局變量__name__的值。模塊中的代碼將被執(zhí)行,就像您導(dǎo)入它一樣,但是__name__設(shè)置為“__main__”。

在模塊的最后添加這個(gè)代碼 -

#!/usr/bin/python3

# Fibonacci numbers module

def fib(n): # return Fibonacci series up to n
   result = []
   a, b = 0, 1
   while b < n:
      result.append(b)
      a, b = b, a + b
   return result
if __name__ == "__main__":
   f = fib(100)
   print(f)

運(yùn)行上述代碼時(shí),將顯示以下輸出。

[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

5.定位模塊

當(dāng)導(dǎo)入模塊時(shí),Python解釋器將按以下順序搜索模塊 -

  • 當(dāng)前目錄。
  • 如果沒有找到該模塊,Python會(huì)在shell變量PYTHONPATH中搜索每個(gè)目錄。
  • 如果其他所有失敗,Python將檢查默認(rèn)路徑。 在UNIX上,此默認(rèn)路徑通常是/usr/local/lib/python3/ 或者 /usr/sbin/

模塊搜索路徑作為sys.path變量存儲(chǔ)在系統(tǒng)模塊sys中。sys.path變量包含當(dāng)前目錄PYTHONPATH和依賴于安裝的默認(rèn)值。

6.PYTHONPATH變量

PYTHONPATH是一個(gè)環(huán)境變量,由目錄列表組成。 PYTHONPATH的語法與shell變量`PATH```的語法相同。

這是一個(gè)典型的Windows系統(tǒng)上的PYTHONPATH -

set PYTHONPATH = c:\python34\lib;

這里是UNIX系統(tǒng)的典型PYTHONPATH -

set PYTHONPATH = /usr/local/lib/python

7.命名空間和范圍

變量是映射到對象的名稱(標(biāo)識(shí)符)。 命名空間是變量名(鍵)及其對應(yīng)對象(值)的字典。

  • Python語句可以訪問本地命名空間和全局命名空間中的變量。如果本地和全局變量具有相同的名稱,則局部變量會(huì)影響全局變量。
  • 每個(gè)函數(shù)都有自己的本地命名空間。 類方法遵循與普通函數(shù)相同的范圍規(guī)則。
  • Python對于變量是本地還是全局都進(jìn)行了有根據(jù)的判斷。它假定在函數(shù)中分配值的任何變量都是本地的。
  • 因此,為了將值分配給函數(shù)內(nèi)的全局變量,必須首先使用global語句。
  • 語句global VarName告訴Python VarName是一個(gè)全局變量。Python停止搜索本地命名空間的變量。

例如,在全局命名空間中定義一個(gè)變量Money。 在函數(shù)Money中為Money賦值,因此Python將Money作為局部變量。

但是,如果在設(shè)置之前就訪問了本地變量Money的值,它會(huì)產(chǎn)生一個(gè)錯(cuò)誤:UnboundLocalError。 這里可以通過取消注釋global語句來解決問題。如下示例代碼 -

#!/usr/bin/python3

Money = 2000
def AddMoney():
   # Uncomment the following line to fix the code:
   # global Money
   Money = Money + 1

print (Money)
AddMoney()
print (Money)

8.dir( )函數(shù)

dir()內(nèi)置函數(shù)返回一個(gè)包含由模塊定義的名稱的字符串的排序列表。這個(gè)列表包含模塊中定義的所有模塊,變量和函數(shù)的名稱。 以下是一個(gè)簡單的例子 -

#!/usr/bin/python3

# Import built-in module math
import time

content = dir(time)

print (content)

當(dāng)執(zhí)行上述代碼時(shí),會(huì)產(chǎn)生以下結(jié)果 -

['_STRUCT_TM_ITEMS', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'altzone', 'asctime', 'clock', 'ctime', 'daylight', 'get_clock_info', 'gmtime', 'localtime', 'mktime', 'monotonic', 'perf_counter', 'process_time', 'sleep', 'strftime', 'strptime', 'struct_time', 'time', 'timezone', 'tzname']

這里,特殊的字符串變量__name__是模塊的名稱,__file__是加載模塊的文件名。

9.globals()和locals()函數(shù)

globals()locals()函數(shù)可用于返回全局和本地命名空間中的名稱,具體取決于它們被調(diào)用的位置。

  • 如果locals()從一個(gè)函數(shù)中調(diào)用,它將返回從該函數(shù)本地訪問的所有名稱。
  • 如果從函數(shù)中調(diào)用globals(),它將返回從該函數(shù)全局訪問的所有名稱。

這兩個(gè)函數(shù)的返回類型是字典。 因此,可以使用keys()函數(shù)提取名稱。

10.reload()函數(shù)

當(dāng)將模塊導(dǎo)入到腳本中時(shí),模塊的頂級部分的代碼只能執(zhí)行一次。
因此,如果要重新執(zhí)行模塊中的頂級代碼,可以使用reload()函數(shù)。reload()函數(shù)再次導(dǎo)入以前導(dǎo)入的模塊。 reload()函數(shù)的語法是這樣的 -

reload(module_name)

這里,module_name是要重新加載的模塊的名稱,而不是包含模塊名稱的字符串。 例如,要重新加載hello模塊,請執(zhí)行以下操作 -

reload(hello)

11.Python中的包

Python中的包是一個(gè)分層文件目錄結(jié)構(gòu),它定義了一個(gè)由模塊和子包和子子包組成的Python應(yīng)用程序環(huán)境,等等。

package目錄中創(chuàng)建兩個(gè)目錄:pkgpkg2, 然后分別在這兩個(gè)目錄中創(chuàng)建兩個(gè)文件:a.pyb.py。該文件具有以下一行源代碼 -

文件: pkg/a.py -

#!/usr/bin/python3
#coding=utf-8
# save file: pkg/a.py
def fun():
    print ("I'm pkg.a.fun() ")

文件: pkg/b.py -

#!/usr/bin/python3
#coding=utf-8
# save file: pkg/b.py
def fun():
    print ("I'm pkg.b.fun() ")

文件: pkg2/a.py -

#!/usr/bin/python3
#coding=utf-8
# save file: pkg2/a.py
def fun():
    print ("I'm pkg2.a.fun() ")

文件: pkg2/b.py -

#!/usr/bin/python3
#coding=utf-8
# save file: pkg2/b.py
def fun():
    print ("I'm pkg2.b.fun() ")

package目錄中創(chuàng)建一個(gè)主程序文件:main.py,用于演示如何調(diào)用包中的各個(gè)文件 -

#!/usr/bin/python3
#coding=utf-8
# save file: phone/pots.py

import pkg.a as a
import pkg.b as b

import pkg2.a as a2
import pkg2.b as b2

a.fun()
b.fun()

a2.fun()
b2.fun()

import pkg2.a
import pkg2.b

print('----------- another way -----------------')
pkg2.a.fun()
pkg2.b.fun()

整個(gè)代碼的目錄如下所示 -

package
  |- pkg
      |- __init__.py
      |- a.py
      |- b.py
  |- pkg2
      |- __init__.py
      |- a.py
      |- b.py

當(dāng)執(zhí)行上述代碼時(shí),會(huì)產(chǎn)生以下結(jié)果 -

I'm pkg.a.fun() 
I'm pkg.b.fun() 
I'm pkg2.a.fun() 
I'm pkg2.b.fun() 
----------- another way -----------------
I'm pkg2.a.fun() 
I'm pkg2.b.fun()

在上面的例子中,將每個(gè)文件中的一個(gè)函數(shù)作為示例,但是可以在文件中編寫多個(gè)函數(shù)。還可以在這些文件中定義不同的Python類,然后可以使用這些類來創(chuàng)建包。


上一篇:Python繼承下一篇:Python數(shù)字