Python 程式設計/基本語法
在 Python 中有五個基本概念。
Python 通常不使用分號,但允許它們在同一行上分隔語句,如果你的程式碼中有分號;你的程式碼就不是“Pythonic”的。
所有變數都是大小寫敏感的。Python 將 'number' 和 'Number' 視為不同的、不相關的實體。
與使用塊分隔符(C 語言系列中的大括號 → "{}")不同,縮排用於指示塊的開始和結束位置。因為空格很重要,所以記住空格和製表符不能混用,所以只在縮排程式時使用其中一個。一個常見的錯誤是將它們混合使用。雖然它們在編輯器中看起來可能相同,但直譯器會以不同的方式讀取它們,這將導致錯誤或意外的行為。大多數不錯的文字編輯器可以配置為讓 Tab 鍵發出空格。
Python 的樣式指南描述了使用 4 個空格的首選方法。
提示:如果你從命令列呼叫了 python,你可以給 python 提供 -t 或 -tt 引數來讓 python 在不一致的 tab 使用情況時發出警告或錯誤。
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