Python中的導入模塊

1,導入模塊的的幾種方式

模塊是什麼?
模塊實際上就是 以.py爲結尾的文件
注意點:自定義的模塊儘可能不要和系統模塊重名python

模塊內部封裝了不少實用的功能,有時在模塊外部調用就須要將其導入,導入模塊簡單劃分,實際上就只有兩種:linux

  • import ……
  • from …… import

詳細一點劃分有五種:web

  • 1,improt 模塊名
    調用:模塊名.功能名
  • 2,import 模塊名 as 別名
    調用:別名.功能名
  • 3,from 模塊名 import 功能名
    調用:直接功能名
  • 4,from 模塊名 import 功能名 as 別名
    調用: 直接拿別名來用
  • 5,from 模塊名 import * (用 * 號 一次性導入全部功能)
    調用:直接功能名
    注意點:* 號無法用別名

2,模塊的搜索路徑

sys.path 返回導入模塊時的搜索路徑集,是一個list列表。app

這裏寫圖片描述

  • 從上面列出的目錄裏依次查找要導入的模塊文件
  • ’ ’ 表示當前路徑
  • 列表中的路徑的前後順序表明了python解釋器在搜索模塊時的前後順序

能夠添加新的模塊:svg

  • sys.path.append(‘/home/python/xxx’)
  • sys.path.insert(0, ‘/home/python/xxx’) # 能夠確保先搜索這個路徑
  • 注意點:sys.path.append(path)和sys.path.insert(path)添加的相關路徑,在退出交互式環境或者IDE後會自動消失。
In [37]: sys.path.insert(0,"/home/python/xxxx")
In [38]: sys.path
Out[38]:
['/home/python/xxxx',
 '',
 '/usr/bin',
 '/usr/lib/python35.zip',
 '/usr/lib/python3.5',
 '/usr/lib/python3.5/plat-x86_64-linux-gnu',
 '/usr/lib/python3.5/lib-dynload',
 '/usr/local/lib/python3.5/dist-packages',
 '/usr/lib/python3/dist-packages',
 '/usr/lib/python3/dist-packages/IPython/extensions',
 '/home/python/.ipython']

3,從新導入模塊

模塊被導入後,import module不能從新導入模塊,從新導入需用reloadspa

建立一個reload_test.py文件,裏面寫一個test方法3d

這裏寫圖片描述

打開 ipython 終端導入 reload_test 模塊code

這裏寫圖片描述

修改reload_test.py 文件中的test方法xml

這裏寫圖片描述

再一次import reload_test 模塊 而後調用test方法會發現值沒變
這裏寫圖片描述blog

緣由:import 導入模塊只會導入一次,所以即便模塊被修改了,import也不會從新導入
解決方案

  1. 關閉終端,從新打開,而後再import 導入一次
  2. 用 reload 能夠在不關閉終端的狀況下從新導入

這裏寫圖片描述

4,多模塊開發時,要注意修改導入模塊的值時,from……import 與 import 導入模塊的區別

main.py

from send import *
from show import *

# 主流程
def main():
    # 發女友
    send()
    # 秀恩愛
    show()


if __name__ == '__main__':
    main()

send.py

#import girl
from girl import *

# 發女友
def send():
    print("發女友了,翠花是你的了")
    #girl.have_girl = True
    have_girl = True

show.py

# import girl
from girl import *

# 秀恩愛
def show():
    if have_girl == True:
    #if girl.have_girl == True:
        print("我有女友了,好開心")
    else:
        print("單身貴族")

girl.py

# 共同變量模塊

have_girl = False #False表明沒有女友 True表明有女友

運行結果:

發女友了,翠花是你的了
單身貴族

是否是有點驚訝?結果難道,不該該是這樣的嗎:

發女友了,翠花是你的了
我有女友了,好開心

會產生這種狀況的緣由:
import girl 能夠理解爲地址的複製,也就是 引用 用來修改值
from girl import * 能夠理解成內容的複製,也就是深拷貝,那麼深拷貝有什麼特色,深拷貝最大的特色就是數據獨立。
這裏寫圖片描述

相關文章
相關標籤/搜索
每日一句
    每一个你不满意的现在,都有一个你没有努力的曾经。