天天看點

python語言屬于什麼專業類别_python語言介紹(二)

基本文法

Python的設計目标之一是讓代碼具備高度的可閱讀性。它設計時盡量使用其它語言經常使用的标點符号和英文單字,讓代碼看起來整潔美觀。它不像其他的靜态語言如C、Pascal那樣需要重複書寫聲明語句,也不像它們的文法那樣經常有特殊情況和意外。

縮進

Python開發者有意讓違反了縮進規則的程式不能通過編譯,以此來強制程式員養成良好的程式設計習慣。并且Python語言利用縮進表示語句塊的開始和退出(Off-side規則),而非使用花括号或者某種關鍵字。增加縮進表示語句塊的開始,而減少縮進則表示語句塊的退出。縮進成為了文法的一部分。例如if語句:

python3

if age<21:

print("你不能買酒。")

print("不過你能買口香糖。")

print("這句話在if語句塊的外面。")

根據PEP的規定,必須使用4個空格來表示每級縮進(不清楚4個空格的規定如何,在實際編寫中可以自定義空格數,但是要滿足每級縮進間空格數相等)。使用Tab字元和其它數目的空格雖然都可以編譯通過,但不符合編碼規範。支援Tab字元和其它數目的空格僅僅是為相容很舊的的Python程式和某些有問題的編輯程式。

控制語句

if語句,當條件成立時運作語句塊。經常與else, elif(相當于else if) 配合使用。

for語句,周遊清單、字元串、字典、集合等疊代器,依次處理疊代器中的每個元素。(疊代是重複回報過程的活動,其目的通常是為了逼近所需目标或結果。每一次對過程的重複稱為一次“疊代”,而每一次疊代得到的結果會作為下一次疊代的初始值)

while語句,當條件為真時,循環運作語句塊。

try語句,與except,finally配合使用處理在程式運作中出現的異常情況。

class語句,用于定義類型。

def語句,用于定義函數和類型的方法。

pass語句,表示此行為空,不運作任何操作。

assert語句,用于程式調試階段時測試運作條件是否滿足。

with語句,Python2.6以後定義的文法,在一個場景中運作語句塊。比如,運作語句塊前加密,然後在語句塊運作退出後解密。

yield語句,在疊代器函數内使用,用于傳回一個元素。自從Python 2.5版本以後。這個語句變成一個運算符。

raise語句,制造一個錯誤。

import語句,導入一個子產品或包。

from import語句,從包導入子產品或從子產品導入某個對象。

import as語句,将導入的對象指派給一個變量。

in語句,判斷一個對象是否在一個字元串/清單/元組裡。

表達式

Python的表達式寫法與C/C++類似。隻是在某些寫法有所差别。

主要的算術運算符與C/C++類似。+, -, *, /, //, **, ~, %分别表示加法或者取正、減法或者取負、乘法、除法、整除、乘方、取補、取餘。>>, <<表示右移和左移。&, |, ^表示二進制的AND, OR, XOR運算。>, <, ==, !=, <=, >=用于比較兩個表達式的值,分别表示大于、小于、等于、不等于、小于等于、大于等于。在這些運算符裡面,~, |, ^, &, <<, >>必須應用于整數。

Python使用and, or, not表示邏輯運算。

is, is not用于比較兩個變量是否是同一個對象。in, not in用于判斷一個對象是否屬于另外一個對象。

Python支援“清單推導式”(list comprehension),比如計算0-9的平方和:

>>> sum(x * x for x in range(10))

285

Python使用lambda表示匿名函數。匿名函數體隻能是表達式。比如:

>>> add=lambda x, y : x + y

>>> add(3,2)

5

Python使用y if cond else x表示條件表達式。意思是當cond為真時,表達式的值為y,否則表達式的值為x。相當于C++和Java裡的cond?y:x。

Python區分清單(list)和元組(tuple,元素組合)兩種類型。list的寫法是[1,2,3],而tuple的寫法是(1,2,3)。可以改變list中的元素,而不能改變tuple。在某些情況下,tuple的括号可以省略。tuple對于指派語句有特殊的處理。是以,可以同時指派給多個變量,比如:

>>> x, y=1,2#同時給x,y指派,最終結果:x=1, y=2

特别地,可以使用以下這種形式來交換兩個變量的值:

>>> x, y=y, x #最終結果:y=1, x=2

Python使用'(單引号)和"(雙引号)來表示字元串。與Perl、Unix Shell語言或者Ruby、Groovy等語言不一樣,兩種符号作用相同。一般地,如果字元串中出現了雙引号,就使用單引号來表示字元串;反之則使用雙引号。如果都沒有出現,就依個人喜好選擇。出現在字元串中的\(反斜杠)被解釋為特殊字元,比如\n表示換行符。表達式前加r訓示Python不解釋字元串中出現的\。這種寫法通常用于編寫正規表達式或者Windows檔案路徑。

Python支援清單切割(list slices),可以取得完整清單的一部分。支援切割操作的類型有str, bytes, list, tuple等。它的文法是...[left:right]或者...[left:right:stride]。假定nums變量的值是[1, 3, 5, 7, 8, 13, 20],那麼下面幾個語句為真:

nums[2:5] == [5, 7, 8] 從下标為2的元素切割到下标為5的元素,但不包含下标為5的元素。

nums[1:] == [3, 5, 7, 8, 13, 20] 切割到最後一個元素。

nums[:-3] == [1, 3, 5, 7] 從最開始的元素一直切割到倒數第3個元素。

nums[:] == [1, 3, 5, 7, 8, 13, 20] 傳回所有元素。改變新的清單不會影響到nums。

nums[1:5:2] == [3, 7] 從下标為1的元素切割到下标為5的元素但不包含下标為5的元素,且步長為2。

函數

Python的函數支援遞歸、預設參數值、可變參數,但不支援函數重載。為了增強代碼的可讀性,可以在函數後書寫“文檔字元串”(Documentation Strings,或者簡稱docstrings),用于解釋函數的作用、參數的類型與意義、傳回值類型與取值範圍等。可以使用内置函數help()列印出函數的使用幫助。比如:

>>> def randint(a, b):

... "Return random integer in range [a, b], including both end points."...

>>> help(randint)

Help on function randint in module __main__:

randint(a, b)

Return random integer inrange[a, b], including both end points.

對象的方法

對象的方法是指綁定到對象的函數。調用對象方法的文法是instance.method(arguments)。它等價于調用Class.method(instance, arguments)。當定義對象方法時,必須顯式地定義第一個參數,一般該參數名都使用self,用于通路對象的内部資料。這裡的self相當于C++, Java裡面的this變量,但是我們還可以使用任何其它合法的參數名,比如this 和 mine 等,self與C++,Java裡面的this不完全一樣,它可以被看作是一個習慣性的用法,我們傳入任何其它的合法名稱都行,比如:

class Fish:

def eat(self,food):

if food is not None:

self.hungry=False

class User:

def__init__(myself,name):

myself.name=name

#構造Fish的執行個體:

f=Fish()

#以下兩種調用形式是等價的:

Fish.eat(f,"earthworm")

f.eat("earthworm")

u=User('username')

print(u.name)

Python認識一些以“__”開始并以“__”結束的特殊方法名,它們用于實作運算符重載和實作多種特殊功能。

類型

Python采用動态類型系統。在編譯的時候,Python不會檢查對象是否擁有被調用的方法或者屬性,而是直至運作時,才做出檢查。是以操作對象時可能會抛出異常。不過,雖然Python采用動态類型系統,它同時也是強類型的。Python禁止沒有明确定義的操作,比如數字加字元串。

與其它面向對象語言一樣,Python允許程式員定義類型。構造一個對象隻需要像函數一樣調用類型即可,比如,對于前面定義的Fish類型,使用Fish()。類型本身也是特殊類型type的對象(type類型本身也是type對象),這種特殊的設計允許對類型進行反射程式設計。

Python内置豐富的資料類型。與Java、C++相比,這些資料類型有效地減少代碼的長度。下面這個清單簡要地描述了Python内置資料類型(适用于Python 3.x):

類型

描述

例子

備注

str

一個由字元組成的不可更改的有序串行。

'Wikipedia'

"Wikipedia"

"""Spanning

multiple

lines"""

在Python 3.x裡,字元串由Unicode字元組成

bytes

一個由位元組組成的不可更改的有序串行。

b'Some ASCII'

b"Some ASCII"

list

可以包含多種類型的可改變的有序串行

[4.0, 'string', True]

tuple

可以包含多種類型的不可改變的有序串行

(4.0, 'string', True)

set, frozenset

與數學中集合的概念類似。無序的、每個元素唯一。

{4.0, 'string', True}

frozenset([4.0, 'string', True])

dict

一個可改變的由鍵值對組成的無序串行。

{'key1': 1.0, 3: False}

int

精度不限的整數

42

float

浮點數。精度與系統相關。

3.1415927

complex

複數

3+2.7j

bool

邏輯值。隻有兩個值:真、假

True

False

除了各種資料類型,Python語言還用類型來表示函數、子產品、類型本身、對象的方法、編譯後的Python代碼、運作時資訊等等。是以,Python具備很強的動态性。

數學運算

Python使用與C、Java類似的運算符,支援整數與浮點數的數學運算。同時還支援複數運算與無窮位數(實際受限于計算機的能力)的整數運算。除了求絕對值函數abs()外,大多數數學函數處于math和cmath子產品内。前者用于實數運算,而後者用于複數運算。使用時需要先導入它們,比如:

>>> import math

>>> print(math.sin(math.pi/2))

1.0

fractions子產品用于支援分數運算;decimal子產品用于支援高精度的浮點數運算。

Python定義求餘運作a % b的值處于開區間[0, b)内,如果b是負數,開區間變為(b, 0]。這是一個很常見的定義方式。不過其實它依賴于整除的定義。為了讓方程式:b * (a // b) + a % b = a恒真,整除運作需要向負無窮小方向取值。比如7 // 3的結果是2,而(-7) // 3的結果卻是-3。這個算法與其它很多程式設計語言不一樣,需要注意,它們的整除運算會向0的方向取值。

Python允許像數學的常用寫法那樣連着寫兩個比較運作符。比如a < b < c與a < b and b < c等價。C++的結果與Python不一樣,首先它會先計算a < b,根據兩者的大小獲得0或者1兩個值之一,然後再與c進行比較。

幫助

1. 列出子產品中的函數

用import導出子產品後,可使用函數dir(m)列出子產品的所有函數,import是導出子產品的指令,m是子產品名。

例子:

>>>import math

>>>dir(math)

['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']

這個例子列出math子產品的一些函數,以雙下劃線( _ _ )開頭的名稱用于較複雜的python程式設計。

2.檢視完整的python内置函數清單

檢視完整的python内置函數清單,可在提示符後輸入 >>>dir(_ _builtins_ _)。

例子:

1

2

3

>>>dir(__builtins__)

['ArithmeticError','AssertionError','AttributeError','BaseException','BlockingIOError','BrokenPipeError','BufferError','BytesWarning','ChildProcessError','ConnectionAbortedError','ConnectionError','ConnectionRefusedError','ConnectionResetError','DeprecationWarning','EOFError','Ellipsis','EnvironmentError','Exception','False','FileExistsError','FileNotFoundError','FloatingPointError','FutureWarning','GeneratorExit','IOError','ImportError','ImportWarning','IndentationError','IndexError','InterruptedError','IsADirectoryError','KeyError','KeyboardInterrupt','LookupError','MemoryError','ModuleNotFoundError','NameError','None','NotADirectoryError','NotImplemented','NotImplementedError','OSError','OverflowError','PendingDeprecationWarning','PermissionError','ProcessLookupError','RecursionError','ReferenceError','ResourceWarning','RuntimeError','RuntimeWarning','StopAsyncIteration','StopIteration','SyntaxError','SyntaxWarning','SystemError','SystemExit','TabError','TimeoutError','True','TypeError','UnboundLocalError','UnicodeDecodeError','UnicodeEncodeError','UnicodeError','UnicodeTranslateError','UnicodeWarning','UserWarning','ValueError','Warning','WindowsError','ZeroDivisionError','_','__build_class__','__debug__','__doc__','__import__','__loader__','__name__','__package__','__spec__','abs','all','any','ascii','bin','bool','bytearray','bytes','callable','chr','classmethod','compile','complex','copyright','credits','delattr','dict','dir','divmod','enumerate','eval','exec','exit','filter','float','format','frozenset','getattr','globals','hasattr','hash','help','hex','id','input','int','isinstance','issubclass','iter','len','license','list','locals','map','max','memoryview','min','next','object','oct','open','ord','pow','print','property','quit','range','repr','reversed','round','set','setattr','slice','sorted','staticmethod','str','sum','super','tuple','type','vars','zip']

3. 檢視某個函數的文檔幫助資訊

可以用函數help(函數)來檢視某個函數的文檔幫助資訊。

例子:

1

2

3

4

5

6

7

8

9

>>>help(sum)

Help on built-in functionsum in module builtins:

sum(iterable, start=0,/)

Return thesum of a'start' value (default:0) plus an iterable of numbers      When the iterableis empty,return the start value.

This functionis intended specificallyfor use with numeric valuesand may    reject non-numeric types.

可以直接在提示符下輸入help(),然後輸入某個子產品或函數名得到詳細的幫助資訊。