Python 程式設計/基本語法
在 Python 中有五個基本概念。
Python 通常不使用分號,但允許它們在同一行上分隔語句,如果你的程式碼中有分號;你的程式碼就不是“Pythonic”的。
所有變數都區分大小寫。Python 將“number”和“Number”視為獨立的、不相關的實體。
代替塊定界符(在 C 語言系列中為大括號 → "{}"),縮排用於指示塊的開始和結束位置。因為空白很重要,請記住空格和製表符不混用,所以在縮排程式時只使用其中一個。一個常見的錯誤是混合使用它們。雖然它們在編輯器中看起來可能一樣,但直譯器會以不同的方式讀取它們,這會導致錯誤或意外行為。大多數優秀的文字編輯器可以配置為讓 Tab 鍵發出空格代替。
Python 的風格指南描述了首選方法是使用 4 個空格。
提示:如果你從命令列呼叫了 python,你可以給 python 傳遞 -t 或 -tt 引數來讓 python 在不一致的製表符使用情況下發出警告或錯誤。
pythonprogrammer@wikibook:~$ python -tt myscript.py
如果混合使用空格和製表符,這將發出錯誤。
在 Python 中,與所有面向物件語言一樣,存在稱為物件的程式碼和資料的聚合,它們通常表示系統概念模型中的各個部分。
Python 中的物件是從稱為類的模板建立(即例項化)的(稍後會介紹,因為語言的很大一部分可以在不理解類的情況下使用)。它們具有屬性,代表構成物件的各種程式碼和資料。要訪問屬性,寫下物件的名稱,後面跟著一個點(從現在起稱為點),然後是屬性的名稱。
例如,字串的“upper”屬性是指返回字串副本的程式碼,其中所有字母都為大寫。要訪問它,必須有一種方法來引用物件(在下面的例子中,方法是構造物件的字面字串)。
'bob'.upper
程式碼屬性稱為方法。所以在本例中,upper 是“bob”的一個方法(因為它也是所有字串的一個方法)。要執行方法中的程式碼,使用一對匹配的括號,括號中包含一個逗號分隔的列表,該列表包含該方法接受的任何引數(upper 不接受任何引數)。因此,要查詢字串“bob”的大寫版本,可以使用以下方法:
'bob'.upper()
在一個大型系統中,重要的是讓一塊程式碼不會以難以預測的方式影響另一塊程式碼。實現這一目標的最簡單方法之一是防止一個程式設計師對名稱的選擇阻止另一個程式設計師使用該名稱。作用域的概念是為了實現這一目標而發明的。作用域是程式碼中的一個“區域”,在這個區域中可以使用名稱,而在該區域之外則無法輕鬆訪問該名稱。Python 中有兩種方法來劃分區域:函式或模組。它們各自有不同的方法來在它們的作用域之外提供其內容。函式以執行結果的形式返回資料。模組引導我們進入另一個概念,名稱空間。
在不瞭解名稱空間的概念的情況下也可以學習 Python,因為它們與我們已經提到的屬性非常相似,但是名稱空間的概念超越了任何特定的程式語言,因此學習它很重要。首先,有一個內建函式dir()它可以用來幫助人們理解名稱空間的概念。當你第一次啟動 Python 直譯器(即在互動模式下)時,可以使用此函式列出當前(或預設)名稱空間中的物件。
Python 2.3.4 (#53, Oct 18 2004, 20:35:07) [MSC v.1200 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> dir()
['__builtins__', '__doc__', '__name__']
此函式還可以用來顯示模組名稱空間中可用的名稱。為了演示這一點,首先我們可以使用type()函式來顯示 __builtins__ 是什麼型別的物件
>>> type(__builtins__)
<type 'module'>
由於它是一個模組,因此它有一個名稱空間。我們可以再次使用dir()函式來列出 __builtins__ 名稱空間中的名稱(請注意,完整的名稱列表已被縮寫)
>>> dir(__builtins__)
['ArithmeticError', ... 'copyright', 'credits', ... 'help', ... 'license', ... 'zip']
>>>
名稱空間是一個簡單的概念。名稱空間是特定模組中特定名稱所在的特定位置。名稱空間中的每個名稱都與該名稱空間之外的名稱不同。這種名稱空間的分層被稱為作用域。當一個名稱被賦予一個值時,它就被放置在名稱空間中。例如
>>> dir()
['__builtins__', '__doc__', '__name__']
>>> name = "Bob"
>>> import math
>>> dir()
['__builtins__', '__doc__', '__name__', 'math', 'name']
請注意,我能夠使用簡單的賦值語句將“name”變數新增到名稱空間中。import 語句用於將“math”名稱新增到當前名稱空間。為了檢視 math 是什麼,我們可以簡單地
>>> math
<module 'math' (built-in)>
由於它是一個模組,因此它也具有名稱空間。要顯示此名稱空間中的名稱,我們
>>> dir(math)
['__doc__', '__name__', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e',
'exp', 'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log', 'log10', 'modf', 'pi', 'pow',
'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh']
>>>
如果你仔細觀察,你會注意到預設名稱空間和 math 模組名稱空間都有一個 '__name__' 物件。每個層都可能包含具有相同名稱的物件這一事實就是作用域的全部內容。要訪問名稱空間中的物件,只需使用模組的名稱,後面跟著一個點,然後是物件的名稱。這使我們能夠區分__name__當前名稱空間中的物件,以及math模組中具有相同名稱的物件。例如
>>> print (__name__)
__main__
>>> print (math.__name__)
math
>>> print (math.__doc__)
This module is always available. It provides access to the
mathematical functions defined by the C standard.
>>> print (math.pi)
3.1415926535897931