Python入門筆記(3):基礎(下)

來源:互聯網
上載者:User
一、數字

在看《Python 核心編程》的時候,我就有點疑問,為什麼沒有把Python數字放在基礎範圍之內呢,可能作者先要通過Python對象,然後在深入到數字,這樣會更加容易理解。這裡有一個觀點就是“Python的一切皆對象”原則,通過上一節的學習變數賦值,就能深刻體現這個原則,具體見下節的學習入門筆記。

由於數字在Python中用到的並不很多,就像學js的數字類型一樣,我覺得最好放在基礎篇之內,這樣對於下節的對象有個鋪墊的作用。

本節主要是學習Python的數字類型、操作、與數字有關的內建函數。

1、數字類型

 在上節中說,Python變數無須定義類型,這是由於它是動態類型的語言,在記憶體中根據所賦值動態地確定其類型。如果偏偏要在python中給變數分類的話,那麼可分:可變類型和不可變類型

這裡整理了可變類型(mutable)和不可變類型(immutable)的相關知識:
(或許我們在學習了下一節才能對此有深刻理解,如果曾學習過C,它像C指標的藝術;如果學了C#,它像C#實值型別與參考型別的性質;如果學了js,它的性質基本上同Python;總的來說,一切的程式設計語言都圍繞著基礎核心,只是各自體現不一樣而已,我們要學會融會貫通,舉一反三。。。不過感覺好難哦。)這裡推薦一篇文章:《如何學會600多種程式設計語言》 -----------------------------------------------------------------------------------不可變類型(immutable):就是記憶體中的那可內容(value)是否可以被改變,如果是不可變則,在對對象本身操作的時候,必須在記憶體的另外地方再申請一塊地區(因為老地區#不可變#),老的地區就丟棄了(如果還有其他ref,則ref數字減1,類似unix下的hard-link)。

可變類型(mutable):對對象操作的時候,不需要再在其他地方申請記憶體,只需要在此對象後面連續申請(+/-)即可,也就是它的address會保持不變,但地區會變長或者變短。

不可變類型有:string、interger、tuple:

 1 >>> var1 = 1 2 >>> var2 = var1 3 >>> var1,var2 4 (1, 1) 5 >>> id(var1),id(var2) #同指同一記憶體地區,id相同 6 (21200672, 21200672) 7 >>> var1 += 1 8 >>> var1,var2 9 (2, 1)10 >>> id(var1),id(var2)
#由於var1,var2資料不可變的,對var1+1後,申請另外一塊地區,id(var1)變了,id(var2)不變,對此地區ref數字-111 (21200660, 21200672)12 >>>

可變類型:list,dict

 1 >>> lst1 = [1,2,3] 2 >>> lst2 = lst1 3 >>> lst1,lst2 4 ([1, 2, 3], [1, 2, 3]) 5 >>> id(lst1),id(lst2) 6 (28497360, 28497360) 7 >>> lst1.append(4)#可變類型的,append後,address會保持不變 8 >>> lst1,lst2 9 ([1, 2, 3, 4], [1, 2, 3, 4])10 >>> id(lst1),id(lst2)#lst1,lst2一直指向同一地區11 (28497360, 28497360)12 >>>13 在操作這種類型的時候要特別小心,dict的key不用可變類型的,函數傳參的時候不用可變類型的。14 eg:15 >>> def dis(arg=[]):16 ...     arg.append('1')17 ...     print arg18 ...19 >>> dis()20 ['1']21 >>> dis()22 ['1', '1']23 >>>id(dis())24 ['1', '1', '1']25 50524661526 >>>id(dis())27 ['1','1','1','1']28 505246615

參考:http://blog.chinaunix.net/uid-26249349-id-3080279.html

數字就是不可變類型,也就是說更改數位值就會產生新的對象,當然這個我們無須考慮。

python數字類型可分為:整型、長整型、布爾型、雙精確度浮點型、十進位浮點型和複數

(1)、整型:

如:0101、8、-3、0X80、-0X78

(2)、布爾型

True、False

(3)、長整型

在整型後面加L(或l),目前整型和長整型在慢慢統一。只有對它調用repr()函數才有機會看到L,調用str()函數則看不到L:

>>> aLong=11111111111111111111>>> aLong  (在命令列中,直接輸入變數名顯示值,這種情況實際上調用了repr()函數)    11111111111111111111L>>> print aLong (在命令列中,如果在變數前面使用print 則調用str()函數)    11111111111111111111>>> 

(4)、雙精確度浮點型

類似C中的double。實際精度依賴Python解譯器的編譯器。

(5)、複數

 1 >>> aComplex=2.1+3j 2 >>> aComplex 3 (2.1000000000000001+3j) 4 >>> aComplex.real 5 2.1000000000000001 6 >>> aComplex.imag 7 3.0 8 >>> aComplex.conjugate() 9 (2.1000000000000001-3j)10 >>> 

更多見python core programming

2、操作符

分別是:+、-、*、/、%、**、//(地板除)

很有意思的是,python的除法運算。

在js中實現以下代碼:

1 <script type="text/javascript">2 var a=1,b=2;3 var c=0.1,d=0.2;4 var result1=a/b;5 var result2=c/d;6 alert(result1);#0.5    7 alert(result2);#0.58 </script>

如果我們在Python中實現,則如下:

>>>1/20>>>0.1/0.20.5

有些奇怪吧,Python是這樣處理的;

傳統除法:如果是整型除法,則傳統除法會捨棄小數點部分,返回一個整型(地板除);如果運算元之一是浮點型,則執行真正地除法。

真正除法:返回真實的商,在未來Python版本中會成為統一標準,不過現在我們通過from __future__ import division可以實現。

>>> from __future__ import division>>> 1/20.5>>> 1.0/2.00.5

地板除:從Python2.2開始,新操作符//,被稱為地板除、即不管運算元是什麼類型,總會捨棄小數部分,返回整數。

>>> 1//20>>> 1.0//2.00.0>>> -1//2-1

其他動作符有興趣可以在《Python 核心編程》和官網文檔看看。

3、與數字有關的內建函數

關於更多內建函數,將會在後面學習中具體說明,今天先學習關於數位內建函數。它們有:

(1)、標準內建函數:

cmp()、str()、type()對於任何類型都可以使用

>>> cmp(1,2) #比較大小   -1>>> cmp(2,1)1>>> cmp(2,2)0>>> str(0xFF) #轉換成字串'255'>>> type(0xFF) #返回物件類型<type 'int'>>>> type('str')<type 'str'>

(2)、轉換工廠函數:

int()、long()、float()、bool()、complex(),它們都是轉換成跟數字有關的函數。如:

>>> '111''111'>>> int('222')222>>> long('222')222L>>> float('222')222.0>>> bool(1)True>>> complex(2)(2+0j)>>> bool(True)True>>> bool(454)True>>> bool(0)False

(3)、功能函數

有abs()返回給定參數的絕對值:

>>> abs(-3)3

coerce()資料類型對兩個參數進行轉換函式:

>>> coerce(1,2)(1, 2)>>> coerce(1,-2)(1, -2)>>> coerce(1,123L)(1L, 123L)>>> coerce(1.3,123L)(1.3, 123.0)>>> coerce(1j,123L)(1j, (123+0j))

divmod()通過取餘,返回商和餘數的元祖:

>>> divmod(10,2)(5, 0)>>> divmod(10,3)(3, 1)

pow()和**都可以進行指數運算:

>>> 5**225>>> pow(5,2)25

round()四捨五入:

>>> round(3)3.0>>> round(3.45)3.0>>> round(3.999999,1)4.0

更多內建函數見Python官網文檔。

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.