本教程提供有關(guān)Python中使用的所有關(guān)鍵字的簡(jiǎn)要信息。
關(guān)鍵字是Python中的保留字。我們不能將關(guān)鍵字用作變量名,函數(shù)名或任何其他標(biāo)識(shí)符。
這是Python編程中所有關(guān)鍵字的列表
False | await | else | import | pass |
None | break | except | in | raise |
True | class | finally | is | return |
and | continue | for | lambda | try |
as | def | from | nonlocal | while |
assert | del | global | not | with |
async | elif | if | or | yield |
上述關(guān)鍵字可能會(huì)在不同版本的Python中更改??赡軙?huì)添加一些額外內(nèi)容或?qū)⒛承﹥?nèi)容刪除。您始終可以通過(guò)以下方法來(lái)獲取當(dāng)前版本中的關(guān)鍵字列表。
>>> import keyword >>> print(keyword.kwlist) ['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']
True和False是Python中的真假值。它們是Python中比較操作或邏輯(布爾)操作的結(jié)果。例如:
>>> 1 == 1 True >>> 5 > 3 True >>> True or False True >>> 10 <= 1 False >>> 3 > 7 False >>> True and False False
在這里我們可以看到前三個(gè)語(yǔ)句是正確的,因此解釋器返回True,其余三個(gè)語(yǔ)句返回False。True和False在python中與1和0相同??梢酝ㄟ^(guò)以下示例證明這一點(diǎn):
>>> True == 1 True >>> False == 0 True >>> True + True 2
None 是Python中的一個(gè)特殊常量,表示不存在值或空值。
它是自己的數(shù)據(jù)類(lèi)型NoneType的對(duì)象。我們不能創(chuàng)建多個(gè)None對(duì)象,但可以將其分配給變量。這些變量是相等的。
我們必須特別注意,None并不表示False,0或任何空列表,字典,字符串等。例如:
>>> None == 0 False >>> None == [] False >>> None == False False >>> x = None >>> y = None >>> x == y True
不返回任何內(nèi)容的虛函數(shù)將自動(dòng)返回一個(gè)None對(duì)象。程序流未遇到return語(yǔ)句的函數(shù)也返回None。例如:
def a_void_function(): a = 1 b = 2 c = a + b x = a_void_function() print(x)
輸出結(jié)果
None
該程序盡管在內(nèi)部執(zhí)行了一些操作,但其函數(shù)不返回值。因此,當(dāng)我們打印x時(shí),我們得到的是自動(dòng)(隱式)返回的None。同樣,這是另一個(gè)示例:
def improper_return_function(a): if (a % 2) == 0: return True x = improper_return_function(3) print(x)
輸出結(jié)果
None
盡管此函數(shù)有一個(gè)return聲明,但并非在每種情況下都可以實(shí)現(xiàn)。該函數(shù)僅在輸入為偶數(shù)時(shí)返回True。
如果我們給函數(shù)一個(gè)奇數(shù),則隱式返回None。
and,or,not是Python中的邏輯運(yùn)算符。 并且只有兩個(gè)操作數(shù)都為T(mén)rue時(shí),結(jié)果才為T(mén)rue。 and的True,F(xiàn)alse表如下:
A | B | A and B |
---|---|---|
True | True | True |
True | False | False |
False | True | False |
False | False | False |
or如果任何一個(gè)操作數(shù)為T(mén)rue,將結(jié)果為T(mén)rue。or 真值表如下:
A | B | A or B |
---|---|---|
True | True | True |
True | False | True |
False | True | True |
False | False | False |
not運(yùn)算符用于反轉(zhuǎn)真值。not真值表如下:
A | not A |
---|---|
True | False |
False | True |
下面給出了一些用法示例
>>> True and False False >>> True or False True >>> not False True
as用于在導(dǎo)入模塊時(shí)創(chuàng)建別名。這意味著在導(dǎo)入模塊時(shí)給模塊一個(gè)不同的名稱(chēng)(用戶(hù)定義)。
例如,Python有一個(gè)稱(chēng)為的標(biāo)準(zhǔn)模塊math。假設(shè)我們要使用別名來(lái)計(jì)算余弦pi。我們可以使用以下方法做到這一點(diǎn)as:
>>> import math as myAlias >>>myAlias.cos(myAlias.pi) -1.0
在這里,我們math通過(guò)給模塊命名來(lái)導(dǎo)入該模塊myAlias?,F(xiàn)在,我們可以math使用該名稱(chēng)引用該模塊。使用該名稱(chēng),我們計(jì)算了cos(pi)并得到-1.0了答案。
assert 用于調(diào)試目的。
在編程時(shí),有時(shí)我們希望了解內(nèi)部狀態(tài)或檢查我們的假設(shè)是否正確。assert幫助我們做到這一點(diǎn)并更方便地發(fā)現(xiàn)錯(cuò)誤。assert后面跟一個(gè)條件。
如果條件為真,則什么也不會(huì)發(fā)生。但是如果條件為假,則引發(fā)AssertionError。例如:
>>> a = 4 >>> assert a < 5 >>> assert a > 5 Traceback (most recent call last): File "<string>", line 301, in runcode File "<interactive input>", line 1, in <module> AssertionError
為了使我們更好地理解,我們還可以提供一條消息,該消息將與AssertionError一起打印。
>>> a = 4 >>> assert a > 5, "The value of a is too small" Traceback (most recent call last): File "<string>", line 301, in runcode File "<interactive input>", line 1, in <module> AssertionError: The value of a is too small
在這一點(diǎn)上,我們可以注意到,
assert condition, message
等價(jià)于
if not condition: raise AssertionError(message)
Python中的asyncio庫(kù)提供了async和await關(guān)鍵字。它們用于在Python中編寫(xiě)并發(fā)代碼。例如,
import asyncio async def main(): print('Hello') await asyncio.sleep(1) print('world')
要運(yùn)行該程序,我們使用
asyncio.run(main())
在以上程序中,async關(guān)鍵字指定該函數(shù)將異步執(zhí)行。
在這里,首先打印Hello。await關(guān)鍵字使得程序等待1秒。然后再打印world。
break和continue在for和while循環(huán)內(nèi)使用以更改其正常行為。
break將結(jié)束它所在的最小循環(huán),而控制流將直接流到循環(huán)下的語(yǔ)句。continue導(dǎo)致結(jié)束循環(huán)的當(dāng)前迭代,而不是整個(gè)循環(huán)。
這可以通過(guò)以下兩個(gè)示例進(jìn)行說(shuō)明:
for i in range(1,11): if i == 5: break print(i)
輸出結(jié)果
1 2 3 4
在這里,for循環(huán)打算打印從1到10的數(shù)字。但是如果當(dāng)i等于5 時(shí)就滿(mǎn)足了條件,我們從循環(huán)中中斷了。因此,僅打印范圍1到4。
for i in range(1,11): if i == 5: continue print(i)
輸出結(jié)果
1 2 3 4 6 7 8 9 10
在這里,我們使用continue相同的程序。因此,當(dāng)滿(mǎn)足條件時(shí),將跳過(guò)該迭代。但是我們不會(huì)退出循環(huán)。因此,將打印出除5以外的所有值。
了解有關(guān)Python break and Continue語(yǔ)句的更多信息。
class 用于在Python中定義新的用戶(hù)定義類(lèi)。
類(lèi)是試圖表示現(xiàn)實(shí)情況的相關(guān)屬性和方法的集合。將數(shù)據(jù)和函數(shù)放在一個(gè)類(lèi)中的想法對(duì)于面向?qū)ο缶幊蹋∣OP)的概念至關(guān)重要。
可以在程序中的任何位置定義類(lèi)。但是在模塊中定義單個(gè)類(lèi)是一個(gè)好習(xí)慣。以下是示例用法:
class ExampleClass: def function1(parameters): … def function2(parameters): …
了解有關(guān)Python對(duì)象和類(lèi)的更多信息。
def 用于定義用戶(hù)定義的函數(shù)。
函數(shù)是一組相關(guān)語(yǔ)句,它們一起執(zhí)行某些特定任務(wù)。它幫助我們將代碼組織成可管理的塊,并完成一些重復(fù)的任務(wù)。
def的用法如下所示:
def function_name(parameters): …
了解有關(guān)Python函數(shù)的更多信息。
del用于刪除對(duì)對(duì)象的引用。一切都是Python中的對(duì)象。我們可以使用以下方式刪除變量,通過(guò)引用del
>>> a = b = 5 >>> del a >>> a Traceback (most recent call last): File "<string>", line 301, in runcode File "<interactive input>", line 1, in <module> NameError: name 'a' is not defined >>> b 5
在這里我們可以看到該變量的引用a已刪除。因此,不再定義。但是b仍然存在。
del 也用于從列表或字典中刪除項(xiàng)目:
>>> a = ['x','y','z'] >>> del a[1] >>> a ['x', 'z']
if, else, elif 用于條件分支或決策。
當(dāng)我們要測(cè)試某個(gè)條件并僅在條件為真時(shí)才執(zhí)行塊時(shí),我們使用if和elif。elif是else if的縮寫(xiě)。else是條件為假時(shí)執(zhí)行的塊。通過(guò)以下示例將很清楚:
def if_example(a): if a == 1: print('One') elif a == 2: print('Two') else: print('Something else') if_example(2) if_example(4) if_example(1)
輸出結(jié)果
Two Something else One
在此,該函數(shù)檢查輸入的數(shù)字(如果是1或2),并輸出結(jié)果。否則,任何輸入都會(huì)導(dǎo)致else部分代碼執(zhí)行。
了解有關(guān)Python if and if ... else語(yǔ)句的更多信息。
except, raise, try 與Python中的異常一起使用。
異常基本上是錯(cuò)誤,表明在執(zhí)行我們的程序時(shí)出現(xiàn)了問(wèn)題。在Python異常的幾個(gè)實(shí)例IOError,ValueError,ZeroDivisionError,ImportError,NameError,TypeError等。try...except塊用于捕獲Python中的異常。
我們可以使用raise關(guān)鍵字顯式引發(fā)異常。以下是一個(gè)示例:
def reciprocal(num): try: r = 1/num except: print('Exception caught') return return r print(reciprocal(10)) print(reciprocal(0))
輸出結(jié)果
0.1 Exception caught None
在此,該函數(shù)reciprocal()返回輸入數(shù)字的倒數(shù)。
輸入10時(shí),正常輸出為0.1。 但是,當(dāng)我們輸入0時(shí),會(huì)自動(dòng)引發(fā) ZeroDivisionError異常。
這是被我們的try…except塊捕獲的,我們返回None。 我們還可以通過(guò)檢查輸入并按如下所示在其他地方處理它來(lái)顯式引發(fā)ZeroDivisionError:
if num == 0: raise ZeroDivisionError('cannot divide')
finally與try…except塊一起使用以關(guān)閉資源或文件流。
使用finally確保即使其中有未處理的異常,其內(nèi)部的代碼塊也可以執(zhí)行。例如:
try: Try-block except exception1: Exception1-block except exception2: Exception2-block else: Else-block finally: Finally-block
此處,如果中存在異常Try-block,則在except或else塊中對(duì)其進(jìn)行處理。但是,無(wú)論執(zhí)行順序如何,即使有錯(cuò)誤,我們也可以放心執(zhí)行Finally-block。這對(duì)于清理資源很有用。
了解有關(guān)Python編程中異常處理的更多信息。
for用于循環(huán)。通常,我們for在知道要循環(huán)的次數(shù)時(shí)使用。
在Python中,我們可以將其與任何類(lèi)型的序列(例如列表或字符串)一起使用。這是一個(gè)for用于遍歷names列表的示例:
names = ['John','Monica','Steven','Robin'] for i in names: print('Hello '+i)
輸出結(jié)果
Hello John Hello Monica Hello Steven Hello Robin
了解有關(guān)Python for loop的更多信息。
import關(guān)鍵字用于將模塊導(dǎo)入當(dāng)前命名空間。from…import用于將特定屬性或函數(shù)導(dǎo)入當(dāng)前命名空間。例如:
import math
將導(dǎo)入math模塊?,F(xiàn)在我們可以將其中的cos()函數(shù)用作math.cos()。但是,如果我們只想導(dǎo)入cos()函數(shù),則可以使用from來(lái)完成
from math import cos
現(xiàn)在我們可以簡(jiǎn)單地使用該函數(shù)cos(),無(wú)需編寫(xiě)math.cos()。
了解有關(guān)Python模塊和import語(yǔ)句的更多信息。
global 用于聲明函數(shù)內(nèi)部的變量是全局變量(函數(shù)外部)。
如果我們需要讀取全局變量的值,則不必將其定義為global。這是需要的地方。
如果需要在函數(shù)內(nèi)部修改全局變量的值,則必須使用進(jìn)行聲明global。否則,將創(chuàng)建一個(gè)具有該名稱(chēng)的局部變量。
以下示例將幫助我們闡明這一點(diǎn)。
globvar = 10 def read1(): print(globvar) def write1(): global globvar globvar = 5 def write2(): globvar = 15 read1() write1() read1() write2() read1()
輸出結(jié)果
10 5 5
在這里,read1()函數(shù)只是讀取globvar的值。因此,我們不需要將其聲明為global。但是write1()函數(shù)正在修改值,因此我們需要將變量聲明為global。
我們可以在輸出中看到確實(shí)進(jìn)行了修改(將10更改為5)。write2()還試圖修改此值。但我們尚未將其聲明為global。
因此,將globvar創(chuàng)建一個(gè)新的局部變量,該局部變量在該函數(shù)外部不可見(jiàn)。盡管我們將此局部變量修改為15,但全局變量保持不變。這在我們的輸出中清晰可見(jiàn)。
in用于測(cè)試序列(列表,元組,字符串等)是否包含值。如果該值存在,它返回True,否則返回False。例如:
>>> a = [1, 2, 3, 4, 5] >>> 5 in a True >>> 10 in a False
in的次要用途是遍歷for循環(huán)中的序列。
for i in 'hello': print(i)
輸出結(jié)果
h e l l o
is在Python中用于測(cè)試對(duì)象身份。==運(yùn)算符用于測(cè)試兩個(gè)變量是否相等,而運(yùn)算符is用于測(cè)試兩個(gè)變量是否引用同一對(duì)象。
如果對(duì)象相同則返回True,否則返回False。
>>> True is True True >>> False is False True >>> None is None True
我們知道在Python中只有一個(gè)True、False和None的實(shí)例,所以它們是相同的。
>>> [] == [] True >>> [] is [] False >>> {} == {} True >>> {} is {} False
一個(gè)空列表或字典等于另一個(gè)空列表或字典。但是它們不是相同的對(duì)象,因?yàn)樗鼈兎謩e位于內(nèi)存中。這是因?yàn)榱斜砗妥值涫强勺兊模梢愿闹担?/p>
>>> '' == '' True >>> '' is '' True >>> () == () True >>> () is () True
與列表和字典不同,字符串和元組是不可變的(值一旦定義就不能更改)。因此,兩個(gè)相等的字符串或元組也相同。它們引用相同的存儲(chǔ)位置。
lambda用于創(chuàng)建匿名函數(shù)(無(wú)名稱(chēng)的函數(shù))。它是不包含return語(yǔ)句的內(nèi)聯(lián)函數(shù)。它由一個(gè)求值并返回的表達(dá)式組成。例如:
a = lambda x: x*2 for i in range(1,6): print(a(i))
輸出結(jié)果
2 4 6 8 10
在這里,我們創(chuàng)建了一個(gè)內(nèi)聯(lián)函數(shù),使用lambda語(yǔ)句將值加倍。我們使用它來(lái)將包含1到5的列表中的值加倍。
了解有關(guān)Python lamda函數(shù)的更多信息。
nonlocal關(guān)鍵字的使用與關(guān)鍵字global非常相似。nonlocal用于聲明嵌套函數(shù)內(nèi)部的變量(函數(shù)內(nèi)部的函數(shù))不是局部變量,這意味著它位于外部封閉函數(shù)中。如果需要在嵌套函數(shù)中修改非局部變量的值,則必須使用進(jìn)行聲明nonlocal。否則,將在嵌套函數(shù)內(nèi)創(chuàng)建具有該名稱(chēng)的局部變量。以下示例將幫助我們闡明這一點(diǎn)。
def outer_function(): a = 5 def inner_function(): nonlocal a a = 10 print("Inner function: ",a) inner_function() print("Outer function: ",a) outer_function()
輸出結(jié)果
Inner function: 10 Outer function: 10
在此,inner_function()嵌套在outer_function中。
變量a位于outer_function()中。因此,如果要在inner_function()中進(jìn)行修改a,則必須將其聲明為nonlocal。請(qǐng)注意,這a不是全局變量。
因此,我們從輸出中看到,該變量已在嵌套的inner_function()內(nèi)部成功修改。 不使用nonlocal關(guān)鍵字的結(jié)果如下:
def outer_function(): a = 5 def inner_function(): a = 10 print("Inner function: ",a) inner_function() print("Outer function: ",a) outer_function()
輸出結(jié)果
Inner function: 10 Outer function: 5
在這里,我們不聲明嵌套函數(shù)中的變量a是非本地的。因此,將創(chuàng)建一個(gè)具有相同名稱(chēng)的新局部變量,但不修改非局部變量a,如我們的輸出所示。
pass是Python中的空語(yǔ)句。它執(zhí)行時(shí)什么也沒(méi)有發(fā)生。它用作占位符。
假設(shè)我們有一個(gè)尚未實(shí)現(xiàn)的功能,但我們想在將來(lái)實(shí)現(xiàn)。簡(jiǎn)單地寫(xiě),
def function(args):
在程序中間將給我們IndentationError。 取而代之的是,我們使用pass語(yǔ)句構(gòu)造一個(gè)空白主體。
def function(args): pass
我們也可以空class著做同樣的事情。
class example: pass
return 語(yǔ)句在函數(shù)內(nèi)部用于退出并返回值。
如果我們沒(méi)有顯式返回值,則會(huì)自動(dòng)返回None。下面的示例對(duì)此進(jìn)行了驗(yàn)證。
def func_return(): a = 10 return a def no_return(): a = 10 print(func_return()) print(no_return())
輸出結(jié)果
10 None
while 用于Python中的循環(huán)。
while循環(huán)內(nèi)的語(yǔ)句一直執(zhí)行,直到while循環(huán)條件求值結(jié)果為False或遇到一條break語(yǔ)句為止。下面的程序?qū)Υ诉M(jìn)行了說(shuō)明。
i = 5 while(i): print(i) i = i – 1
輸出結(jié)果
5 4 3 2 1
請(qǐng)注意,0等于False。
了解有關(guān)Python while循環(huán)的更多信息。
with 語(yǔ)句用于在上下文管理器定義的方法中包裝代碼塊的執(zhí)行。
上下文管理器是實(shí)現(xiàn)__enter__和__exit__方法的類(lèi)。使用with語(yǔ)句可確保__exit__在嵌套塊的末尾調(diào)用該方法。這個(gè)概念類(lèi)似于try…finally塊的使用。這里是一個(gè)實(shí)例。
with open('example.txt', 'w') as my_file: my_file.write('Hello world!')
本示例將文本Hello world!寫(xiě)入example.txt文件。文件對(duì)象在其中定義了__enter__和__exit__方法,因此它們充當(dāng)自己的上下文管理器。
首先__enter__調(diào)用該方法,然后執(zhí)行語(yǔ)句中的with代碼,最后__exit__調(diào)用該方法。__exit__即使有錯(cuò)誤,也會(huì)調(diào)用方法。它基本上會(huì)關(guān)閉文件流。
yield在像return語(yǔ)句這樣的函數(shù)中使用。但是yield返回一個(gè)生成器。
生成器是一次生成一個(gè)項(xiàng)的迭代器。大量的值將占用大量?jī)?nèi)存。生成器在這種情況下非常有用,因?yàn)樗淮沃簧梢粋€(gè)值,而不是將所有值存儲(chǔ)在內(nèi)存中。例如,
>>> g = (2**x for x in range(100))
將創(chuàng)建一個(gè)生成器g,生成一個(gè)2的冪,直到生成加到99的2的冪。我們可以使用next()如下所示的函數(shù)生成這些數(shù)。
>>> next(g) 1 >>> next(g) 2 >>> next(g) 4 >>> next(g) 8 >>> next(g) 16
依此類(lèi)推...這種類(lèi)型的生成器由yield函數(shù)的語(yǔ)句返回。這是一個(gè)實(shí)例。
def generator(): for i in range(6): yield i*i g = generator() for i in g: print(i)
輸出結(jié)果
0 1 4 9 16 25
在此,函數(shù)generator()返回一個(gè)生成器,該生成器生成從0到5的數(shù)字平方。將其打印在for循環(huán)中。