1. 程式人生 > >python HelloWorld 的 4 種姿勢,你知道幾種

python HelloWorld 的 4 種姿勢,你知道幾種

安裝完 Python 之後該幹啥,當然是要 say HelloWorld 了。

python.exe 就是個普通程式

和其它所有命令一樣,在命令列中敲下 python 並回車的時候,作業系統去 PATH 路徑中搜索到了 python.exe 並執行。從這一點看,它和其它程式並沒有什麼不同。比如說:notepad 會開啟記事本,explorer 會開啟資源管理器。

區別在於,python 是一個純粹的命令列程式,它沒有大家熟悉的視窗介面。

注意,可執行程式的 .exe 檔名字尾只是 Windows 系統下的命名風格,輸入命令的時候是省略的。並且在 Linux 系統中可執行檔案都沒有 .exe 字尾,python

的命令風格是偏 Linux 風格的,所以後面提到 python 的時候直接說 python 而不是 python.exe

python 的引數

執行命令列程式的時候,往往需要可以帶上 引數(argument)。例如:

單獨執行 notepad,開啟一個新的無標題記事本,而如果執行 notepad hello.py,則會開啟這個指定的文字文件(當然,當前路徑下得有名為 hello.py 的檔案,否則 notepad 會有提示你)。

python 是一個直譯器程式,它的能力就是 解釋執行 Python 程式碼。

所以我們可以把 Python 程式碼作為引數傳遞給它。最常見的是傳一個檔案給它:

python hello.py

比如剛才我們用記事本建立的 hello.py 檔案:

這裡的 .py 檔案字尾不是必須的,就像記事本也不一定只能編輯 .txt 檔案。帶上字尾只是方便作業系統和使用者識別這是一個 Python 原始碼檔案。

不帶引數執行 python,因為沒有內容可以解釋,就進入到了互動模式。

互動模式下,在提示符 >>> 後面等待使用者輸入,每輸入一句,就解釋執行一句。

互動模式下的 helloworld 大家肯定早已熟悉,這裡就不充數了,改天再細聊 REPL

嚴格來說,沒有引數的意思並不是 沒有內容,而是表示 內容源 來自 標準輸入(stdin)。事實上,它等價於:

python -

用一個短槓做引數的時候表示標準輸入,這是 Linux 程式的慣例。所謂標準輸入,不熟悉作業系統的小夥伴姑且可以認為就是來自使用者輸入。而相對的,自然就有 標準輸出(stdout)。我們用 print() 函式就是把結果 列印 在標準輸出中。

stdoutstdin 可以用一道豎線 | 串聯起來形成 管道(pipe),所以可以寫出下面這種另類的 helloworld:

C:\Users\Davy>echo print('helloworld')|python
helloworld

注意,在 windows 系統下,這裡 echo 後面不能加引號,而在 Linux 系統中則必須加一層引號:

[root@davycloud ~]# echo print('helloworld')|python
-bash: syntax error near unexpected token `('
[root@davycloud ~]# echo "print('helloworld')"|python
helloworld

python 的選項

在 Python 安裝 文章中,我們用了 python --version 來測試 python 程式是否正常。

這種用 --- 傳遞給程式的特殊引數稱之為 選項(option),一箇中槓(也就是減號 -) 後面跟一個字母,稱為 短選項,-- 後面跟完整的單詞,稱為 長選項。

注意,選項是一種特殊格式的引數,在下面 py 的幫助資訊中,就統稱是 args

有的選項只有短或長格式,有的選項既有短的,又有長的。例如 --version 對應的短選項是 -V (大寫的 V)。

除了 --version 列印版本資訊,還有通過 --help-h 列印幫助資訊也是比較通用的做法:

以後遇到不熟悉的命令,都可以先執行 --help 試試。不過值得提醒的是, Windows 系統中的傳統命令是使用 /? 表示選項。

python 直譯器中還有以下選項比較有用:

-c 選項

-c cmd : program passed in as string

把程式以字串的形式傳給直譯器,例如,helloworld 可以這樣寫:

C:\Users\Davy>python -c "print('helloworld')"
helloworld

還可以是多行語句,中間用分號 ; 分隔就行了:

C:\Users\Davy>python -c "import sys;print(sys.version)"
3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 23:11:46) [MSC v.1916 64 bit (AMD64)]

-i 選項

-i : inspect interactively after running script

在執行完指令碼後進入到互動模式。

這個選項在學習的情況下很有用,下面給大家舉個小例子。

比如學習到函式的時候,定義一個函式要寫多行語句,顯然寫在檔案中比較合適。

但是隨後對這個函式的進行練習測試,如果你也寫在檔案中,那麼每次都要這樣:

編輯 - 儲存 - 執行

每次執行都是從頭開始,這樣是比較麻煩的(因為麻煩所以沒有動圖了):

這時候就可以使用 python -i test.py 執行指令碼,指令碼執行結束後自動進入互動模式。此時腳本里定義的一切物件,仍然可以訪問。就好像是接在指令碼後面繼續寫程式碼一樣:

-m 選項

-m mod : run library module as a script

把模組當作指令碼來執行。

例如,著名的一行程式碼啟動一個 HTTP 伺服器:

python -m http.server

在安裝 Python 一文中已經和大家介紹過了,模組所在的資料夾位置,所以上面命令也可以直接用執行指令碼的方式:

python C:\Users\Davy\AppData\Local\Programs\Python\Python38\Lib\http\server.py
Serving HTTP on :: port 8000 (http://[::]:8000/) ...

這裡需要定位到 .py 檔案的具體位置,這個在每個人的環境上都不一樣,顯然比使用 python -m module 麻煩多了。

這裡可以看出,module 和在命令列中敲命令有異曲同工之妙,事實上,它們的原理也差不多。module 也需要有一個 path 變數,儲存一個搜尋路徑的列表。

這個 path 變數儲存在 sys 模組中:

python -c "import sys;print(sys.path)"

更多具體內容,後面學習到 module 相關內容的時候再詳細討論。

py.exe 的用法

在安裝完成後,我們使用 py --list 來顯示已安裝的 python 版本列表。這裡簡單介紹下 py 命令的用法。

同樣地,用 -h--help 來獲取幫助資訊:

列印資訊分為兩部分,前面是 py 自己的幫助資訊,後面是 python 的幫助資訊。

usage:
py [launcher-args] [python-args] script [script-args]

Launcher arguments:

-2     : Launch the latest Python 2.x version
-3     : Launch the latest Python 3.x version
-X.Y   : Launch the specified Python version
     The above all default to 64 bit if a matching 64 bit python is present.
-X.Y-32: Launch the specified 32bit Python version
-X-32  : Launch the latest 32bit Python X version
-X.Y-64: Launch the specified 64bit Python version
-X-64  : Launch the latest 64bit Python X version
-0  --list       : List the available pythons
-0p --list-paths : List with paths

除了最下面我們已經見過的 -0--list,其它引數都是用來選擇 python 直譯器。不但能區分版本號,還能按 32 位 或 64 位選擇。值得注意的是,版本號只包括前兩位。

如果不帶選擇版本引數,實際對應預設的 python 直譯器。其它所有不是上面這些格式的引數,也作為 python 直譯器的引數。

所以,在命令列中敲 pypython 的效果是一樣的(每次可以少敲 4 次鍵了,效率大幅提升,✌️),即使帶上了版本引數,也很方便:

C:\Users\Davy>py -0
Installed Pythons found by py Launcher for Windows
 -3.8-64 *
 -2.7-64


C:\Users\Davy>py -2 --version
Python 2.7.17

C:\Users\Davy>py --version
Python 3.8.1

為了演示 py 的功能,特意又安裝了 python 2.7,並且這次沒有加入到 PATH

問題來了,pip 這種放在 Script 中的命令怎麼辦呢?

這種情況,結合使用前面介紹的 -m 選項就可以了:

C:\Users\Davy>py -2 -m pip --version
pip 19.2.3 from C:\Python27\lib\site-packages\pip (python 2.7)

安裝包的時候也是一樣的:

差點忘了,helloworld 的第 4 種姿勢: python -m hello

小結

本文主要介紹 python 直譯器的基本用法,傳入程式碼的四種方式:檔案,字串,stdin,module。同時介紹在 windows 下如何使用 py 啟動器執行不同版本的 python。


如果本文有幫助,不妨 點贊 + 關注,謝謝