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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python学习 Day 025 -模块相关

發(fā)布時間:2024/4/15 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python学习 Day 025 -模块相关 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

主要內(nèi)容:

  • 1. 模塊
  • 2. import
  • 3. from xxx import xxx

1.模塊

? ?(1)模塊的概述

? ?模塊就是一個包含了python定義和聲明的文件, 文件名就是模塊的名字加上.py后綴,也就是說我們目前寫的所有的py文件都可以看成是一個模塊

? ?但是我們import加載的模塊一共分成四個通用類別.

  • ?使用pyhton編寫的py文件
  • ?已被變異為共享庫或者DLL或C或者C++的擴展
  • ?包好?組模塊的包.
  • ?使用c編寫并連接到python解釋器的內(nèi)置模塊

(2)模塊的使用緣由

使用模塊是為了我們寫的代碼可以重用,不至于把所有的代碼都寫在一個文件內(nèi),當(dāng)項目規(guī)模比較小的時候. 完全可以使用一個py搞定整個項目的開發(fā),但是如果是一個非常龐大的項目,此時就必須要把相關(guān)的功能進(jìn)行分離,方便我們?nèi)粘>S護(hù),以及新項目的開發(fā).? ?

(3)模塊的使用? ? ? ? ? ? ?

? ? ?導(dǎo)入模塊有兩種方式? ? ? ? ? ?

  • import 模塊? ? ? ? ? ?
  • from xxx import xxxx

2. import

print("片頭曲,倚天屠龍........") main_person_man = "張無忌" main_person_woman = "趙敏"bad_person_one = "成昆" bad_person_two = "周芷若"def fight_on_light_top():print(main_person_man, "粉碎了",bad_person_one ,"的陰謀")def fight_in_shaolin():print(main_person_man, "粉碎了", bad_person_two, "的陰謀")

打開另一個py文件

import yitian print(yitian.main_person_man) # 使?用模塊中定義好的名字 print(yitian.bad_person_one)yitian.fight_in_shaolin() # 調(diào)?用模塊中的函數(shù) yitian.fight_on_light_top()

此時在這個py文件中引入了yitian模塊

注: 在Python中模塊是不能夠重復(fù)導(dǎo)入的,當(dāng)重復(fù)導(dǎo)入模塊時,系統(tǒng)會根據(jù)sys.modules來判斷該模塊是否已經(jīng)導(dǎo)入了,如果已經(jīng)導(dǎo)入,則不會重復(fù)導(dǎo)

import sys print(sys.modules.keys()) # 查看導(dǎo)?入的模塊. import yitian # 導(dǎo)?入模塊. 此時會默認(rèn)執(zhí)行該模塊中的代碼 import yitian # 該模塊已經(jīng)導(dǎo)入過了. 不會重復(fù)執(zhí)行代碼 import yitian import yitian

導(dǎo)入模塊(import之后)時候做了什么?

  • python解釋器會先通過 sys.modules來判斷該模塊是否已經(jīng)導(dǎo)入了該模塊. 如果已經(jīng)導(dǎo)入了則不再導(dǎo)入.
  • 為導(dǎo)入的模塊創(chuàng)立新的名稱空間? ? ? ? ? ?
  • 在新創(chuàng)建的名稱空間中運行該模塊中的代碼? ? ? ? ? ?
  • 創(chuàng)建模塊的名字,并使用該名稱作為該模塊在當(dāng)前模塊中引用的名字.

我們可以使用globals來查看模塊的名稱空間

import yitian print(globals()) #{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000018141DE4A90>, # '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/Python_workspace/day 025/金庸.py', '__cached__': None, # 'yitian': <module 'yitian' from 'E:\\Python_workspace\\day 025\\yitian.py'>}

注意. 由于模塊在導(dǎo)入的時候會創(chuàng)建其自己的名稱空間,所以,我們在使用模塊中的變量的時候一般是不會產(chǎn)生沖突的

import yitian main_person_man="蕭峰" def fight_in_shaolin():print(main_person_man+"大戰(zhàn)掃地僧") print(yitian.main_person_man) #張無忌 print(main_person_man) #蕭峰 yitian.fight_in_shaolin() #張無忌粉碎了周芷若的陰謀 fight_in_shaolin() #蕭峰大戰(zhàn)掃地僧

注意. 在模塊中使用global. 我們之前說global表示把全局的內(nèi)容引入到局部,但是,這個全局指的是py文件,換句句話說. global指向的是模塊內(nèi)部. 并不會改變外部模塊的內(nèi)容?

print("片頭曲,倚天屠龍........") main_person_man = "張無忌" main_person_woman = "趙敏"bad_person_one = "成昆" bad_person_two = "周芷若"def fight_on_light_top():print(main_person_man+"粉碎了"+bad_person_one+"的陰謀")def fight_in_shaolin():global bad_person_twobad_person_two = "戰(zhàn)五渣"print(main_person_man+"粉碎了"+bad_person_two+"的陰謀")# 調(diào)用方 import yitian bad_person_two = "宋青書" yitian.fight_in_shaolin() print(yitian.bad_person_two) # 戰(zhàn)五渣 print(bad_person_two) # 宋青書,并沒有改變當(dāng)前模塊中的內(nèi)容. 所以模塊內(nèi)部的 global只是用于模塊內(nèi)部

特別特別要注意:如果我們在不同的模塊中引入了同一個模塊. 并且在某一個模塊中改變了被引入模塊中的全局變量,則其他模塊看到的值也跟著邊,原因是python的模塊只會引入一次,大家共享同一個名稱空間

金庸: import yitian yitian.main_person_man = "滅絕師太" 金庸二號: import yitian import 金庸 print(yitian.main_person_man) # 滅絕師太

?上述問題出現(xiàn)的原因:? ? ? ? ? ? ?

  • 大家共享同一個模塊的名稱空間? ? ? ? ??
  • 在金庸里改變了主角的名字? ? ? ? ?

可以利用一下__name__ 這個內(nèi)置變量

在Python中,每個模塊都有自己的__name__ 但是這個__name__的值是不定的.

當(dāng)我們把?個模塊作為程序運行的入口時,此時該模塊的__name__是"__main__" ,而如果我們把模塊導(dǎo)入時,此時模塊內(nèi)部的__name__就是該模塊自?身的名字

金庸: print(__name__) # 此時如果運行該文件. 則__name__是__main__ 金庸二號: import 金庸 #此時打印的結(jié)果是"金庸"

?我們可以利用這個特性來控制模塊內(nèi)哪些代碼是在被加載的時候就運行的,哪些是在模塊被別人導(dǎo)入的時候就要執(zhí)行的,也可以屏蔽掉一些不希望別人導(dǎo)入就運行的代碼,尤其是測試代碼.

if __name__ == '__main__': yitian.main_person_man = "滅絕師太" # 此時, 只有從該模塊作為?口運行的時候才會把main_person_man設(shè)置成滅絕師太 print("哇哈哈哈哈哈") # 只有運行該模塊才會打印. import的時候是不會執(zhí)行這里的代碼的

? 我們還可以對導(dǎo)入的模塊進(jìn)行重新命名:

import yitian as yt # 導(dǎo)入yitian. 但是名字被重新命名成了yt. 就好比變量賦值一樣. a = 1 b = a yt.fight_in_shaolin() # 此時可以正常運行 # yitian.fight_in_shaolin() # 此時程序報錯. 因為引入的yitian被重命名成了了yt print(globals()) {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x103209438>,

'__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__':

'/Users/sylar/PycharmProjects/oldboy/模塊/模塊/金庸.py', '__cached__': None, 'yt': <module 'yitian' from '/Users/sylar/PycharmProjects/oldboy/模塊/模 塊/yitian.py'>}

一次可以引入多個模塊

import time, random, json, yitian

? 正確的導(dǎo)入模塊的順序:? ? ? ? ? ?

  • 所有的模塊導(dǎo)入都要寫在最上面,這是最基本的? ? ? ? ? ?
  • 先引入內(nèi)置模塊? ? ? ? ? ?
  • 再引入擴展模塊? ? ? ? ? ?
  • 最后引入你自己定義的模塊

?

3. from xxx import xxx

在使用from的時候, python也會給我們的模塊創(chuàng)建名稱空間,這一點和import是?樣的,但是from xxx import xxx的時候,我們是把這個空間中的一些變量引入過來了,說白了,就 是部分導(dǎo)入,當(dāng)一個模塊中的內(nèi)容過多的時候. 我們可以選擇性的導(dǎo)入要使用的內(nèi)容.?

from yitian import fight_in_shaolin
fight_in_shaolin()

此時是可以正常運行的. 但是我們省略了之前的模塊,函數(shù)() 直接函數(shù)()就可以執(zhí)行了, 并且from語句也支持?行語句導(dǎo)入多個內(nèi)容.?

from yitian import fight_in_shaolin, fight_on_light_top, main_person_man fight_in_shaolin() fight_on_light_top() print(main_person_man)

同樣支持as

from yitian import fight_in_shaolin, fight_on_light_top, main_person_man as big_lao fight_in_shaolin() fight_on_light_top() print(big_lao)

最后. 看一下from的坑,當(dāng)我們從一個模塊中引入一個變量的時候,如果當(dāng)前文件中出現(xiàn)了重名的變量時. 會覆蓋掉模塊引入的那個變量.

from yitian import main_person_man main_person_man = "超級大滅絕" print(main_person_man)

所以,不要重名 切記. 不要重名! 不僅是變量量名不要重復(fù),我們自己創(chuàng)建的py文件的名字不要和系統(tǒng)內(nèi)置的模塊重名.否則,引入的模塊都是python內(nèi)置的模塊. 切記, 切記.?

?

轉(zhuǎn)載于:https://www.cnblogs.com/wcx666/p/9772765.html

總結(jié)

以上是生活随笔為你收集整理的Python学习 Day 025 -模块相关的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。