30天拿下Python之基礎語法

希望睿智 2024-05-20 21:25:29

概述

在上一節的內容中,我們介紹了Python的誕生、發展曆程、特色、缺點和應用領域。從本節開始,我們將正式學習Python。Python是一門簡潔和優雅的語言,有自己特殊的一些語法規則。因此,在介紹Python編程的有關知識之前,先熟悉下Python的基礎語法,是非常有必要的。

截止到2023年7月,Python的最新版本爲3.12,本專欄將使用Python 3.x的語法介紹相關知識。

編碼格式

在Python 2.x中,源文件默認編碼格式爲ASCII。如果內容中含有漢字,不指定編碼格式的話,便不能正確的讀取和輸出。可以將下面的代碼放到源文件的開頭,來指定編碼格式爲UTF-8。

# -*- coding: UTF-8 -*-

在Python 3.x中,源文件默認編碼格式爲UTF-8。故在使用Python 3.x時,通常不需要指定編碼格式。

標識符

標識符是軟件編程中通用的概念,用于給變量、函數、接口、類等進行命名。Python中的標識符區分大小寫,由字母、數字和下劃線組成,第一個字符必須是字母或下劃線,不能以數字開頭。在Python 3.x中,可以用中文作爲標識符。

以下劃線開頭的標識符具有特殊含義。單下劃線開頭的標識符(比如:_name),表示不能直接訪問的類屬性,需通過類提供的接口才能訪問。雙下劃線開頭的標識符(比如:__age),表示類的私有成員。雙下劃線開頭和結尾的標識符(比如:__init__()爲類的構造函數),表示Python中的內置標識。

關鍵字

Python中的關鍵字,也叫保留字,不能把這些關鍵字用作任何標識符的名稱。Python 3.11中一共有35個關鍵字,可用keyword模塊中的kwlist輸出這些關鍵字。

import platformimport keywordprint(platform.python_version())print(keyword.kwlist)

上述代碼的輸出如下:

3.11.4['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

注釋

在Python中,單行注釋使用#,多行注釋使用三個單引號(''')或三個雙引號(""")。

import platformimport keyword#print('hello world')'''print(platform.python_version())print(keyword.kwlist)'''"""第一行注釋第二行注釋第三行注釋"""print('hello world')

多行

通常情況下,python一行寫一條語句,結尾不需要添加任何結束符號(如:C/C++的分號)。如果語句比較長,需要跨越多行時,可以使用反斜杠'\'符號來實現多行語句。但有一個例外,在()、[]、{}中的多行語句,不需要使用反斜杠'\'符號。

a = 66b = 33 + \55 + \77# c爲元組c = (1, 3, 5, 7, 9)# d爲列表d = ['hello',     'world',     'Fighting']# e爲sete = {90,     91,     92}

當然,如果需要將多條語句寫在一行,Python也是允許的,在每條語句後面加上分號即可。

a = 66; b = 99; c = 1print(a + b + c)

空行

空行與代碼縮進有所不同,空行是程序代碼的一部分,但並不是Python語法的一部分。編寫Python代碼時,即使不插入空行,Python解釋器運行也不會報錯。函數之間、類的方法之間、不同功能塊之間用空行進行分隔,表示一段新的代碼的開始,便于日後代碼的維護和重構。

def func1():    print('Hello world')def func2():    print('Hello World')func1()func2()

縮進

與C/C++、Java等語言不同,Python不使用大括號{}來表示類、函數、邏輯塊的邊界範圍,而是使用縮進。縮進的空格數是可變的(推薦4個空格),但是同一個代碼塊的語句必須包含相同的縮進空格數,否則,程序運行時會報錯。

a = 99if a > 100:    print('ok')    print('a is larger than 100')else:    print('cancel')    print('a is equal to or less than 100')# 縮進空格不一致,運行會報錯:IndentationError: unindent does not match any outer indentation level  print('hello')

引號

Python可以使用單引號(')、雙引號(")、三引號(''' 或 """)來表示字符串。開始的引號與結束的引號的類型必須一致,三引號可以由多行組成。當字符串中含有雙引號時,可以使用單引號,這樣不需要使用轉移字符'\'。同樣的,當字符串中含有單引號時,可以使用雙引號。

a = 'Hello'# 字符串中含有單引號,使用單引號時,必須使用轉義字符b = 'I\'m hope_wisdom'# 字符串中含有單引號,使用雙引號時,不需要使用轉義字符c = "I'm hope_wisdom"d = '''I have a dream'''e = """成就   一億技術人"""

輸入輸出

Python提供了input函數用于輸入。input函數將所有輸入都當作字符串看待,返回字符串類型。

Python提供了print函數用于輸出,默認的分隔符爲空格符,默認會換行(結尾符爲換行符),可以通過額外的sep和end參數指定分隔符和結尾符。

a = input('input your name: ')print('your name is', a)# 輸出:apple-banana-lemon#print('apple', 'banana', 'lemon', sep='-', end='#')

import

在Python中需要引入其他庫和模塊的功能時,使用import關鍵字。

將整個模塊導入時,使用:import 模塊名。此時調用模塊中的函數時,必須帶上模塊名。

從模塊中導入函數A、B、C時,使用:from 模塊名 import A, B, C。此時調用模塊中的函數時,不用帶上模塊名。還可以使用as將函數名指定爲其他名稱,比如:from 模塊名 import A as A_alias(後續使用A_alias即可)。如果需要導入模塊中的所有函數,可以使用:from 模塊名 import *。

import platformfrom platform import version, releasefrom platform import processor as my_processorprint(platform.system())print(version(), release())print(my_processor())

運算符

表達式由運算符和操作數兩部分組成,比如:66+88是一個表達式,其中,66、88是操作數,而+則是運算符。Python中常見的運算符可參考下表。

運算符

含義

使用說明

+

相加

a + b

-

相減

a - b

*

相乘

a * b

/

相除

a / b,10 / 4的結果爲:2.5

//

取整除

a // b,10 // 4的結果爲:2

%

取模

a % b,10 % 4的結果爲:2

**

取冪

a**b,2**3的結果爲:8

==

是否相等

a == b

!=

是否不等于

a != b

>

是否大于

a > b

<

是否小于

a < b

>=

是否大于等于

a >= b

<=

是否小于等于

a <= b

=

賦值

a = 100

+=

加法賦值

a += b,與a = a + b相同

-=

減法賦值

a -= b,與a = a - b相同

*=

乘法賦值

a *= b,與a = a * b相同

/=

除法賦值

a /= b,與a = a / b相同

//=

整除賦值

a //= b,與a = a // b相同

%=

取模賦值

a %= b,與a = a % b相同

**=

取冪賦值

a **= b,與a = a ** b相同

<<

左移幾位

a << 2

>>

右移幾位

a >> 2

&

按位與

a & b

|

按位或

a | b

~

按位取反

~a

^

按位異或

a ^ b

and

布爾與

a and b

or

布爾或

a or b

not

布爾非

not a

is

兩個標識符是否引用同一個對象

a is b

is not

兩個標識符是否引用不同對象

a is not b

in

是否爲序列、集合或映射的成員

a in b

not in

是否不爲序列、集合或映射的成員

a not in b

這些運算符的優先級可參看下表,表中的運算符從上到下,對應的優先級從高到低。

運算符

備注

**

冪運算

~ + -

按位取反、正號、負號

* / % //

乘、除、取模、取整除

+ -

加法、減法

>> <<

右移、左移

&

按位與

| ^

按位或、按位異或

<=  <  >  >=

比較運算符

==   !=

等于、不等于

= %= /= //= -= += *= **=

賦值運算符

is  is not

身份運算符

in  not in

成員運算符

not and or

邏輯運算符

條件控制

在Python中,使用if、elif、else這三個關鍵字進行條件判斷與執行控制。

a = 66if a < 66:    print('condition 1')elif a < 88:    print('condition 2')elif a < 100:    print('condition 3')else:    print('condition 4')

if、else還可以用作三目運算符,用于簡化代碼。

a = 100b = 9 if a < 188 else 10

在Python 3.10中,新增了match、case的條件判斷。match後的對象會依次與case後的值進行匹配,如果匹配成功,則執行匹配到的表達式;否則,直接跳過。case _則可以匹配剩下的所有情況,但只能放在最後面,否則,運行時會提示類似的錯誤信息:wildcard makes remaining patterns unreachable。

a = 2match a:    case 1:        print('condition 1')    case 2:        print('condition 2')    case 3:        print('condition 3')    case _:        print('all')

循環

在Python中,使用while和for in進行循環的執行。在循環體中,continue用于退出本次循環,繼續執行下一次循環;break則用于退出整個循環。while和for in後面,還可以添加else語句。當循環正常退出時,會執行else裏面的代碼;當循環執行了break跳出時,不會執行else裏面的代碼。

i = 0while (i < 10):    if i == 5:        i += 1        continue    print(i)    i += 1else:    # 會執行下面的語句,因爲是正常退出循環的    print('while loop completed')a = ['C', 'S', 'D', 'N']for item in a:    if item == 'D':        break    print(item)else:    # 不會執行下面的語句,因爲是通過break跳出循環的    print('for loop completed')

#!/usr/bin/python3的作用

在有些Python源碼中,會發現文件的首行爲:#!/usr/bin/python3或#!/usr/bin/env python3。這條語句在Windows下基本沒什麽作用,主要在Linux、Mac等系統下生效。當使用chmod +x file.py命令增加file.py文件的可執行權限後,可以通過上面的語句找到python3程序,進而通過./file.py的方式直接執行python源碼文件。

#!/usr/bin/python3和#!/usr/bin/env python3區別在于:前者直接指定了python3解釋器的具體路徑,後者則讓env去查找python3的路徑,並替換作爲python3解釋器的具體路徑。

1 阅读:29

希望睿智

簡介:軟件技術分享,一起學習,一起成長,一起進步