
我在過去三週左右的時間裡一直在學習 bash,它非常容易學習,因為它基本上只是命令列輸入。我現在決定轉向 python,但在學習它的過程中我一直迷失方向。我的問題是在 python 中,它似乎都圍繞著數字、列表、變數等。我在 python 中找不到一個可以移動檔案、更改目錄或其他類似操作的範例。我覺得我已經習慣 bash 來學習 python了。有人可以跟我解釋一下嗎?
答案1
Bash 不是一種程式語言,而是一種旨在快速輸入命令並執行這些命令的 shell。因此,您可以執行其他命令來完成您的工作(例如mv
移動檔案和目錄)。 Bash 中的變數是有限的,由於命令都是字串,因此沒有理由對其非常嚴格。 (儘管可以強制類型,請參閱help declare
)。
另一方面,Python 是一種更廣泛的程式語言,具有更多的語言功能。您可以使用內建函數或模組(其他語言的函式庫)中的其他功能,而不是執行其他程式。有關 Python 輸入/輸出的基本教程,請參閱http://docs.python.org/tutorial/inputoutput.html。如果您想開始使用 Python 編程,整個教程本身就值得一讀。
答案2
Python是一種程式語言;與所有其他程式語言一樣,它旨在描述流程和資料。您的大多數問題都涉及模組中作業系統的 API os
,例如,os.chdir()
and os.rename()
(對於 UNIXmv
命令)。
shell 是一個操作環境,旨在讓您輕鬆存取作業系統的各個層級(檔案、進程等)。它包括變數、循環和條件等程式結構,因此從這個意義上說,它是一種程式語言,但它並不是被設計成一種進化的語言。您可以使用 shell 腳本做一些令人驚奇的事情 - 我曾經編寫過一個呼叫追蹤系統,每月處理 60k 個請求。但它也有電腦語言可以更好處理的限制。
例如,你可以用 Bash 編寫一個 Web 瀏覽器,但效率很低,尤其是在嘗試同時下載 html、css 和 javascript 頁面並處理使用者輸入時。像 Python 這樣可以存取執行緒的程式語言可以更有效地處理這個問題。
雖然 Python 也有一個“外殼”,但它並不是一個易於用來存取作業系統的外殼。但它是可用的。例如,shell 指令mv * otherdirectory
可以用 Python 寫成:
import os, glob
for fname in glob.glob('*'):
os.rename(fname, 'otherdirectory')
或更緊湊:
import os, glob
[os.rename(fname, 'otherdirectory') for fname in glob.glob('*')]
大多數語言教學都希望您先了解語言,然後再了解它如何與作業系統互動。對於 shell,您首先需要了解它如何與作業系統互動。