本篇索引 (1)Python解釋器 (2)Python交互式會(huì)話 (3)運(yùn)行Python程序 (4)解釋器內(nèi)置類型 (1)Python解釋器● 基本用法 Python解釋器可以在命令行模式下運(yùn)行,以下是運(yùn)行語法: python [options] [-c cmd | filename | - ] [args] 若指定filename ,,則Python解釋器將打開指定文件并執(zhí)行其語句,,直到文件結(jié)束標(biāo)志; 若filename 未指定,,則進(jìn)入“交互式會(huì)話”,。 -c cmd 選項(xiàng)可用于以命令行選項(xiàng)形式執(zhí)行短程序,如:python -c "print('hello')"
args 參數(shù)將通過sys.args 傳遞給程序,,程序中可讀出這些參數(shù),。
以下是常用 [options] 選項(xiàng) 選項(xiàng) | 說明 |
---|
-B | 阻止在導(dǎo)入時(shí)創(chuàng)建 .pyc 或 .pyo 文件 | -E | 忽略環(huán)境變量 | -h | 打印所有可用命令行選項(xiàng)的列表 | -i | 在程序執(zhí)行后進(jìn)入交互模式(對(duì)調(diào)試很有用) | -m module | 以腳本的形式運(yùn)行庫模塊 module | -O | 優(yōu)化模式 | -OO | 優(yōu)化模式,在創(chuàng)建 .pyo 文件時(shí)刪除文檔字符串 | -s | 阻止將用戶站點(diǎn)目錄添加到 sys.path | -S | 阻止包含 site 初始化模塊 | -t | 報(bào)告關(guān)于不一致的制表符使用警告 | -tt | 由于不一致的制表符使用而導(dǎo)致 TabError 異常 | -u | 未緩沖的二進(jìn)制 stdout 和 stdin | -U | 在Python2中,,使所有字符串字面量都以 Unicode 形式處理(Python3中無效) | -v | 詳細(xì)模式,,跟蹤導(dǎo)入語句 | -V | 打印版本號(hào)并退出 | -x | 跳過源程序的第一行 | -c cmd | 以字符串形式執(zhí)行 cmd |
● 環(huán)境變量 Python啟動(dòng)時(shí),會(huì)從操作系統(tǒng)中讀取一些環(huán)境變量(如果有),,以下是一些常用的環(huán)境變量: 環(huán)境變量 | 說明 |
---|
PYTHONPATH | 以冒號(hào)分隔的模塊搜索路徑,,在Windows上,還可以從 HKEY_LOCAL_MACHINE/Software/Python 的注冊(cè)表項(xiàng)讀取 | PYTHONSTARTUP | 在以交互方式啟動(dòng)時(shí)執(zhí)行的文件 | PYTHONHOME | Python的安裝位置 | PYTHONINSPECT | 相當(dāng)于 -i 選項(xiàng) | PYTHONBUFFERED | 相當(dāng)于 -u 選項(xiàng) | PYTHONIOENCODING | 針對(duì) stdin, stdout, stderr 的編碼和錯(cuò)誤處理,這是一個(gè) encoding[:errors] 形式的字符串,,如:utf-8:ignore | PYTHONDONTWRITEBYTECODE | 相當(dāng)于 -B 選項(xiàng) | PYTHONOPTIMIZE | 相當(dāng)于 -O 選項(xiàng) | PYTHONNOUSERSITE | 相當(dāng)于 -s 選項(xiàng) | PYTHONVERBOSE | 相當(dāng)于 -v 選項(xiàng) | PYTHONUSERBASE | 每個(gè)用戶站點(diǎn)包的根目錄 | PYTHONCASEOK | 指示對(duì)導(dǎo)入所使用的模塊名稱使用不區(qū)分大小寫的匹配方式 |
(2)Python交互式會(huì)話如果沒有給定程序名稱,,并且Python解釋器的標(biāo)準(zhǔn)輸入為一個(gè)交互式終端,Python將在交互模式下啟動(dòng),。 在這種模式下,,解釋器會(huì)執(zhí)行PYTHONSTARTUP 環(huán)境變量(如果有)中包含的腳本。 該腳本將作為輸入程序的一部分執(zhí)行(即無需使用 import 語句加載它),。 該腳本的第一項(xiàng)應(yīng)用就是讀取用戶配置文件,,如 .pythonrc。 可以修改sys.ps1 和sys.ps2 的值來更改提示符,。 在交互模式下,,最后一次運(yùn)算的結(jié)果存儲(chǔ)在特殊變量_ 中??梢栽诮换ツJ街惺褂眠@個(gè)變量,。如: >>> 1 + 2
5
>>> _ + 3
>>> 6 默認(rèn)情況下,交互模式下運(yùn)行的結(jié)果會(huì)在屏幕上全部打印出來,。通過將變量sys.displayhook 設(shè)為自定義函數(shù),, 可以省略顯示運(yùn)行結(jié)果,下面是一個(gè)例子,,對(duì)于要顯示結(jié)果大于40個(gè)字符的結(jié)果,,省略顯示其中的中間部分: >>> def my_display(x):
... r = repr(x)
... if len(r) > 40: print(r[:40] + '...' + r[-1])
... else: print(r)
>>> sys.sisplayhook = my_display
>>> list(range(100))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1...]
>>> (3)運(yùn)行Python程序● 啟動(dòng)Python應(yīng)用程序 在Linux環(huán)境下,有以下2個(gè)方法可以自動(dòng)啟動(dòng)Python解釋器來執(zhí)行 .py 文件,, 方法一:通過chmod增加x屬性的方法 方法二:可在.py文件頭部指定Python解釋器名稱, 如: #!/usr/bin/python3 在Windows環(huán)境下,,雙擊:.py, .pyw, .wpy, .pyc, .pyo 將自動(dòng)啟動(dòng)Python解釋器,。 通常,程序在控制臺(tái)窗口中運(yùn)行,,若使用了.pyw 后綴對(duì)它們進(jìn)行了重命名,,程序?qū)㈧o默運(yùn)行。 如果要為解釋器提供選項(xiàng),,Python也可以從一個(gè) .bat 文件啟動(dòng),。 ● 程序終止 當(dāng)出現(xiàn)以下情況時(shí),程序?qū)?huì)終止:輸入程序中沒有可執(zhí)行的其他語句時(shí),、 出現(xiàn)未捕獲的 SystemExit 異常(由sys.exit() 生成),, 解釋器收到SIGTERM 或SIGHUP 信號(hào)時(shí)。 程序退出時(shí),,解釋器減小當(dāng)前已知命名控件中所有對(duì)象的引用計(jì)數(shù)(同時(shí)銷毀每個(gè)命名空間),。 如果一個(gè)對(duì)象的引用計(jì)數(shù)達(dá)到0,將銷毀該對(duì)象并調(diào)用其__del__()方法,。 但是若對(duì)象之間存在循環(huán)引用,,就可能在程序終止時(shí)不會(huì)調(diào)用這個(gè)對(duì)象的__del__(),, 所以這時(shí)需要顯式清除某些對(duì)象(比如已打開的文件或網(wǎng)絡(luò)套接字); 或者利用垃圾回收器來完成這個(gè)工作,。 用戶可以編寫一個(gè)終止函數(shù)并將其注冊(cè)到 atexit 模塊,,用戶可以用法示例如下: 1 2 3 4 5 6 7 | import atexit, gc
def cleanup():
print ( 'before program exit...' )
gc.collect() # 調(diào)用垃圾回收器來完成清除工作
atexit.register(cleanup)
|
有時(shí)候希望不執(zhí)行任何清除操作而終止程序執(zhí)行,這可以同通過調(diào)用os._exit(status) 來完成,。 該函數(shù)提供了針對(duì)底層 “exit()系統(tǒng)調(diào)用”的接口,,調(diào)用該函數(shù)時(shí),程序?qū)⒘⒓唇K止,, 而且不會(huì)執(zhí)行任何進(jìn)一步的清除操作,。 ● site配置文件 (1)第三方站點(diǎn)目錄 一般Python的第三方模塊和包(比如通過 pip 安裝的包)會(huì)被安裝到 site-package 目錄下, 這個(gè)目錄稱為第三方站點(diǎn)目錄,。在第三方站點(diǎn)目錄中安裝的包,,所有用戶都能使用。 在Linux中,,這個(gè)目錄一般在形如:/usr/local/lib/python3.7/site-package 的地方,; 在Windows中,這個(gè)目錄一般在形如:Python安裝目錄\Lib\site-packages 的地方,。 當(dāng)向第三方站點(diǎn)目錄安裝包時(shí),,如果該包已經(jīng)存在于用戶站點(diǎn)目錄中,pip則會(huì)通知你該包已安裝,。 (2)用戶站點(diǎn)目錄 用戶也可以安裝僅供自己使用的包(其他用戶不能使用),,這可以在 pip 安裝(或setup.py安裝)時(shí), 通過參數(shù) --user 實(shí)現(xiàn),,如:pip3 install --user numpy ,。 在Linux中,這個(gè)目錄一般在形如:~/.local/lib/python3.7/site-package 的地方,; 在Windows中,,這個(gè)目錄一般在形如:%APPDATA%\Python\Python37\site-packages 的地方。 (3)site模塊 當(dāng)在程序中使用import 語句時(shí),,Python會(huì)使用sys.path 中指定的目錄來搜索模塊,, 而這個(gè)sys.path 內(nèi)容的初始化,是通過 site 模塊完成的,。 Python解釋器啟動(dòng)時(shí),,首先會(huì)導(dǎo)入 site 模塊,它先導(dǎo)入第三方站點(diǎn)目錄和用戶站點(diǎn)目錄,, 并將這些目錄添加到sys.path 中,。然后在這些目錄中搜索路徑配置文件(具有 .pth后綴的文件), 將這些配置中的路徑也一一添加到sys.path 中(如果該路徑存在的話)。 路徑配置文件中的每個(gè)目錄都必須在單獨(dú)一行列出,,注釋和空行將被忽略,,重復(fù)的項(xiàng)目?jī)H添加一次。 路徑配置文件中的每行可以是:目錄,、zip文件 或 .egg 文件,。 用戶甚至還可以編輯 site.py 的源碼,用于完成自己一些獨(dú)特的配置需求,。這個(gè)文件一般位于 /usr/lib64/python3.7/ 目錄下,。 (4)解釋器內(nèi)置類型用戶一般很少需要直接操作解釋器內(nèi)部使用的對(duì)象,但是Python也將它們暴露給用戶,, 如果是設(shè)計(jì)框架或工具構(gòu)建可能會(huì)用到這些解釋器內(nèi)部對(duì)象,。 ● 解釋器內(nèi)置類型 類型名稱 | 說明 |
---|
types.CodeType | 字節(jié)編譯代碼的類型 | types.FrameType | 執(zhí)行幀的類型 | types.GeneratorType | 生成器對(duì)象的類型 | types.TracebackType | 異常的棧跟蹤的類型 | slice | 由擴(kuò)展切片生成的類型 | Ellipsis | 在擴(kuò)展切片中使用 |
● 代碼對(duì)象 代碼對(duì)象又叫字節(jié)碼(bytecode),代表編譯過的可執(zhí)行代碼,,通常由內(nèi)置的compile()函數(shù)返回,。 一個(gè)代碼對(duì)象可以保存若干個(gè)函數(shù),只是它們不綁定到特定函數(shù)(即不保存命名空間相關(guān)的上下文信息),。 代碼對(duì)象具有以下只讀屬性: 屬性 | 說明 |
---|
c.co_name | 函數(shù)名稱 | c.co_argcount | 位置參數(shù)個(gè)數(shù)(包括默認(rèn)值) | c.co_nlocals | 函數(shù)使用的局部變量個(gè)數(shù) | c.co_varnames | 包含局部變量名稱的元組 | c.co_cellvars | 包含嵌套函數(shù)所引用的變量名稱的元組 | c.co_freevars | 包含嵌套函數(shù)所引用的自由變量名稱的元組 | c.co_code | 表示原始字節(jié)碼的字符串 | c.co_consts | 包含字節(jié)碼所用字面量的元組 | c.co_names | 包含字節(jié)碼所用名稱的元組 | c.co_filename | 被編譯代碼所在文件的名稱 | c.co_firstlineno | 函數(shù)的首行行號(hào) | c.co_lnotab | 字符串編碼字節(jié)碼相對(duì)于行號(hào)的偏移 | c.co_stacksize | 所需棧的大?。òň植孔兞浚?/td> | c.co_flags | 包含解釋器標(biāo)志的整數(shù) |
● 幀對(duì)象 幀對(duì)象用于表示執(zhí)行幀,多出現(xiàn)在跟蹤對(duì)象中,。 幀對(duì)象具有以下屬性: 屬性 | 說明 |
---|
以下為只讀屬性 | f.f_back | 上一個(gè)棧幀(對(duì)當(dāng)前調(diào)用者而言) | f.f_code | 正在執(zhí)行的代碼對(duì)象 | f.f_locals | 局部變量的字典 | f.f_globals | 全局變量的字典 | f.f_builtins | 內(nèi)置名稱的字典 | f.f_lineno | 行號(hào) | f.f_lasti | 當(dāng)前指令,。這是f_code字節(jié)碼字符串的索引 | 以下為可修改屬性 | f.f_trace | 在每行源代碼起始處調(diào)用的函數(shù) |
● 跟蹤對(duì)象 出現(xiàn)異常時(shí)就會(huì)創(chuàng)建跟蹤對(duì)象,它包含棧跟蹤信息,。進(jìn)入異常處理程序后,,可以使用sys.exc_info()函數(shù)來獲取棧跟蹤信息。 跟蹤對(duì)象具有以下只讀屬性: 屬性 | 說明 |
---|
t.tb_next | 棧跟蹤的下一級(jí)(朝發(fā)生異常的執(zhí)行幀方向深入) | t.tb_frame | 當(dāng)前級(jí)別的執(zhí)行幀對(duì)象 | t.tb_lineno | 出現(xiàn)異常的行號(hào) | t.tb_lasti | 當(dāng)前級(jí)別中正在執(zhí)行的指令 |
● 生成器對(duì)象 生成器對(duì)象即通過調(diào)用含有yield語句的函數(shù)創(chuàng)建的對(duì)象,。生成器對(duì)象有2個(gè)用途,,一是迭代器、二是容器,。 生成器對(duì)象具有以下屬性: 屬性 | 說明 |
---|
g.gi_code | 生成器函數(shù)的代碼對(duì)象 | g.gi_frame | 生成器函數(shù)的執(zhí)行幀 | g.gi_running | 顯示生成器函數(shù)目前是否正在運(yùn)行的整數(shù) |
●切片對(duì)象 切片對(duì)象用于表示在擴(kuò)展切莫語法中指定的切片,,如a[i:j:stride], a[i:j, n:m]等,。 使用內(nèi)置的slice()函數(shù)也可以創(chuàng)建切片對(duì)象,。 切片對(duì)象具有以下只讀屬性和方法: 屬性或方法 | 說明 |
---|
s.start | 切片的下邊界,如果省略則為None | s.stop | 切片的上邊界,,如果省略則為None | s.step | 切片的步長,,如果省略則為None | s.indices(length) | 接收一個(gè)長度參數(shù),返回一個(gè)元組 (start, stop, stride),,用于表明如何將切片應(yīng)用到指定長度的一個(gè)序列 |
●Ellipsis對(duì)象 用于索引查找[]中省略號(hào)是否存在,,通過內(nèi)置名稱Ellipsis可以訪問這種類型的對(duì)象。它沒有任何屬性,但并不是空(若對(duì)其應(yīng)用判斷表達(dá)式,,其值為True),。 Python中沒有任何內(nèi)置類型使用了Ellipsis,但如果要在自己創(chuàng)建的對(duì)象上的索引運(yùn)算符[]中構(gòu)造高級(jí)功能,,就可以用到它,。 下面的代碼說明了如何使用Ellipsis對(duì)象: 1 2 3 4 5 6 | class Example( object ):
def __gettiem__( self , index):
print (index)
e = Example()
e[ 3 ,... 4 ] # 內(nèi)部調(diào)用形式為:e.__gettiem__((3,Ellipsis,4))
|
https://www.cnblogs.com/initcircuit/p/12216558.html
|