本文檔描述了Python語言文件頭里典型注釋的含義。
1. 指定解釋器
不管在linux還是在windows下,要運行一個python文件(比如hello.py
)的方式一般都是
python ./hello.py
- 1
然而,有一種方式可以直接運行hello.py
文件,那就是直接在python文件開頭指定所使用的python解釋器。然后就可以直接用
./hello.py
- 1
運行了(當然得先chmod +x ./hello.py
讓這個文件有可執行權限)。
“在python文件開頭指定解釋器”的方式有兩種。另外如果你python剛學不久,建議可以先去小編的Python交流.裙 :一久武其而而流一思(數字的諧音)轉換下可以找到了,里面有最新Python教程項目可拿,不懂的問題多跟里面的人交流,進步更快哦!
1.1. 直接指定解釋器路徑
#!/usr/bin/python
- 1
上面這種方式,指定了必須用/usr/bin/python
這個解釋器來解釋本python文件。
當然了,也可以寫成
#!/usr/local/python3/bin/python3.4
- 1
只要那個路徑下有python解釋器。
1.2. 指定系統環境變量設定的解釋器路徑
#!/usr/bin/env python
- 1
而這種方式,指定了使用linux環境變量$PATH里某個路徑下名為python
的解釋器來解釋本python文件。
(注意到開頭/usr/bin/env
是linux里讀寫環境變量的一個程序)
如果環境變量$PATH
的內容是/usr/bin:/usr/local/bin:/usr/local/python3/bin
,那么上面的注釋就意味着會依序尋找這些路徑:
1. /usr/bin/python
2. /usr/local/bin/python
3. /usr/local/python3/bin/python
第一個存在的路徑,就會作為python解釋器使用。
當然,如果寫成這樣
#!/usr/bin/env python3
- 1
那么查找解釋器的路徑順序就會變成
1. /usr/bin/python3
2. /usr/local/bin/python3
3. /usr/local/python3/bin/python3
2. 標明本py文件的編碼類型
前置知識:文本文件保存在硬盤上時,是需要按照一定編碼規則來保存的。比如GBK、UTF-8、UCS2之類。而文本編輯器、閱讀器、瀏覽器打開硬盤上的文本文件時,需要知道這個文本文件的編碼規則。
以下是正文——
python文件第二行一般是下面兩種之一:
# -*- coding: utf-8 -*-
- 1
或者
# coding: utf-8
- 1
這一行的意思是:告訴python解釋器,這個文件是以UTF-8方式編碼存儲的。其實類似文本文件開頭的BOM。
對於全文都是ASCII編碼的py文件而言,這行注釋一般沒用,因為ASCII字符在絕大多數編碼存儲方式中都是相同的(除了UCS2這種)。但是,如果代碼中出現了明文的中文、日文之類非ASCII的字符(作為字符串常量或注釋),他們在不同編碼存儲方式下,在硬盤上的字節流是不同的。
例如下面這段python代碼
s = "函數"
- 1
在硬盤上保存時會這樣
編碼 | 字節流 |
---|---|
GBK | 73 20 3D 20 22 BA AF CA FD 22 |
UTF-8 | 73 20 3D 20 22 E5 87 BD E6 95 B0 22 |
(注意到除了兩個漢字,其他字符對應的字節都是一樣的,比如最后那個0x22表示最后那個雙引號)
如果不告訴Python解釋器如何理解這個py文件,就會出現亂碼。
比如,如果py文件實際上是以UTF-8方式存儲的(就是表格第二行),但python解釋器卻以GBK編碼存儲去理解它,那么這段代碼會被理解為
s = "鍑芥暟"
- 1
那么用
print(s)
- 1
打印字符串時,就會看到亂碼文字了。 另外如果你python剛學不久,建議可以先去小編的Python交流.裙 :一久武其而而流一思(數字的諧音)轉換下可以找到了,里面有最新Python教程項目可拿,不懂的問題多跟里面的人交流,進步更快哦!
綜上,為了讓python解釋器在解釋py文件時能正確理解這個py文件里的非ASCII字符,就需要