Python 30分鐘入門——資料類型 & 控制結構

來源:互聯網
上載者:User

標籤:

Python是一門指令碼語言,我也久聞大名,但正真系統的接觸學習是在去年(2013)年底到今年(2014)年初的時候。不得不說的是Python的官方文檔相當齊全,假設你是在Windows上學習Python,安裝包內建的“Python Manuals”就是一份非常好的學習資料(基本上不用去找其它資料了);尤其是當中的Tutorial,非常適合剛開始學習的人。本文一方面總結了python語言的核心——資料類型和控制結構;還有一方面,通過與其它語言的對照表達了我對Python的一些拙見。


資料類型Python簡潔的背後是由於有著強大的類型系統的支援。Python世界的基礎資料型別 (Elementary Data Type)有{int, long, float, complex, str, list, set, tuple, dict},以下通過Python解譯器在互動模式下的輸入輸出執行個體進行示範(當中有前置字元>>>或...的是輸入):tips: Python世界裡,能夠用type(x)來輸出x的類型.int, long, float, str, complex
>>> type(123)<type 'int'>>>> type(-234)<type 'int'>>>> type(123456123456)<type 'long'>>>> type(-123456123456)<type 'long'>>>> type(123.456)<type 'float'>>>> type('abc')<type 'str'>>>> type("hello, world")<type 'str'>
從最後兩次輸入能夠看到Python的字串能夠用單引號也能夠用雙引號。另外,大家可能會疑惑的是究竟多大是int和多大是long呢?以下我們來一探究竟:
>>> type(123456)<type 'int'>>>> type(123456789)<type 'int'>>>> type(1234567890)<type 'int'>>>> type(12345678901)<type 'long'>
能夠看到1234567890還是int,12345678901就是long了,說明int是有範圍的。記得C/C++的int長度(4B)的同學都知道,C/C++裡int的取值範圍是:[-2^31, 2^31-1]也就是[-2147483648, 2147483647]。據此,我們能夠看看Python的int範圍:
>>> type(2147483647)<type 'int'>>>> type(2147483648)<type 'long'>>>> type(-2147483648)<type 'int'>>>> type(-2147483649)<type 'long'>
這次實驗說明,Python的int範圍和C/C++一樣。那麼,假設我想指定一個比較小的long怎麼辦呢?能夠通過加L(或小寫l)尾碼:
>>> type(1L)<type 'long'>>>> type(2l)<type 'long'>
另外,Python的浮點數是沒有double的:
>>> type(123.456)<type 'float'>>>> type(123456123456.123456123456123456123456)<type 'float'>

complex(複數)複數類型在非常多語言中是沒有的,Python通過整數加J(或小寫j)尾碼表示複數:
>>> type(3+4j)<type 'complex'>>>> type(3+4J)<type 'complex'>>>> type(4j)<type 'complex'>>>> type(j)Traceback (most recent call last):  File "<stdin>", line 1, in <module>NameError: name 'j' is not defined>>> type(1j)<type 'complex'>
可是1j不同意直接寫成j,j會被當做name尋找,假設沒找到就會報錯。
tuple, list, set, dicttuple, list, set, dict各自是元組、列表、集合、字典(有的語言叫映射map)。這些類型才是Python類型系統的過人之處,在多數編譯型語言(C、C++、Java、C#等)中,這些類型都要通過庫來提供(如C++、Java、C#),有的也許庫也沒有提供(如C)。
>>> type([1, 2, 3])<type 'list'>>>> type({2, 3, 4})<type 'set'>>>> type((3, 4, 5))<type 'tuple'>>>> type({'key1': 'value1', 'key2': 'value2'})<type 'dict'>
能夠看到 (), [], {}和它括起來的一系列元素,各自是表示:元組、列表、集合。而dict則是{key1: value1, [key2: value2, ...]}的形式。上面列出的各種集合的元素類型一致,這在編譯型語言裡一般是必須的,但在Python裡不必:
>>> (1, 'two', 3.0)(1, 'two', 3.0)>>> [(1, 'two', 3.0), '4', 5][(1, 'two', 3.0), '4', 5]>>> {1, 2L, 3.0, 4j}set([1, 2L, 3.0, 4j])>>> {1: 'one', 'one': 1}{1: 'one', 'one': 1}

控制結構結構化程式設計方法提出之時,就有前輩證明了不論什麼演算法都能夠使用:順序、選擇、迴圈三種結構表達。以下將展示Python的基本的文法,以及選擇和迴圈。
順序結構順序結構本身沒什麼好說的,這裡介紹一下Python的其它特性。語句 Python的語句以分行符號結尾(不像C家族的分號結尾):
>>> print "hello, world"hello, world
而且Python程式沒有所謂的“入口”,這和多數指令碼語言類似。
弱類型 Python是弱類型的,也就是變數的類型不是一成不變的。這也和非常多指令碼語言類似。
>>> a = 123>>> b = "asdf">>> c = [3, 4, 5]>>> a123>>> b'asdf'>>> c[3, 4, 5]>>> a = b>>> b'asdf'
這段互動中有兩點與C語言(C++等)不同:
  1. 使用變數前不用向提前聲明變數的類型
  2. 一個變數初始化為一個類型後還能給他賦其它類型的值
提示:在Python解譯器的互動模式下直接輸入變數名也能顯示變數的值“變數”一詞在Python裡應該叫“名字”(或者符號)更確切,在Python中你能夠給一個符號賦予不論什麼類型的值。稍後你將會看到能夠給原本賦值為int的對象賦值為一個函數,一個類。
函數 Python的函數定義以def開始,假設有返回值須要用return傳遞返回值。比方例如以下代碼定義了一個名為sayHello的函數,並用‘Jack‘為參數進行了一次調用:
def sayHello(name):print 'Hello, ' + name + '!'sayHello('Jack')
這段代碼的執行結果為:Hello, Jack!(可將這段代碼儲存為sayHello.py,然後在相應檔案夾執行python sayHello.py)
Python的類定義以class開始,屬效能夠在class下方聲明也能夠在__init__方法裡通過self.xxx隱式聲明。先來一段最簡單的關於類的代碼:
class Man:def __init__(self, name):self.name = namedef hello(self):print 'Hello, ' + self.name + '!'m = Man('Jack')m.hello()
這段代碼也會輸出:Hello, Jack! tips: Python方法的第一個參數必須是名為self的參數,用於操作對象的成員。__init__類似其它語言的”構造方法“。
類的很多其它特性和OOP有關,以後有時間再單獨發一篇博文展示。
順便看看函數、類以及類的執行個體在Python解譯器眼中都是什麼:
>>> type(sayHello)<type 'function'>>>> type(Man)<type 'classobj'>>>> type(m)<type 'instance'>>>> type(m.hello)<type 'instancemethod'>>>> type(Man.hello)<type 'instancemethod'>
能夠想象,Python世界裡的東西都是”灰色“的,解譯器對它們”一視同仁“,從來不以貌取人,僅僅看他們如今身上的標籤是什麼~
選擇結構 Python的選擇結構以if開始。boolif必定要涉及bool值,Python bool的取值為True和False:
>>> type(1==1)<type 'bool'>>>> type(True)<type 'bool'>>>> type(False)<type 'bool'>
(上面好像忘了列出bool類型)
對於Number(int, long, float, complex),0在if條件上也是False:
>>> if 1:...     print "true"...true>>> if 0:...     print "true"... else:...     print "false"...false>>> if 0.0:...     print "0.0 is true"...>>> if 0j:...     print "0j is true"...
提示:Python是以代碼縮排區分代碼塊的
除此之外,空的string和空的集合(tuple, list, set)也是False:
>>> if '':...     print 'null string is true'...>>> if ():...     print 'null tuple is true'...>>> if []:...     print 'null list is true'...>>> if {}:...     print 'null set is true'...
if, if-else & if-elif-else上面幾個if示範範例多是僅僅有一個分支的,當然Python也支援多個分支的if:
>>> x = int(raw_input("Please enter an integer: "))Please enter an integer: 42>>> if x < 0:...      x = 0...      print 'Negative changed to zero'... elif x == 0:...      print 'Zero'... elif x == 1:...      print 'Single'... else:...      print 'More'...More

迴圈結構 Python的迴圈有for和while兩種,沒有do-while,也沒有loop-until。
forPython的for迴圈和C的不同,它更像C++,Java裡的新式for迴圈:
>>> a = [1, 'two', 3.0]>>> for i in a:...     print i...1two3.0
這樣的for迭代集合非常方便。
可是要想像典型C語言的for迴圈那樣迭代一個整數區間怎麼辦?別怕,Python提供了內建(built-in)函數range(),它能返回整數區間列表,供你迭代,用起來也非常方便:
>>> for i in range(1, 6):...     print i...12345>>> for i in range(10, 65, 10):...     print i...102030405060
這裡展示了range的兩種調用形式,一種是range(a, b),它將返回一個從a(包括a)到b(不包括)的整數列表(list),還有一種range(a, b, s),將返回一個a~b,以s為步長的list:
>>> range(1, 6)[1, 2, 3, 4, 5]>>> range(10, 65, 10)[10, 20, 30, 40, 50, 60]

whilePython的while迴圈和C的while差點兒相同:
>>> i = 1>>>>>> while i < 5:...     i = i+1...     print i...2345

順便一提,Python裡 i=i+1 不能寫成i++,Python不支援這樣的文法;但能夠寫成 i += 1:
>>> i5>>> i += 1>>> i6>>> i++  File "<stdin>", line 1    i++      ^SyntaxError: invalid syntax>>> ++i6>>> i6
各位可能會疑惑,為什麼++i能夠?由於pyhon支援前置的+(加號或減號)運算,++被當做兩次正運算了;同理,+++i,++++i都是一樣的;我們能夠順便測一下負號運算:
>>> i6>>> +++i6>>> ++++i6>>> -i-6>>> --i6>>> ---i-6
和想象的結果一致,Great!

輸入輸出(IO)當你想動手寫點”更有意思“的小程式的時候,你會發現除了三大基本控制結構和資料類型之外,你最須要的可能就是IO功能。Q: 輸出能夠用print,那麼輸入呢?是input嗎?A:input能夠,但很多其它時候須要用的可能是raw_input和readline這兩個built-in function,但readline僅適用於Unix平台.Q:那麼input和raw_input有什麼差別呢?A:來看看我和解譯器的以下這段互動,看看你能不能自己發現它們的不同。
>>> varA = raw_input('please input:')please input:Life is too short, you need Python!>>> varA'Life is too short, you need Python!'>>> type(raw_input('input something:'))input something:asdf<type 'str'>>>> type(raw_input('input something:'))input something:123<type 'str'>
A:你看到了,raw_input不論你輸入什麼都會返回str類型,這也是為什麼叫做raw_input的原因。A: 繼續往下,你會看到input:
>>> type(input('input sth:'))input sth:123<type 'int'>>>> type(input('input sth:'))input sth:asdfTraceback (most recent call last):  File "<stdin>", line 1, in <module>  File "<string>", line 1, in <module>NameError: name 'asdf' is not defined>>> type(input('input sth:'))input sth:varA<type 'str'>>>> input('sth:')sth:varA'Life is too short, you need Python!'>>> input('try some input like your code:')try some input like your code:[1, 'two', 3.0][1, 'two', 3.0]>>> input('try again:')try again:'Oh!!!''Oh!!!'
Q: Oh, I know! input會按代碼的形式解釋輸入!A: 嗯,你提到了”解釋“,看來你已經悟出了Python的真諦,你能夠下山了!Q: Master, 這樣就能夠了嗎?我知道的好像太少了吧?A: 為師這裡有一本《Python秘籍》,你拿去吧,全部問題你都能找到答案,但答案未必在這本書裡(徒兒A就此辭別師父Q,開始了他的Python之旅)
後記(我的拙見)Python是解釋型語言,它的類型系統很強大!作為一個學了幾門C家族語言(C、C++、Java、C#)的我來說,tuple,list,set,dict都是內建類型,簡直是太美好了!在我看來: 1.因為有語言級的tuple, list, set, dict,Python很適合用來寫演算法,並且Python寫出的演算法必定要比其它語言簡潔得多!2.Python的文法簡潔易懂,預設提供了檔案管理等功能,能夠替代多數其它指令碼的工作。3.Python的弱類型(約束少)以及解譯器互動模式的趣味性和便捷性,很適合作為”第一門程式設計語言“,教授少年兒童。

Python 30分鐘入門——資料類型 &amp; 控制結構

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.