python深層機理

###一.變量
1.
可變對象和不可變對象:
不可變對象包括int,float械蹋,string锣披,tuple等团搞。
可變對象包括list重罪,dict搓逾,自定義類的實例等尺迂。
2.
變量在內(nèi)存中新建時具温,系統(tǒng)都會給他分配一個地址掠拳,然后通過地址去查找或引用他的值癞揉。 
Python的所有變量其實都是指向內(nèi)存中的對象的一個指針,都是值的引用
3.
在python中通過= 復制的變量溺欧,都是同時把變量的值喊熟,也把變量在內(nèi)存中的地址復制也過去了。
即=復制過的變量不僅內(nèi)存地址一樣姐刁,變量的值也一樣芥牌。
但是需要注意的是:對于不可變類型(如int)的變量,如果要更改變量的值龙填,
則會創(chuàng)建一個新值胳泉,并且給這個新值分配一個新的內(nèi)存地址,
然后把變量指向這個新值的內(nèi)存地址上岩遗,而舊值如果沒有被引用就等待垃圾回收扇商。
如果是可變類型變量。如果修改變量的值宿礁,則可以直接修改變量的值案铺,變量的引用地址不會變。
4.
python中變量要先賦值才能使用梆靖,實際上是可以看做指針
變量相當于是值的標簽控汉,也可以視為變量指向這個值,對于a=4凡是有等號只是賦值不是賦的關(guān)系
a=[1,2,3]
b=a
a.append(4)
print(b)#b=[1,2,3,4]
#在python中對于list是淺拷貝返吻,只拷貝首地址姑子,而其他元素通過偏移量來找到
#而對于a.apeend(4)這個沒有等號就沒有地址的改變,而是通過偏移量找到最后的位置添加4
#而對于b也同時指向了這個列表测僵,所以b也改變了
5.
同一個代碼塊中或者一個py文件的不可變對象街佑,
只要值是相等的就不會重復創(chuàng)建新的對象谢翎,而是直接引用已經(jīng)存在的對象
6.閉包
函數(shù)外的變量無法在函數(shù)內(nèi)被修改,
一旦被賦值該變量即為本地變量,而且本地變量必須先賦值才能使用
python運行前會先查看全部代碼,確定本地變量,之后函數(shù)內(nèi)的本地變量執(zhí)行的時候都必須滿足先賦值后使用
1.
a=1
def fun():
       y=a+1
       a=2
       print(y)
       print(a)
fun()
print(a)
如上代碼,運行是錯誤的,因為pytho運行前會先看下代碼確定本地變量,在a=2語句時a是本地變量,
那么y=a+1語句調(diào)用了a這個本地變量,該語句在之前a沒有被賦值,所以是運行錯誤
2.
a=1
def fun():
    a=a+1
如上代碼a已經(jīng)被確定是本地變量,a+1的a是還沒有值的所以錯誤
3.
a=1
def fun(a):
    a=a+1
    print(a)
fun(a)#2
print(a)#1
如上代碼a被賦值a成為本地變量,a=a+1時此時的a是有值的,傳參傳進來的,
但函數(shù)內(nèi)的本地變量與函數(shù)外的變量是無關(guān)的
4.對于類來說改變類的屬性的值,這個類是沒有被改變的,屬性會被改
class A():
       def __init__(self):
              self.s=1
a=A()
def fun():
     a.s=2
     print(a.s)
fun()#2
print(a.s)#2


###二.函數(shù)參數(shù)類型
1.
位置參數(shù),默認參數(shù)沐旨,可變參數(shù)森逮,命名關(guān)鍵字參數(shù),關(guān)鍵字參數(shù)
def fun4(a,b=0,*c,d,**e):
       print(a)#1 #
       print(b)#2 #默認參數(shù)如果沒給值就會賦默認值
       print(c)#(3磁携,4) #可變參數(shù)褒侧,參數(shù)個數(shù)可變,這些可變參數(shù)在函數(shù)調(diào)用時自動組裝為一個tuple
       print(d)#5 #命名關(guān)鍵字參數(shù)谊迄,必須傳入?yún)?shù)名
       print(e)#{'g':6,'h':8}#可以傳入任意個關(guān)鍵字參數(shù)闷供,并在調(diào)用的時候組裝為一個dict
fun4(1,2,3,4,d=5,g=6,h=8)
2.
#Python允許你在list或tuple前面加一個*號,把list或tuple的元素變成可變參數(shù)傳進去
def fun5(a,b,c):
fun5(*[1,2,3])#這樣傳入的參數(shù)就會變成解包成三個參數(shù)傳進去
3.
def a(x=[1]):
       x.append(2)
       print(x)
def fun6():
       a()#[1,2]
       a([2])#[2,2]
       a()#[1,2,2]
fun6()
#默認參數(shù)只會執(zhí)行一次鳞上,python在編譯的時候已經(jīng)確定好了每個變量的地址这吻,
#之后不傳參數(shù)的都繼續(xù)在該地址上進行操作
#第一次執(zhí)行時往x添加2此時的默認參數(shù)x的地址未變,第二次無參調(diào)用時在固定的x地址又加了2
4.
def fun():
    list1=[[]]
    list2=list1*2
    list2[0].append(1)
    print(list2)#[[1],[1]]
#python的乘法運算就是把里面的值復制幾份篙议,他們指向的是同一個內(nèi)存地址

###三.list
1.append
對于append會直接將整體元素添加到列表的末尾

2.extend
參數(shù)應該是可迭代的對象,extend函數(shù)會將參數(shù)解包再加入列表中
a=[2]
a.extend([1,[2,3]])
#對于該extend會對該列表進行一次解包,1,[2,3]加入到a中,所以結(jié)果為[2, 1, [2, 3]]

3.insert
a.insert(0,1)#在0的位置插入字符1,后面的元素后移

4.切片
a[0:0]=[1,2,7]#在0的位置把1,2,7依次加進列表中
#如果a[0:0]=[[1,2,7]]則是在0的位置加進[1,2,7]
a[len(a):]#在末尾加

5.查找字符
a.find("1")#找到就返回位置,找不到返回-1
a.index("1")#找到返回位置,找不到就出錯


###四.字典
1.查找字典的鍵存不存在
setdefault(key,value)#如果存在返回1,如果不存在返回value的值,所以value不要指定1
2.get() 函數(shù)返回指定鍵的值唾糯,如果值不在字典中返回默認值None

###五.集合
s1|s2兩個集合的合集

s1 - s2 s1中去除掉s2中有的元素  {2, 3}

s1 & s2 兩者的交集{1,4}

s1 ^ s2元素只出現(xiàn)在一個集合中{2鬼贱,3移怯,5,13}

###六.
1.join函數(shù)會在字符之間加入頭和尾不加
"&".join("adf")#->a&d&f

2.三元表達式
a=10 if a==1 else 11
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末这难,一起剝皮案震驚了整個濱河市舟误,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌姻乓,老刑警劉巖嵌溢,帶你破解...
    沈念sama閱讀 212,294評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蹋岩,居然都是意外死亡赖草,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,493評論 3 385
  • 文/潘曉璐 我一進店門剪个,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秧骑,“玉大人,你說我怎么就攤上這事扣囊『跽郏” “怎么了?”我有些...
    開封第一講書人閱讀 157,790評論 0 348
  • 文/不壞的土叔 我叫張陵侵歇,是天一觀的道長骂澄。 經(jīng)常有香客問我,道長惕虑,這世上最難降的妖魔是什么坟冲? 我笑而不...
    開封第一講書人閱讀 56,595評論 1 284
  • 正文 為了忘掉前任士修,我火速辦了婚禮,結(jié)果婚禮上樱衷,老公的妹妹穿的比我還像新娘。我一直安慰自己酒唉,他們只是感情好矩桂,可當我...
    茶點故事閱讀 65,718評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著痪伦,像睡著了一般侄榴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上网沾,一...
    開封第一講書人閱讀 49,906評論 1 290
  • 那天癞蚕,我揣著相機與錄音,去河邊找鬼辉哥。 笑死桦山,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的醋旦。 我是一名探鬼主播恒水,決...
    沈念sama閱讀 39,053評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼饲齐!你這毒婦竟也來了钉凌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,797評論 0 268
  • 序言:老撾萬榮一對情侶失蹤捂人,失蹤者是張志新(化名)和其女友劉穎御雕,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體滥搭,經(jīng)...
    沈念sama閱讀 44,250評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡酸纲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,570評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了论熙。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片福青。...
    茶點故事閱讀 38,711評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖脓诡,靈堂內(nèi)的尸體忽然破棺而出无午,到底是詐尸還是另有隱情,我是刑警寧澤祝谚,帶...
    沈念sama閱讀 34,388評論 4 332
  • 正文 年R本政府宣布宪迟,位于F島的核電站,受9級特大地震影響交惯,放射性物質(zhì)發(fā)生泄漏次泽。R本人自食惡果不足惜穿仪,卻給世界環(huán)境...
    茶點故事閱讀 40,018評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望意荤。 院中可真熱鬧啊片,春花似錦、人聲如沸玖像。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,796評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捐寥。三九已至笤昨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間握恳,已是汗流浹背瞒窒。 一陣腳步聲響...
    開封第一講書人閱讀 32,023評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留乡洼,地道東北人崇裁。 一個月前我還...
    沈念sama閱讀 46,461評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像束昵,于是被迫代替她去往敵國和親寇壳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,595評論 2 350

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

  • Android MotionEvent 詳解妻怎,之前用了兩篇文章 事件分發(fā)機制原理 和 事件分發(fā)機制詳解來講解事件分...
    呂侯爺閱讀 1,035評論 0 7
  • 魚骨圖是一種發(fā)現(xiàn)問題“根本原因”的方法壳炎,是透過現(xiàn)象看本質(zhì)的分析方法。使用魚骨圖分析通常有三步: 1.確定大要因“大...
    花得一閱讀 122評論 0 0
  • 不足百年生逼侦,堪有千歲憂 命如花期短匿辩,怎會恨長生 痛失辯日心,斷折馬良筆 哀己同哀人榛丢,成人心滿痕 落素映人老铲球,舊歲待...
    秋風清骨閱讀 242評論 0 1
  • 一、病號飯晰赞。 小時候有時候會傻傻的想生病稼病,因為生病了,就能吃到媽媽親手做的雞蛋手搟面掖鱼。 雞...
    天涯芳草_338a閱讀 416評論 1 3