###一.變量
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
python深層機理
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門剪个,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秧骑,“玉大人,你說我怎么就攤上這事扣囊『跽郏” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵侵歇,是天一觀的道長骂澄。 經(jīng)常有香客問我,道長惕虑,這世上最難降的妖魔是什么坟冲? 我笑而不...
- 正文 為了忘掉前任士修,我火速辦了婚禮,結(jié)果婚禮上樱衷,老公的妹妹穿的比我還像新娘。我一直安慰自己酒唉,他們只是感情好矩桂,可當我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著痪伦,像睡著了一般侄榴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上网沾,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼饲齐!你這毒婦竟也來了钉凌?” 一聲冷哼從身側(cè)響起,我...
- 正文 年R本政府宣布宪迟,位于F島的核電站,受9級特大地震影響交惯,放射性物質(zhì)發(fā)生泄漏次泽。R本人自食惡果不足惜穿仪,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望意荤。 院中可真熱鬧啊片,春花似錦、人聲如沸玖像。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽捐寥。三九已至笤昨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間握恳,已是汗流浹背瞒窒。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- Android MotionEvent 詳解妻怎,之前用了兩篇文章 事件分發(fā)機制原理 和 事件分發(fā)機制詳解來講解事件分...
- 魚骨圖是一種發(fā)現(xiàn)問題“根本原因”的方法壳炎,是透過現(xiàn)象看本質(zhì)的分析方法。使用魚骨圖分析通常有三步: 1.確定大要因“大...