由於先前的java烙印,學習python的時候會時不時的與java來個比較,我想,這也是一種好的學習方式,但有可能把兩種語言揉的太緊。時刻要注意,python is not java and don't use python just as java。
來學習python的內置類型,一定要區分java的簡單類型,python的內置類型也是對象(python is a pure OO language)。
數字類型
python 支持各種常見的數字對象,如整數、浮點數等,此外還支持更加複雜的數據類型,如無限精確整數、複數。下面就與java的數字類型(在java中,簡單的數字類型不是對象形式的,不過可以把他們封裝成對象,在java 1.5以上,已經提供了自動的“裝箱”和“拆箱”),在進行比較學習中,要注意,python的是對象,java的不是對象。
一般整數
python的一般整數就相當於java的int數,如12312323, -10, 0等,佔4 byte,應該知道最大能達到多少了吧。在python中,沒有像java那樣更加細化的short(2 byte)和byte類型。
長整數
java的長整型佔8 byte,如231893182123L(注意這個“L”不能省),pyhon中,長整形可以定義無限大,甚至佔用整個內存,形式也是128912381283L這個樣子,“L”不能省的。
浮點數
python的浮點數只有一種,就叫浮點數,如1.234, 3.14e-10, 4E210等(注意e和E,意義不同),java中浮點數分float型,4 byte,單精度;double型, 8 byte,雙精度。
其他進制(八進制和十六進制)
python和jiava的表示方法一致,對於八進制,四個數字一組,第一個數字爲0,如0123(十進制爲83), 01230123(十進制爲340051)。十六進制,不分組,前兩位爲0x,如0x1234,0xab157。
複數
對於這樣的類型,java沒有提供。python中,複數形式如3+4j,-3J等(j和J都行)。
字符類型
java提供了字符類型char, 2byte,python中沒有提供,但它提供了強大的string類型。
布爾類型
java提供了簡單的布爾類型boolean,值爲true或false,python的布爾類型值可以是True或False(注意與java的大小寫區別),也可以是0或1。
對於java,它的變量必須先聲明在使用,而在python中,由於Anything is Object,變量只是一個指針,所以可以隨意使用,不需聲明,而且python是一種“弱類型”語言,如下:
- >>> i = 213
- >>> print i
- 213
- >>> i = 1231321342L
- >>> print i
- 1231321342
- >>> i = 4E-5
- >>> print i
- 4e-005
- >>> i = 0xab413
- >>> print i
- 701459
- >>> i = 7 -3j
- >>> print i
- (7-3j)
- >>> i = True
- >>> print i
- True
怎麼樣,這裏只有一個變量i,卻被賦予了n中類型,實際上,i就是一個指針,它不會具有任何意義。
字符串
java中的字符串就不說了,python的字符串也差不多,就是一旦建立,就不可變了。通過例子學吧,這些例子都是《learning Python》上的,都很classical。
- >>> len('abc')
- 3
- >>> s = 'abc' + 'def'
- >>> s
- 'abcdef'
- >>> 'ha'*4
- 'hahahaha'
- >>> for c in s:
- print c
- a
- b
- c
- d
- e
- f
- >>> for c in s:
- print c,
- a b c d e f
- >>> 'd' in s
- True
- >>> s[3]
- 'd'
- >>> s[-2]
- 'e'
- >>> s[1:4]
- 'bcd'
- >>> s[:-2]
- 'abcd'
- >>> s[2:]
- 'cdef'
- >>> s[2] = 'f'
- Traceback (most recent call last):
- File "<pyshell#31>", line 1, in <module>
- s[2] = 'f'
- TypeError: 'str' object does not support item assignment
- >>> s = s + 'g'
- >>> ''' this is
- a multi-line block'''
- ' this is\na multi-line block'
- >>> s = 'abc' 'def' 'xyz'
- >>> s
- 'abcdefxyz'