一般使用import和from...import...導(dǎo)入模塊。

以下述spam.py內(nèi)的文件代碼為例。

            
              '''
遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:857662006 
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書!
'''
# spam.py
print('from the spam.py')

money = 1000

def read1():
    print('spam模塊:', money)

def read2():
    print('spam模塊')
    read1()

def change():
    global money
    money = 0
            
          

一、import 模塊名

            
              # run.py
import spam  # from the spam.py
import spam
            
          

import首次導(dǎo)入模塊發(fā)生了3件事:

  1. 以模塊為準(zhǔn)創(chuàng)造一個模塊的名稱空間
  2. 執(zhí)行模塊對應(yīng)的文件,將執(zhí)行過程中產(chǎn)生的名字都丟到模塊的名稱空間
  3. 在當(dāng)前執(zhí)行文件中拿到一個模塊名

模塊的重復(fù)導(dǎo)入會直接飲用之前創(chuàng)造好的結(jié)果,不會重復(fù)執(zhí)行模塊的文件,即重復(fù)導(dǎo)入會發(fā)生:spam=spam=模塊名稱空間的內(nèi)存地址

            
              '''
遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:857662006 
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書!
'''
# run.py
import spam as sm

money = 111111

sm.money
sm.read1()  # 'spam模塊:1000'
sm.read2
sm.change()

print(money)  # 1000
            
          

導(dǎo)入多個模塊

            
              import spam, time, os

# 推薦使用下述方式
import spam
import time
import os
            
          

二、from 模塊名 import 具體的功能

            
              # run.py

from spam import money

money = 10

print(money)  # 10
            
          

from...import...首次導(dǎo)入模塊發(fā)生了3件事:

  1. 以模塊為準(zhǔn)創(chuàng)造一個模塊的名稱空間
  2. 執(zhí)行模塊對應(yīng)的文件,將執(zhí)行過程中產(chǎn)生的名字都丟到模塊的名稱空間
  3. 在當(dāng)前執(zhí)行文件的名稱空間中拿到一個名字,該名字直接指向模塊中的某一個名字,意味著可以不用加任何前綴而直接使用
  • 優(yōu)點(diǎn):不用加前綴,代碼更加精簡
  • 缺點(diǎn):容易與當(dāng)前執(zhí)行文件中名稱空間中的名字沖突

導(dǎo)入文件內(nèi)所有的功能:

            
              '''
遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:857662006 
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書!
'''
# spam.py

__all__ = ['money', 'read1']  # 只允許導(dǎo)入'money'和'read1'
# run.py
from spam import *  # 導(dǎo)入spam.py內(nèi)的所有功能,但會受限制于__all__
            
          

三、import和from...import...的異同

相同點(diǎn):

  1. 兩者都會執(zhí)行模塊對應(yīng)的文件,兩者都會產(chǎn)生模塊的名稱空間
  2. 兩者調(diào)用功能時,需要跑到定義時尋找作用域關(guān)系,與調(diào)用位置無關(guān)

不同點(diǎn)

  1. import需要加前綴;from...import...不需要加前綴