輕輕松松搞定python--3

字典

字典 dict 是一種映射表, 其他語言里一般叫 map,字典里的每一個記錄保存的是鍵值對 key-value,字典以 key 為索引,key 可以不只是數(shù)字混聊,還可以是字符串、字節(jié)串乾巧、元組等類型句喜,value 是 key 位置保存的值,字典最大的特點就是查找速度快沟于,通過 key 可以快速找到對應(yīng) value咳胃,就像查字典一樣。

  • 字典的創(chuàng)建
    字典用大括號或內(nèi)置函數(shù)dict創(chuàng)建

    >>> a = {}  # 空字典
    >>> a
    {}
    >>> a = dict()  # 空字典
    >>> a
    {}
    >>> type(a)
    <class 'dict'>
    >>> 
    >>> a = {'name':'tom', 'age':18} # 初始化值
    >>> a
    {'name': 'tom', 'age': 18}
    >>> 
    
  • dictview
    字典的元素存放和前面的序列有很大的不同旷太, 字典里的元素是無序的展懈,因此不能直接遍歷字典销睁。python提供dictview來實現(xiàn)字典的遍歷功能。
    dictview是用來遍歷字典元素的一種特殊的輔助對象存崖,字典改變冻记,dictview會跟著改變,dictview通過dict.keys(), dict.values()dict.items() 創(chuàng)建来惧,有以下方法:

    操作 說明
    dict.keys() 返回字典 keys 迭代器
    dict.values() 返回字典 values 迭代器
    dict.items() 返回字典 key-values 迭代器

    dictview 有以下方法:

    操作 說明
    len(dictview) 字典元素個數(shù)
    iter(dictview) 返回字典 keys冗栗、values 或 key-values 迭代器
    x in dictview 判斷 x 是否在字典中,x 可以是 key供搀、values 或 key-values
  • 字典的操作方法

    操作 說明
    len(d) 字典元素個數(shù)
    d[key] key 位置的值隅居,如果 key 不存在,拋 KeyError 異常
    d[key] = value 設(shè)置 key 位置的值為 value
    del d[key] 刪除 key 元素葛虐,如果 key 不存在胎源,拋KeyError 異常
    key in d 判斷字典 d 是否有元素 key,有返回 True
    key not in d 判斷字典 d 是否有元素 key挡闰,沒有返回 True
    iter(d) 返回字典所有 key 值的迭代器,相當(dāng)于 iter(d.keys())
    clear() 清空字典
    copy() 淺拷貝
    classmethod fromkeys(seq[, value]) 創(chuàng)建序列掰盘,以序列 seq 中元素做字典的 key摄悯,value 為字典所有key對應(yīng)的初始值
    get(key[, default]) 返回 key 對應(yīng)的 value,如果 key 不存在愧捕,則返回 None奢驯,不會拋異常
    items() 返回所有 key-value 的 dictview
    keys() 返回所有 key 的 dictview
    values() 返回所有 value 的 dictview
    pop(key[, default]) 從字典中刪除并返回 key 元素的 value,如果 key 不存在次绘,則返回默認(rèn)值 default瘪阁,如果 default不存在,則拋異常 KeyError
    popitem() 從字典中刪除并返回一個 key-value 對邮偎,如果字典為空管跺,拋異常 KeyError
    setdefault(key[, default]) 嘗試設(shè)置元素 key,如果 key 已經(jīng)存在禾进,則返回 value豁跑,如果 key 不存在,則插入 key泻云,并返回 default
    update([other]) 更新字典艇拍,比如 d.update(key1=value1, key2=value2), other 也可以是一個字典

集合

pass

一切皆對象

python中,一切皆對象宠纯。所有數(shù)據(jù)類型包括數(shù)字卸夕、字符串、元組婆瓜、列表快集、字典等和函數(shù)、方法、類碍讨、模塊等等都是對象治力。換句話說,就是所有這些東西在底層都被實現(xiàn)為一個類勃黍,因此可以有屬性和方法宵统。
一切皆對象還有一層意思就是,這些東西即對象都可以賦值給變量覆获,并被傳遞马澈。
每個對象都有標(biāo)識(id)、類型(type)和值(value)弄息。
內(nèi)置函數(shù) id() 用來獲取id值痊班,一般就是對象的內(nèi)存地址,對象創(chuàng)建后就不會再改變摹量。
內(nèi)置函數(shù) type() 函數(shù)用來獲取類型涤伐。
內(nèi)置函數(shù) dir() 可以用來獲取對象的內(nèi)部信息,包括屬性和方法缨称。

>>> dir(1) # 常量1是整數(shù)類型對象凝果,支持很多方法
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
>>> 
>>> id(1) # 1對象的id
10923136
>>> 
>>> type(1) # 1對象的type
<class 'int'>
>>> 
>>> a = 10
>>> dir(a)  # 變量a也是整數(shù)類型對象,支持很多方法
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
>>> 
>>> dir([1,2]) # 列表也是對象睦尽,支持很多方法
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
>>> 
>>> dir(None) # None也是對象
['__bool__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
>>> 
>>> dir(dir) #內(nèi)置函數(shù)dir自己也是對象
['__call__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__text_signature__']
>>> 

變量引用

python中所有變量都只是個引用(reference器净,可以簡單理解為id和類型),類似c語言里的指針当凡。創(chuàng)建一個變量山害,相當(dāng)于在內(nèi)存中創(chuàng)建一個對象,然后變量再保存對象的引用沿量。關(guān)鍵字 del 可以用于刪除變量浪慌,但并不會刪除變量所引用的對象。
變量的類型指的是變量所引用對象的類型朴则,其實變量自身是沒有類型的眷射,其可以引用任何類型的對象。
(更底層一點分析:對象存在堆上佛掖,內(nèi)存可大可小妖碉,視具體對象類型和值而定,變量存在棧上芥被,因為只是個引用欧宜,沒有類型,固定大小拴魄,一般就幾個字節(jié))冗茸。

>>> a = 1     # 變量a引用了整數(shù)1對象席镀,即指向整數(shù)1對象
>>> id(a)     # 整數(shù)1對象的id為10923136
10923136
>>> type(a)
<class 'int'>
>>> 
>>> a = 'who am i' # 變量a重新引用了字符串'who am i'對象,即指向字符串'who am i'對象
>>> id(a)          # 字符串'who am i'對象的id值為139972913664432
139972913664432
>>> type(a)
<class 'str'>
>>> 
>>> del a    # 此處只是刪除變量a夏漱, 并不會刪除字符串'who am i'對象豪诲,對象的刪除見后面章節(jié)'內(nèi)存的釋放'
>>> a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined

變量的可變和不可變

python對象可以分為可變(mutable)和不可變(immutable)兩種類型,不可變是指對象的value值一旦初始化就不可改變挂绰,可變剛好相反屎篱。對引用了不可變對象的變量進(jìn)行修改,并不會改變變量所引用對象的值葵蒂,而是重新創(chuàng)建一個對象交播,然后再把變量指向新對象(因此對不可變類型變量進(jìn)行頻繁修改可能會很影響性能)。

整數(shù)践付、None秦士、字符串、bytes永高、元組隧土、range 是不可變類型。
bytearray命爬、列表曹傀、字典、set 是可變類型遇骑。

注意:元組的元素可以是一個可變類型卖毁,比如是一個列表揖曾,列表的值可以被改變落萎,但并不影響元組的不可變性。因為元組的元素實際保存的只是列表的引用炭剪,列表值改變了练链,但列表的引用并沒有變。

>>> a = 10
>>> id(a)
10923424
>>> 
>>> a = 20
>>> id(a)
10923744
>>> 
>>> a = 'qwert'
>>> id(a)
139972913631104
>>> 
>>> a = 'asdfg'
>>> id(a)
139972913643568
>>> 
>>> b = [5, 6]
>>> id(b)
139972913664328
>>> a = (1, 2, b) # 元組包含列表
>>> a
(1, 2, [5, 6])
>>> id(a)
139972913639216
>>> 
>>> b[0] = 9  # 列表b改變了奴拦,但列表是可變對象媒鼓,因此id沒有改變
>>> b
[9, 6]
>>> id(b)
139972913664328
>>> 
>>> a
(1, 2, [9, 6])   # 元組a看起來好像被改變了
>>> id(a)
139972913639216  # 但實際上并沒有重新創(chuàng)建元組,因為a[2]只是列表b的引用错妖,并沒有改變
>>> 

內(nèi)存的釋放

python里的變量和其引用的對象的內(nèi)存釋放是自動進(jìn)行的绿鸣,不需要顯式的調(diào)用操作,因為python內(nèi)置有垃圾回收機(jī)制(Garbage collection)暂氯,不再使用的變量和對象會被認(rèn)為是垃圾潮模,其占用的內(nèi)存會被回收(但并不一定是立即執(zhí)行,可能延后)痴施,后續(xù)進(jìn)行重用或釋放擎厢。判斷變量和對象是否不再使用也是自動進(jìn)行的究流。

變量作用域

等講函數(shù)和類時再深入講。
python能夠改變變量作用域的代碼段是def动遭、class芬探、lamda
if/elif/else、try/except/finally厘惦、for/while代碼塊中的變量偷仿,在外部也是可以訪問的。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末绵估,一起剝皮案震驚了整個濱河市炎疆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌国裳,老刑警劉巖形入,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異缝左,居然都是意外死亡亿遂,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門渺杉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蛇数,“玉大人,你說我怎么就攤上這事是越《耍” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵倚评,是天一觀的道長浦徊。 經(jīng)常有香客問我,道長天梧,這世上最難降的妖魔是什么盔性? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮呢岗,結(jié)果婚禮上冕香,老公的妹妹穿的比我還像新娘。我一直安慰自己后豫,他們只是感情好悉尾,可當(dāng)我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著挫酿,像睡著了一般构眯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上饭豹,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天鸵赖,我揣著相機(jī)與錄音务漩,去河邊找鬼。 笑死它褪,一個胖子當(dāng)著我的面吹牛饵骨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播茫打,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼居触,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了老赤?” 一聲冷哼從身側(cè)響起轮洋,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎抬旺,沒想到半個月后弊予,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡开财,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年汉柒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片责鳍。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡碾褂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出历葛,到底是詐尸還是另有隱情正塌,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布恤溶,位于F島的核電站乓诽,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏宏娄。R本人自食惡果不足惜问裕,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一逮壁、第九天 我趴在偏房一處隱蔽的房頂上張望孵坚。 院中可真熱鬧,春花似錦窥淆、人聲如沸卖宠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扛伍。三九已至,卻和暖如春词裤,著一層夾襖步出監(jiān)牢的瞬間刺洒,已是汗流浹背鳖宾。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留逆航,地道東北人鼎文。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像因俐,于是被迫代替她去往敵國和親拇惋。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,104評論 1 32
  • 一抹剩、python 變量和數(shù)據(jù)類型 1.整數(shù) Python可以處理任意大小的整數(shù)撑帖,當(dāng)然包括負(fù)整數(shù),在Python程序...
    績重KF閱讀 1,707評論 0 1
  • 一澳眷、Python簡介和環(huán)境搭建以及pip的安裝 4課時實驗課主要內(nèi)容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 5,746評論 0 10
  • 我的骨子里钳踊,只有中國傳統(tǒng)的節(jié)日灶平,那些淺生生新節(jié)日,我常常漠視箍土,那些硬生生的洋節(jié)日逢享,我一向不屑∥庠澹可是瞒爬,今年的平安夜,...
    可比克克閱讀 534評論 2 4