1.python 中的 and 從左到右計(jì)算表達(dá)式,若所有值均為真,則返回最后一個(gè)值,若存在假,返回第一個(gè)假值;
or 也是從左到有計(jì)算表達(dá)式,返回第一個(gè)為真的值;
其中數(shù)字 0 是假,其他都是真;
字符 "" 是假,其他都是真;
元組中的元素值是不允許修改的,但我們可以對(duì)元組進(jìn)行連接組合
元組中的元素值是不允許刪除的,但我們可以使用del語(yǔ)句來(lái)刪除整個(gè)元組
2.python 中數(shù)字有以下的表示方式:
2 進(jìn)制是以 0b 開(kāi)頭的: 例如: 0b11 則表示十進(jìn)制的 3
8 進(jìn)制是以 0o 開(kāi)頭的: 例如: 0o11 則表示十進(jìn)制的 9
16 進(jìn)制是以 0x 開(kāi)頭的: 例如: 0x11 則表示十進(jìn)制的 17
但是在測(cè)試的時(shí)候又遇到了個(gè)問(wèn)題,那就是輸出來(lái)的被自動(dòng)轉(zhuǎn)化成了十進(jìn)制:
>>> a=0b111100 >>> a 60
分別使用 bin,oct,hex 可輸出數(shù)字的二進(jìn)制,八進(jìn)制,十六進(jìn)制形式,例如:
>>> a=0b111100>>> a=60>>> bin(a)'0b111100'>>> oct(a)'0o74'>>> hex(a)'0x3c'
注意:
3. is 與 == 區(qū)別:
is 用于判斷兩個(gè)變量引用對(duì)象是否為同一個(gè), == 用于判斷引用變量的值是否相等。
is not與!=區(qū)別于上述一致,一個(gè)比較的是引用對(duì)象,另一個(gè)比較的是兩者的值。
構(gòu)造包含 0 個(gè)或 1 個(gè)元素的元組比較特殊,所以有一些額外的語(yǔ)法規(guī)則:
tup1 = () # 空元組tup2 = (20,) # 一個(gè)元素,需要在元素后添加逗號(hào)
在 python 中,類(lèi)型屬于對(duì)象,變量是沒(méi)有類(lèi)型的:
a=[1,2,3]a="Runoob"
以上代碼中,[1,2,3] 是 List 類(lèi)型,"Runoob" 是 String 類(lèi)型,而變量 a 是沒(méi)有類(lèi)型,她僅僅是一個(gè)對(duì)象的引用(一個(gè)指針),可以是指向 List 類(lèi)型對(duì)象,也可以是指向 String 類(lèi)型對(duì)象。
可更改(mutable)與不可更改(immutable)對(duì)象
在 python 中,strings, tuples, 和 numbers 是不可更改的對(duì)象,而 list,dict 等則是可以修改的對(duì)象。
不可變類(lèi)型:變量賦值 a=5 后再賦值 a=10,這里實(shí)際是新生成一個(gè) int 值對(duì)象 10,再讓 a 指向它,而 5 被丟棄,不是改變a的值,相當(dāng)于新生成了a。
可變類(lèi)型:變量賦值 la=[1,2,3,4] 后再賦值 la[2]=5 則是將 list la 的第三個(gè)元素值更改,本身la沒(méi)有動(dòng),只是其內(nèi)部的一部分值被修改了。
python 函數(shù)的參數(shù)傳遞:
不可變類(lèi)型:類(lèi)似 c++ 的值傳遞,如 整數(shù)、字符串、元組。如fun(a),傳遞的只是a的值,沒(méi)有影響a對(duì)象本身。比如在 fun(a)內(nèi)部修改 a 的值,只是修改另一個(gè)復(fù)制的對(duì)象,不會(huì)影響 a 本身。
可變類(lèi)型:類(lèi)似 c++ 的引用傳遞,如 列表,字典。如 fun(la),則是將 la 真正的傳過(guò)去,修改后fun外部的la也會(huì)受影響
python 中一切都是對(duì)象,嚴(yán)格意義我們不能說(shuō)值傳遞還是引用傳遞,我們應(yīng)該說(shuō)傳不可變對(duì)象和傳可變對(duì)象。
python 傳不可變對(duì)象實(shí)例
#!/usr/bin/python3#Python學(xué)習(xí)交流QQ群:579817333 def ChangeInt( a ): a = 10b = 2ChangeInt(b)print( b ) # 結(jié)果是 2
實(shí)例中有 int 對(duì)象 2,指向它的變量是 b,在傳遞給 ChangeInt 函數(shù)時(shí),按傳值的方式復(fù)制了變量 b,a 和 b 都指向了同一個(gè) Int 對(duì)象,在 a=10 時(shí),則新生成一個(gè) int 值對(duì)象 10,并讓 a 指向它。
注意:
4.python 沒(méi)有自增運(yùn)算符a++,自增操作是如何實(shí)現(xiàn)的呢?
回答中有人介紹了關(guān)于自增操作,python 不使用 ++ 的哲學(xué)邏輯:編譯解析上的簡(jiǎn)潔與語(yǔ)言本身的簡(jiǎn)潔,就不具體翻譯了。
后面還有老外回答并附帶了一個(gè)例子非常的精彩,指出了 python 與 c 語(yǔ)言概念上的一些差異,語(yǔ)言描述的可能未必準(zhǔn)確,直接上例子:
>>> b = 5 >>> a = 5 >>> id(a) >>> id(b) >>> a is b True
python 中,變量是以內(nèi)容為基準(zhǔn)而不是像 c 中以變量名為基準(zhǔn),所以只要你的數(shù)字內(nèi)容是5,不管你起什么名字,這個(gè)變量的 ID 是相同的,同時(shí)也就說(shuō)明了 python 中一個(gè)變量可以以多個(gè)名稱(chēng)訪問(wèn)。
這樣的設(shè)計(jì)邏輯決定了 python 中數(shù)字類(lèi)型的值是不可變的,因?yàn)槿绻缟侠琣 和 b 都是 5,當(dāng)你改變了 a 時(shí),b 也會(huì)跟著變,這當(dāng)然不是我們希望的。
因此,正確的自增操作應(yīng)該 a = a + 1 或者 a += 1,當(dāng)此 a 自增后,通過(guò) id() 觀察可知,id 值變化了,即 a 已經(jīng)是新值的名稱(chēng)。
以上所說(shuō)的在腳本式編程環(huán)境中沒(méi)有問(wèn)題。但是在交互式環(huán)境中,編譯器會(huì)有一個(gè)小整數(shù)池的概念,會(huì)把(-5,256)間的數(shù)預(yù)先創(chuàng)建好,而當(dāng)a和b超過(guò)這個(gè)范圍的時(shí)候,兩個(gè)變量就會(huì)指向不同的對(duì)象了,因此地址也會(huì)不一樣,比如下例:
>>> a=1000>>> b=1000>>> id(a);id(b)22366123662242236617350384>>>
5.在整數(shù)除法中,除法(/)總是返回一個(gè)浮點(diǎn)數(shù),如果只想得到整數(shù)的結(jié)果,丟棄可能的分?jǐn)?shù)部分,可以使用運(yùn)算符 //
不同類(lèi)型的數(shù)混合運(yùn)算時(shí)會(huì)將整數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)。
python 不支持復(fù)數(shù)轉(zhuǎn)換為整數(shù)或浮點(diǎn)數(shù)
6.Python 不支持單字符類(lèi)型,單字符也在Python也是作為一個(gè)字符串使用。
集合(set)是一個(gè)無(wú)序不重復(fù)元素的序列。
基本功能是進(jìn)行成員關(guān)系測(cè)試和刪除重復(fù)元素。
可以使用大括號(hào) { } 或者 set() 函數(shù)創(chuàng)建集合,注意:創(chuàng)建一個(gè)空集合必須用 set() 而不是 { },因?yàn)?{ } 是用來(lái)創(chuàng)建一個(gè)空字典。
注意:
聯(lián)系客服