九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
震驚Python的精髓居然是方括號花括號和圓括號

https://m.toutiaocdn.com/i6862197987209118219/?app=news_article&timestamp=1597845881&use_new_style=1&req_id=20200819220441010145026020301643C9&group_id=6862197987209118219 


和其他編程語言相比,什么才是Python獨一無二的特色呢?很多程序員會說,縮進。的確,縮進是Python語言的標志性特點,但這只是外在的、形式上的。從語言特性層面講,Python的特點是什么呢?我嘗試著在知乎上搜索了一下,最具代表性的答案分別是語法簡潔、簡單易學(xué)、代碼高效功能強大等四項。仔細品味這四項,我還是覺得,這是Python語言表現(xiàn)出來的使用效果或用戶感受,仍然不是語言特性層面的特色。

換個說法,究竟是Python的哪些語言特性使得人們普遍認為Python具有語法簡潔、簡單易學(xué)、代碼高效、功能強大的特點呢?我個人認為,這要歸功于列表(list)、字典(dict)、元組(tuple)和集合(set)這“四大金剛”。盡管整型(int)、浮點型(float)和字符串(str)也很重要,但這三種對象相對于其他編程語言來說,差異并不像“四大金剛”那樣明顯??梢院敛豢鋸埖卣f,列表、字典、元組和集合代表了Python語言的核心和基礎(chǔ),同時也是Python的精髓所在。學(xué)會使用列表、字典、元組和集合,就意味著掌握了Python這門編程語言。

如果認可這個觀點,那么,Python的精髓就從列表、字典、元組和集合等“四大金剛”,演變成由方括號、花括號和圓括號組成的“括號族”。

1. 方括號

方括號幾乎是所有編程語言的第一符號。這里的第一,并不是指使用頻率,而是指這個符號展現(xiàn)出的編程語言的內(nèi)涵和創(chuàng)造力。事實上,就符號的使用頻率而言,方括號也可能排在首位——只是我的直覺,并沒有統(tǒng)計數(shù)據(jù)支持。

1.1 創(chuàng)建列表

對于初學(xué)者來說,創(chuàng)建列表最常用方法的就是用一對方括號。

>>> a = []>>> a[]>>> b = [3.14, False, 'x', None]>>> b[3.14, False, 'x', None]

即便是老鳥,也會大量使用方括號創(chuàng)建列表,尤其是使用推導(dǎo)式創(chuàng)建列表的情況下。

>>> c = [i**2 for i in range(5)]>>> c[0, 1, 4, 9, 16]

但我一直覺得,方括號就像口語或俚語,太過隨便。我更喜歡使用嚴謹?shù)膌ist()來創(chuàng)建列表。使用list()創(chuàng)建列表,是list類的實例化的標準方法,可以體會list類的構(gòu)造函數(shù)如何適應(yīng)不同類型的參數(shù)。

>>> a = list()>>> a[]>>> b = list((3.14, False, 'x', None))>>> b[3.14, False, 'x', None]>>> c = list({1,2,3})>>> c[1, 2, 3]>>> d = list({'x':1,'y':2,'z':3})>>> d['x', 'y', 'z']>>> e = list(range(5))>>> e[0, 1, 2, 3, 4]>>> f = list('*'*i for i in range(5))>>> f['', '*', '**', '***', '****']

1.2 列表的索引

方括號可以創(chuàng)建列表,但方括號并不等同于列表,因為方括號還用來索引。

>>> [3.14, False, 'x', None][2]'x'>>> [3.14, False, 'x', None][-2]'x'>>> [3.14, False, 'x', None][1:][False, 'x', None]>>> [3.14, False, 'x', None][:-1][3.14, False, 'x']>>> [3.14, False, 'x', None][::2][3.14, 'x']>>> [3.14, False, 'x', None][::-1][None, 'x', False, 3.14]

列表的索引非常靈活,尤其是引入了負數(shù)索引,用-1表示最后一個元素或逆序,實屬喜大普奔。上面的操作,屬于常用索引方式,如果能讀懂下面的代碼,說明你已經(jīng)具備了足夠深的功力。

>>> a = [3.14, False, 'x', None]>>> a[2:2] = [1,2,3]>>> a[3.14, False, 1, 2, 3, 'x', None]

1.3 列表的方法

對于列表對象的方法如果能信手拈來,那就是Python高手了。

>>> a = [3.14, False, 'x', None]>>> a.index('x')2>>> a.append([1,2,3])>>> a[3.14, False, 'x', None, [1, 2, 3]]>>> a[-1].insert(1, 'ok')>>> a[3.14, False, 'x', None, [1, 'ok', 2, 3]]>>> a.remove(False)>>> a[3.14, 'x', None, [1, 'ok', 2, 3]]>>> a.pop(1)'x'>>> a[3.14, None, [1, 'ok', 2, 3]]>>> a.pop()[1, 'ok', 2, 3]>>> a[3.14, None]

2. 花括號

花括號代表字典對象,大多數(shù)初學(xué)者都這樣認為。然而,這是錯誤的,至少是片面的。下面的代碼中,a和b都是用花括號創(chuàng)造出來的對象,卻一個是字典,一個是集合。

>>> a = {}>>> a{}>>> b = {'x','y','z'}>>> b{'y', 'z', 'x'}>>> type(a)<class 'dict'>>>> type(b)<class 'set'>

原來,Python用花括號表示字典和集合兩種對象:花括號內(nèi)是空的,或者是鍵值對的,表示字典;花括號內(nèi)是無重復(fù)元素的,表示集合。為了不引起誤會,我習(xí)慣用dict()來生成字典,用set()來生成集合。

>>> dict(){}>>> dict({'x':1, 'y':2, 'z':3}){'x': 1, 'y': 2, 'z': 3}>>> dict((('x',1), ('y',2), ('z',3))){'x': 1, 'y': 2, 'z': 3}>>> dict.fromkeys('xyz'){'x': None, 'y': None, 'z': None}>>> dict.fromkeys('abc', 0){'a': 0, 'b': 0, 'c': 0}>>> set((3,4,5)){3, 4, 5}>>> set({'x':1, 'y':2, 'z':3}){'y', 'z', 'x'}>>> set([3,3,4,4,5,5]){3, 4, 5}

編碼實踐中,雖然在某些情況下集合是無可替代的,但集合的使用頻率是“四大金剛”中最低的,我們這里不展開討論,只說說字典的使用技巧。

2.1 判斷一個鍵是否存在于字典中

Py2時代,dict對象曾經(jīng)有has_key()的方法,用來判斷是否包含某個鍵。py3舍棄了這個方法,判斷一個鍵是否存在于字典中,只能使用in這樣的方法了。

>>> a = dict({'x':1, 'y':2, 'z':3})>>> 'x' in aTrue>>> 'v' in aFalse

2.2 向字典中添加一個新鍵或更新鍵值

很多人喜歡用對字典的一個鍵賦值的方法,實現(xiàn)向字典中添加一個新鍵或更新鍵值。

>>> a = dict()>>> a['name'] = 'xufive'>>> a{'name': 'xufive'}

我不推薦這樣的方式,使用update()才更有儀式感,還可以一次添加或修改多個鍵。

>>> a = dict()>>> a.update({'name':'xufive', 'gender':'男'})>>> a{'name': 'xufive', 'gender': '男'}

2.3 從字典中獲取一個鍵值

a['age’]是最常用的方式,但是也還會遇到鍵不存在的異常。下面的方法值得推薦。

>>> a.get('age', 18)18

2.4 獲取字典的全部鍵、全部值、全部鍵值對

dict類提供了keys()、values()和items()等三個方法分別返回字典的全部鍵、全部值和全部鍵值對。需要注意的是,返回結(jié)果并非列表,而是迭代器。如果你需要列表形式的返回結(jié)果,請使用list()轉(zhuǎn)換。

>>> a = dict()>>> a.update({'name':'xufive', 'gender':'男'})>>> list(a.keys())['name', 'gender']>>> list(a.values())['xufive', '男']>>> list(a.items())[('name', 'xufive'), ('gender', '男')]

2.5 遍歷字典

遍歷字典的時候,很多同學(xué)或?qū)懗杀闅v字典的keys()。其實,不需要這么麻煩,可以像下面這樣直接遍歷。

>>> a = dict([('name', 'xufive'), ('gender', '男')])>>> for key in a:print(key, a[key])name xufivegender 男

3. 圓括號

圓括號代表元組對象,這么說應(yīng)該沒有問題吧?的確,聽起來沒有問題,但在元組的使用上,我相信每個初學(xué)者都會跌進同一個深坑至少一次。

3.1 必入之淺坑

元組不用于列表的最顯著的特點,就是無法更新元素的值。忘記或者忽略這一點,就會入坑。

>>> a = (3, 4)>>> a[0] = 5Traceback (most recent call last): File '<pyshell#14>', line 1, in <module> a[0] = 5TypeError: 'tuple' object does not support item assignment

3.2 必入之深坑

使用了多年P(guān)ython之后,我曾經(jīng)寫出的最糟糕的bug,就是下面這一段代碼。

>>> import threading>>> def do_something(name):print('My name is %s.'%name)>>> th = threading.Thread(target=do_something, args=('xufive'))>>> th.start()Exception in thread Thread-1:Traceback (most recent call last):  File 'C:\Users\xufive\AppData\Local\Programs\Python\Python37\lib\threading.py', line 926, in _bootstrap_inner    self.run()  File 'C:\Users\xufive\AppData\Local\Programs\Python\Python37\lib\threading.py', line 870, in run    self._target(*self._args, **self._kwargs)TypeError: do_something() takes 1 positional argument but 6 were given

我分明只提供了1個參數(shù),卻提示說給出了6個參數(shù),為什么呢?原來,元組初始化時,如果只有單個參數(shù),則必須在單個參數(shù)之后增加一個逗號(,),否則,初始化結(jié)果僅返回原參數(shù)。

>>> a = (5)>>> a5>>> type(a)<class 'int'>>>> b = ('xyz')>>> b'xyz'>>> type(b)<class 'str'>>>> a, b = (5,), ('xyz',)>>> a, b((5,), ('xyz',))>>> type(a), type(b)(<class 'tuple'>, <class 'tuple'>)

3.3 單星號解包元組

格式化輸出字符串時,C語言風(fēng)格是我的最愛。當有多個%需要匹配時,下面也許是最自然而然的寫法。

>>> args = (95,99,100)>>> '%s:語文%d分,數(shù)學(xué)%d分,英語%d分'%('天元浪子', args[0], args[1], args[2])'天元浪子:語文95分,數(shù)學(xué)99分,英語100分'

正確固然正確,但不夠精彩。滿分寫法應(yīng)該是這樣的。

>>> args = (95,99,100)>>> '%s:語文%d分,數(shù)學(xué)%d分,英語%d分'%('天元浪子', *args)'天元浪子:語文95分,數(shù)學(xué)99分,英語100分'

3.4 為什么要使用元組?

既然元組的元素不可改變,那為什么還要使用元組呢?使用列表代替元組不是更方便嗎?誠然,在多數(shù)情況下,可以使用列表代替元組,但下面的例子卻可以證明,列表無法代替元組。

>>> s = {1,'x',(3,4,5)}>>> s{1, (3, 4, 5), 'x'}>>> s = {1,'x',[3,4,5]}Traceback (most recent call last):  File '<pyshell#32>', line 1, in <module>    s = {1,'x',[3,4,5]}TypeError: unhashable type: 'list'

我們可以將元組加到集合中,但列表不行,因為列表是不可哈希(unhashable)的。理解這一點并不困難:列表元素可以被動態(tài)改變,所以沒有一個固定不變的哈希值——這與集合要求的元素唯一性沖突;而元組的元素被禁止更新,其哈希值在整個生命周期都不會變化,因此可以成為集合的元素。

顯然,元組和列表有者完全不同的存儲方式。因為不用考慮更新問題,元組的速度性能要遠優(yōu)于列表。優(yōu)先使用元組,應(yīng)該成為Python程序員遵循的一條基本原則。

最后,小編想說:我是一名python開發(fā)工程師,

整理了一套最新的python系統(tǒng)學(xué)習(xí)教程,

想要這些資料的可以關(guān)注私信小編“01”即可(免費分享哦)希望能對你有所幫助

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
你還在為python中的列表、元組、字典發(fā)愁嘛,別愣著了,快來看!
Python dict字典詳解
Python兩個列表合并為一個字典
Python字典推導(dǎo)式
UC頭條:python基礎(chǔ)知識
Python字典及基本操作(超級詳細)
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服