1. 程式人生 > >讀書筆記:LearningPython第五版 (第三章 如何執行程式)

讀書筆記:LearningPython第五版 (第三章 如何執行程式)

Chap3 How You Run Programs

3.1 互動式提示符

3.1.1 執行互動式環境

3.1.2 Windows新的 啟動

從Python 3.3 開始,Windows平臺上多了pypyw2個啟動程式的方式:

c:\code> py −2
Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] ...
Type "help", "copyright", "credits" or "license" for more information.
>>> ^Z

c:\code> py −3.1
Python 3.1.4 (default, Jun 12 2011, 14:16:16) [MSC v.1500 64 bit (AMD64)] ...

3.2 System Command Lines and Files

把檔案儲存在module中,module就是存放python程式碼的文字檔案。 有些人把 script稱作直接執行的檔案,而把被引入的python檔案叫做module.

3.2.1 第一個指令碼

# A first Python script
import sys # Load a library module
print(sys.platform)
python script1.py

幾乎在最近所有的Windows版本中,執行指令碼的時候可以直接輸入指令碼的名字,而不需要加上python,因為Windows能在其登錄檔中查詢到 .py

檔案相關的程式來執行它。

3.3 Unix-Style Executable Scripts: #!

3.3.1 Unix Script Basics

在Unix以及類Unix系統中, 可以讓python程式碼當作 可執行指令碼,就像shell指令碼那樣,只有2個要求:

  1. python檔案的第一行必須以 #!開頭,後面跟著直譯器的路徑,如:#!/usr/bin/python3.6
  2. 檔案有 可執行 許可權

例子:

#!/usr/local/bin/python
print('The Bright Side ' + 'of Life...')

執行:

./brian

這個檔案不需要以.py結尾,因為它也不需要被別的檔案引入,所以無所謂檔名

3.3.2 The Unix env Lookup Trick

對於 可執行指令碼,第一行可以這樣寫:

#!/usr/bin/env python

這個是利用了 env這個程式,讓它來在系統的 PATH路徑中搜索可執行的python命令。 這種寫法是現在更加推薦的。

前提是假設了env的路徑在 /usr/bin/env

3.3.3 The Python 3.3 Windows Launcher: #! Comes to Windows

在Python3.2版本以及以前, Windows平臺上只能使用普通的命令列來執行 Python指令碼檔案。 但是在3.3開始, 除了 py這個新的 可執行檔案以外,還提供了對#!的支援, 能夠指定不同的python直譯器版本,並且能理解/usr/bin/env形式:

c:\code> type robin3.py
#!/usr/bin/python3
print('Run', 'away!...') # 3.X function
c:\code> py robin3.py # Run file per #! line version
Run away!...

c:\code> type robin2.py
#!python2
print 'Run', 'away more!...' # 2.X statement
c:\code> py robin2.py # Run file per #! line version
Run away more!...

c:\code> py −3.1 robin3.py # Run per command-line argument
Run away!...

如果沒有指定版本編號或者設定 PY_PYTHON環境變數,那麼預設執行 python2版本

3.4 Clicking File Icons

see the platform usage documentation “Python Setup and Usage” in Python’s standard manual set for more details

To simulate 2.X’s input in 3.X, use eval(input())

3.5 Module Imports and Reloads

3.5.1 Import and Reload Basics

簡單來說,module就是一個 Python檔案。 import操作 會將這個被引入的模組 執行一遍。

在一次互動式session中,只有第一次import的時候,才會執行這個模組。之後再import它,就不會有任何作用。 因為這個 將會在 Chap22看到, import操作的開銷很大,它需要:

  1. 找到檔案
  2. 編譯檔案為 byte code
  3. 執行程式碼

3.5.2. 重新load模組:

>>> from imp import reload # Must load from module in 3.X (only)
>>> reload(script1)
win32
65536
Spam!Spam!Spam!Spam!Spam!Spam!Spam!Spam!
<module 'script1' from '.\\script1.py'>      # 列印的是`reload`函式的返回值,是一個 python module物件

在python2中,reload是 built-in函式,而python3中,reload函式在 imp模組中

3.5.3 The Grander Module Story: Attributes

module主要就是 一堆變數名字的 打包,稱作namespace, 其中暴露出來的可以訪問的名字就稱作attributes

  1. 當使用 import引入模組時, 模組整個被引入進來
  2. 當使用 from引入模組時,實際上是將模組的這些 attributes複製成了 一些變數

dir函式可以檢視模組內有哪些 names

reloading 一個模組,就只重新載入這個模組,不會重新載入 它本身載入的其他模組。

python引入模組的路徑叫做 module search path, 是由 PYTHONPATH環境變數定義的內容 加上一些標準路徑組成。可以從 sys.path檢視。

3.6 Using exec to Run Module Files

>>> exec(open('script1.py').read())

讀入並且執行, 不同於import的那種模式。

3.7 The IDLE User Interface

3.8 Debug

  1. 看錯誤提示
  2. IDE錯誤除錯
  3. pdb
  4. -i 選項