<style>td.subtitle { background-color: rgba(251, 251, 254, 1) } td.name { font-family: "Consolas" } td.center { text-align: center } td.name span { font-size: 13px; font-style: italic } td.name p { line-height: 2ex } td.example { font-family: "Consolas"; color: rgba(96, 96, 96, 1); font-size: 12px } td.example p { line-height: 2ex } td.example p span { color: rgba(176, 176, 176, 1); font-size: 12px } td.example a.advc { color: rgba(96, 96, 96, 1) } a.advc { border-bottom: 1px solid rgba(128, 128, 128, 1); text-decoration: none } a.subcata { border-bottom: 1px solid rgba(128, 128, 128, 1) } p.subcata { line-height: 30px; font-size: 18px } h2.dscp span { font-style: italic } .codebox { display: table-cell; width: 800px; padding-left: 20px; padding-right: 20px } .codebox span { color: rgba(144, 144, 144, 1) } .codebox i { fontsize: 8px } a.return { color: rgba(187, 187, 187, 1); font-size: 0.8em }</style>
回傳目錄
本篇索引
(1)Python解釋器
(2)Python互動式會話
(3)運行Python程式
(4)解釋器內置型別
(1)Python解釋器
● 基本用法
Python解釋器可以在命令列模式下運行,以下是運行語法:
python [options] [-c cmd | filename | - ] [args]
若指定filename,則Python解釋器將打開指定檔案并執行其陳述句,直到檔案結束標志; 若filename未指定,則進入“互動式會話”,
-c cmd選項可用于以命令列選項形式執行短程式,如:python -c "print('hello')"
args引數將通過sys.args傳遞給程式,程式中可讀出這些引數,
以下是常用 [options] 選項
| 選項 | 說明 |
|---|---|
| -B | 阻止在匯入時創建 .pyc 或 .pyo 檔案 |
| -E | 忽略環境變數 |
| -h | 列印所有可用命令列選項的串列 |
| -i | 在程式執行后進入互動模式(對除錯很有用) |
| -m module | 以腳本的形式運行庫模塊 module |
| -O | 優化模式 |
| -OO | 優化模式,在創建 .pyo 檔案時洗掉檔案字串 |
| -s | 阻止將用戶站點目錄添加到 sys.path |
| -S | 阻止包含 site 初始化模塊 |
| -t | 報告關于不一致的制表符使用警告 |
| -tt | 由于不一致的制表符使用而導致 TabError 例外 |
| -u | 未緩沖的二進制 stdout 和 stdin |
| -U | 在Python2中,使所有字串字面量都以 Unicode 形式處理(Python3中無效) |
| -v | 詳細模式,跟蹤匯入陳述句 |
| -V | 列印版本號并退出 |
| -x | 跳過源程式的第一行 |
| -c cmd | 以字串形式執行 cmd |
● 環境變數
Python啟動時,會從作業系統中讀取一些環境變數(如果有),以下是一些常用的環境變數:
| 環境變數 | 說明 |
|---|---|
| PYTHONPATH | 以冒號分隔的模塊搜索路徑,在Windows上,還可以從 HKEY_LOCAL_MACHINE/Software/Python 的注冊表項讀取 |
| PYTHONSTARTUP | 在以互動方式啟動時執行的檔案 |
| PYTHONHOME | Python的安裝位置 |
| PYTHONINSPECT | 相當于 -i 選項 |
| PYTHONBUFFERED | 相當于 -u 選項 |
| PYTHONIOENCODING | 針對 stdin, stdout, stderr 的編碼和錯誤處理,這是一個 encoding[:errors] 形式的字串,如:utf-8:ignore |
| PYTHONDONTWRITEBYTECODE | 相當于 -B 選項 |
| PYTHONOPTIMIZE | 相當于 -O 選項 |
| PYTHONNOUSERSITE | 相當于 -s 選項 |
| PYTHONVERBOSE | 相當于 -v 選項 |
| PYTHONUSERBASE | 每個用戶站點包的根目錄 |
| PYTHONCASEOK | 指示對匯入所使用的模塊名稱使用不區分大小寫的匹配方式 |
(2)Python互動式會話
如果沒有給定程式名稱,并且Python解釋器的標準輸入為一個互動式終端,Python將在互動模式下啟動, 在這種模式下,解釋器會執行PYTHONSTARTUP環境變數(如果有)中包含的腳本, 該腳本將作為輸入程式的一部分執行(即無需使用 import 陳述句加載它), 該腳本的第一項應用就是讀取用戶組態檔,如 .pythonrc,
可以修改sys.ps1和sys.ps2的值來更改提示符,
在互動模式下,最后一次運算的結果存盤在特殊變數_中,可以在互動模式中使用這個變數,如:
>>> 1 + 2 5 >>> _ + 3 >>> 6
默認情況下,互動模式下運行的結果會在螢屏上全部列印出來,通過將變數sys.displayhook設為自定義函式, 可以省略顯示運行結果,下面是一個例子,對于要顯示結果大于40個字符的結果,省略顯示其中的中間部分:
>>> 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)運行Python程式
● 啟動Python應用程式
在Linux環境下,有以下2個方法可以自動啟動Python解釋器來執行 .py 檔案,
方法一:通過chmod增加x屬性的方法
方法二:可在.py檔案頭部指定Python解釋器名稱, 如: #!/usr/bin/python3
在Windows環境下,雙擊:.py, .pyw, .wpy, .pyc, .pyo 將自動啟動Python解釋器, 通常,程式在控制臺視窗中運行,若使用了.pyw 后綴對它們進行了重命名,程式將靜默運行, 如果要為解釋器提供選項,Python也可以從一個 .bat 檔案啟動,
● 程式終止
當出現以下情況時,程式將會終止:輸入程式中沒有可執行的其他陳述句時、 出現未捕獲的 SystemExit 例外(由sys.exit()生成), 解釋器收到SIGTERM或SIGHUP信號時,
程式退出時,解釋器減小當前已知命名控制元件中所有物件的參考計數(同時銷毀每個命名空間), 如果一個物件的參考計數達到0,將銷毀該物件并呼叫其__del__()方法, 但是若物件之間存在回圈參考,就可能在程式終止時不會呼叫這個物件的__del__(), 所以這時需要顯式清除某些物件(比如已打開的檔案或網路套接字); 或者利用垃圾回收器來完成這個作業,
用戶可以撰寫一個終止函式并將其注冊到 atexit 模塊,用戶可以用法示例如下:
import atexit, gc
def cleanup():
print('before program exit...')
gc.collect() # 呼叫垃圾回收器來完成清除作業
atexit.register(cleanup)
有時候希望不執行任何清除操作而終止程式執行,這可以同通過呼叫os._exit(status)來完成, 該函式提供了針對底層 “exit()系統呼叫”的介面,呼叫該函式時,程式將立即終止, 而且不會執行任何進一步的清除操作,
● site組態檔
(1)第三方站點目錄
一般Python的第三方模塊和包(比如通過 pip 安裝的包)會被安裝到 site-package 目錄下, 這個目錄稱為第三方站點目錄,在第三方站點目錄中安裝的包,所有用戶都能使用, 在Linux中,這個目錄一般在形如:/usr/local/lib/python3.7/site-package 的地方; 在Windows中,這個目錄一般在形如:Python安裝目錄\Lib\site-packages 的地方,
當向第三方站點目錄安裝包時,如果該包已經存在于用戶站點目錄中,pip則會通知你該包已安裝,
(2)用戶站點目錄
用戶也可以安裝僅供自己使用的包(其他用戶不能使用),這可以在 pip 安裝(或setup.py安裝)時, 通過引數 --user 實作,如:pip3 install --user numpy, 在Linux中,這個目錄一般在形如:~/.local/lib/python3.7/site-package 的地方; 在Windows中,這個目錄一般在形如:%APPDATA%\Python\Python37\site-packages 的地方,
(3)site模塊
當在程式中使用import陳述句時,Python會使用sys.path中指定的目錄來搜索模塊, 而這個sys.path內容的初始化,是通過 site 模塊完成的,
Python解釋器啟動時,首先會匯入 site 模塊,它先匯入第三方站點目錄和用戶站點目錄, 并將這些目錄添加到sys.path中,然后在這些目錄中搜索路徑組態檔(具有 .pth后綴的檔案), 將這些配置中的路徑也一一添加到sys.path中(如果該路徑存在的話),
路徑組態檔中的每個目錄都必須在單獨一行列出,注釋和空行將被忽略,重復的專案僅添加一次, 路徑組態檔中的每行可以是:目錄、zip檔案 或 .egg 檔案,
用戶甚至還可以編輯 site.py 的原始碼,用于完成自己一些獨特的配置需求,這個檔案一般位于 /usr/lib64/python3.7/ 目錄下,
(4)解釋器內置型別
用戶一般很少需要直接操作解釋器內部使用的物件,但是Python也將它們暴露給用戶, 如果是設計框架或工具構建可能會用到這些解釋器內部物件,
● 解釋器內置型別
| 型別名稱 | 說明 |
|---|---|
| types.CodeType | 位元組編譯代碼的型別 |
| types.FrameType | 執行幀的型別 |
| types.GeneratorType | 生成器物件的型別 |
| types.TracebackType | 例外的堆疊跟蹤的型別 |
| slice | 由擴展切片生成的型別 |
| Ellipsis | 在擴展切片中使用 |
● 代碼物件
代碼物件又叫位元組碼(bytecode),代表編譯過的可執行代碼,通常由內置的compile()函式回傳, 一個代碼物件可以保存若干個函式,只是它們不系結到特定函式(即不保存命名空間相關的背景關系資訊),
代碼物件具有以下只讀屬性:
| 屬性 | 說明 |
|---|---|
| c.co_name | 函式名稱 |
| c.co_argcount | 位置引數個數(包括默認值) |
| c.co_nlocals | 函式使用的區域變數個數 |
| c.co_varnames | 包含區域變數名稱的元組 |
| c.co_cellvars | 包含嵌套函式所參考的變數名稱的元組 |
| c.co_freevars | 包含嵌套函式所參考的自由變數名稱的元組 |
| c.co_code | 表示原始位元組碼的字串 |
| c.co_consts | 包含位元組碼所用字面量的元組 |
| c.co_names | 包含位元組碼所用名稱的元組 |
| c.co_filename | 被編譯代碼所在檔案的名稱 |
| c.co_firstlineno | 函式的首行行號 |
| c.co_lnotab | 字串編碼位元組碼相對于行號的偏移 |
| c.co_stacksize | 所需堆疊的大小(包括區域變數) |
| c.co_flags | 包含解釋器標志的整數 |
● 幀物件
幀物件用于表示執行幀,多出現在跟蹤物件中,
幀物件具有以下屬性:
| 屬性 | 說明 |
|---|---|
| 以下為只讀屬性 | |
| f.f_back | 上一個堆疊幀(對當前呼叫者而言) |
| f.f_code | 正在執行的代碼物件 |
| f.f_locals | 區域變數的字典 |
| f.f_globals | 全域變數的字典 |
| f.f_builtins | 內置名稱的字典 |
| f.f_lineno | 行號 |
| f.f_lasti | 當前指令,這是f_code位元組碼字串的索引 |
| 以下為可修改屬性 | |
| f.f_trace | 在每行源代碼起始處呼叫的函式 |
● 跟蹤物件
出現例外時就會創建跟蹤物件,它包含堆疊跟蹤資訊,進入例外處理程式后,可以使用sys.exc_info()函式來獲取堆疊跟蹤資訊,
跟蹤物件具有以下只讀屬性:
| 屬性 | 說明 |
|---|---|
| t.tb_next | 堆疊跟蹤的下一級(朝發生例外的執行幀方向深入) |
| t.tb_frame | 當前級別的執行幀物件 |
| t.tb_lineno | 出現例外的行號 |
| t.tb_lasti | 當前級別中正在執行的指令 |
● 生成器物件
生成器物件即通過呼叫含有yield陳述句的函式創建的物件,生成器物件有2個用途,一是迭代器、二是容器,
生成器物件具有以下屬性:
| 屬性 | 說明 |
|---|---|
| g.gi_code | 生成器函式的代碼物件 |
| g.gi_frame | 生成器函式的執行幀 |
| g.gi_running | 顯示生成器函式目前是否正在運行的整數 |
●切片物件
切片物件用于表示在擴展切莫語法中指定的切片,如a[i:j:stride], a[i:j, n:m]等, 使用內置的slice()函式也可以創建切片物件,
切片物件具有以下只讀屬性和方法:
| 屬性或方法 | 說明 |
|---|---|
| s.start | 切片的下邊界,如果省略則為None |
| s.stop | 切片的上邊界,如果省略則為None |
| s.step | 切片的步長,如果省略則為None |
| s.indices(length) | 接收一個長度引數,回傳一個元組 (start, stop, stride),用于表明如何將切片應用到指定長度的一個序列 |
●Ellipsis物件
用于索引查找[]中省略號是否存在,通過內置名稱Ellipsis可以訪問這種型別的物件,它沒有任何屬性,但并不是空(若對其應用判斷運算式,其值為True), Python中沒有任何內置型別使用了Ellipsis,但如果要在自己創建的物件上的索引運算子[]中構造高級功能,就可以用到它,
下面的代碼說明了如何使用Ellipsis物件:
class Example(object):
def __gettiem__(self, index):
print(index)
e = Example()
e[3,...4] # 內部呼叫形式為:e.__gettiem__((3,Ellipsis,4))
回傳目錄
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/179263.html
標籤:Python
上一篇:Js逆向-滑動驗證碼圖片還原
