python导入包的输入法_python 模块和包的导入
http://www.cnblogs.com/linhaifeng/articles/6379069.html
1,模塊
開源模塊
https://pypi.python.org/pypi
pip/ easy_install
安裝
python setup.py build
python setup.py install
pip install xxxx
添加環(huán)境變量
import os,sys
print (os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
base_dir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
sys.path.append(base_dir)
import 模塊過程
import 此時做了三件事
1.為源文件(spam模塊)創(chuàng)建新的名稱空間,
在spam中定義的函數(shù)和方法 若是使用到了global時訪問的
就是這個名稱空間(spam 的名稱空間)
2. 在新創(chuàng)建的命名空間中執(zhí)行模塊中包含的代碼
3. 創(chuàng)建名字spam來引用該命名空間 ,spam 就相當于變量
被導入模塊有獨立的名稱空間
每個模塊都是一個獨立的名稱空間,
定義在這個模塊中的函數(shù),
把這個模塊的名稱空間當做全局名稱空間,
這樣我們在編寫自己的模塊時,
就不用擔心我們定義在自己模塊中全局變量會在被導入時,
與使用者的全局變量沖突
4. 導入模塊的方式
import module
from module.xx.xx import xx
from module.xx.xx import xx as rename
from module.xx.xx import * ? # 不推薦使用
# from xxx import xxx
# 會和本文件里面的變量沖突,
# 如果本文件里面和模塊里面都有,優(yōu)先找本文件里面的變量,再去模塊里面的
# 當前位置直接使用read1和read2就好了,執(zhí)行時,仍然以spam.py文件全局名稱空間
# 導入的方法在執(zhí)行時,始終是以源文件為準的
# 如果當前有重名read1或者read2,那么會有覆蓋效果
from spam import read1 as read
# 多行導入
from spam import (read1,
read2,
money)
"""
[guazhang@dhcp-12-129 aa]$ tree
.
├── bb
│?? ├── cc
│?? │?? └── dd.py
│?? └── ee.py
├── ff.py
└── test_module.py
總結
首先要先把aa 添加到環(huán)境變量里面。
aa已經(jīng)添加到環(huán)境變量里面了,那么在aa 里面的文件或文件夾都可以直接導入,
如果是文件夾,那么就用 from ... import ... 方式, import 后面可以是文件也可以是文件里面的功能
如果import 后面是文件,調用里面的功能就要帶上文件名,比如
f1 是函數(shù)名,dd 是包含f1的文件 , bb 是aa下面的文件夾
from bb.cc.dd import f1
f1()
from bb.cc import dd
dd.f1()
from ff import f1 # ff 是aa 下面的文件,包含f1 功能
f1()
當用的是python3 解釋器的時候,文件夾里面沒有__init__.py 也不會報錯,會自動幫你補上
pyton2 就需要__init__.py 。
"""
import os,sys
print(os.path.dirname(__file__))
sys.path.append(os.path.dirname(__file__))
# /home/guazhang/PycharmProjects/python19/day4/模塊/aa 添加到環(huán)境變量
def f1():
print("from local")
from bb.ee import f1
f1()
from ff import f1
f1()
from bb.cc.dd import f1
f1()
from bb.cc import dd
dd.f1()
# from aa.ff import f1
# f1()
"""
/home/guazhang/PycharmProjects/python19/day4/模塊/aa
from cc
from bb
spam模塊:
spam模塊:
"""
模塊和腳本的關系
"""
http://www.cnblogs.com/linhaifeng/articles/6384466.html
http://www.cnblogs.com/linhaifeng/articles/6379069.html
如果s模塊中的名字前加_,即 _money,則from spam import *,則_money不能被導入
我們自定義的模塊名不應該與系統(tǒng)內置模塊重名
把模塊當做腳本執(zhí)行
我們可以通過模塊的全局變量__name__來查看模塊名:
當做腳本運行:
__name__ 等于'__main__'
當做模塊導入:
__name__=
作用:用來控制.py文件在不同的應用場景下執(zhí)行不同的邏輯
if __name__ == '__main__': # 當成腳本的形式去執(zhí)行
"""
模塊搜索路徑
"""
模塊搜索路進
模塊的查找順序是:內存中已經(jīng)加載的模塊->內置模塊->sys.path路徑中包含的模塊
python解釋器在啟動時會自動加載一些模塊到內存中,可以使用sys.modules查看
搜索路徑:
當一個命名為spam的模塊被導入時
解釋器首先會從內建模塊中尋找該名字
找不到,則去sys.path中找該名字
sys.path從以下位置初始化
1 執(zhí)行文件所在的當前目錄
2 PTYHONPATH(包含一系列目錄名,與shell變量PATH語法一樣)
3 依賴安裝時默認指定的
包
"""
# 包 ,是一個里面有__init__.py 的文件夾
環(huán)境變量是以執(zhí)行文件為準,不能操作包里面的目錄結構
#具體的:包就是一個包含有__init__.py文件的文件夾,
所以其實我們創(chuàng)建包的目的就是為了用文件夾將文件/模塊組織起來
#需要強調的是:
1. 在python3中,即使包下沒有__init__.py文件,
import 包仍然不會報錯,而在python2中
包下一定要有該文件,否則import 包報錯
2. 創(chuàng)建包的目的不是為了運行,而是被導入使用,記住,
包只是模塊的一種形式而已,包的本質就是一種模塊
#1.關于包相關的導入語句也分為import和from ... import ...兩種,
但是無論哪種,無論在什么位置,
在導入時都必須遵循一個原則:凡是在導入時帶點的,
點的左邊都必須是一個包,否則非法。
可以帶有一連串的點,如item.subitem.subsubitem,
但都必須遵循這個原則。但對于導入后,在使用時就沒有這種限制了,
點的左邊可以是包,模塊,函數(shù),類(它們都可以用點的方式調用自己的屬性)。
#2、import導入文件時,產(chǎn)生名稱空間中的名字來源于文件,
import 包,產(chǎn)生的名稱空間的名字同樣來源于文件,
即包下的__init__.py,導入包本質就是在導入該文件
#3、包A和包B下有同名模塊也不會沖突,如A.a與B.a來自倆個命名空間
"""
5.time 模塊
6 random 模塊
7. OS 模塊
8. sys 模塊
### 打印進度條
import sys,time
for i in range(10):
sys.stdout.write("#")
sys.stdout.flush()
time.sleep(0.3) # 進度條
sys.stdin.readline()[:-1] :打印輸入的內容并刪除最好一個動作
9. pickle/json .
pickle 支持的可序列的類型更多
json :支持多種語言,ruby,java
# 序列化, 字符串轉到內存中
import pickle
f = open("user_acc.txt","wb")
#f.write(b"test")
#f.write("123") ## 要轉化為字符串
info = {
"alex":"123",
"jon":"2222"
}
f.write(pickle.dumps(info))
f.close()
## 從內存里面反序列化, 從內存轉為字符串
##字典,列表是內存里的,保存不了 。 字符串是才可以存在硬盤中
import pickle
f = open("user_acc.txt","rb")
data_from_atm = pickle.loads(f.read())
print (data_from_atm)
總結
以上是生活随笔為你收集整理的python导入包的输入法_python 模块和包的导入的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 两条直线求交点c语言,C§ 3.3.1两
- 下一篇: mysql高级查询面试_高级MySQL数