標籤:
第一次接觸到python這個概念還是在2013年在銳捷網路做實習生的時候,當時因為項目測試需要,有提出想用python進行自動化測試,但是由於項目的實際需要,後面最終沒有用,也就擱置了python的學習,自己載了python的教程,也是看的零零碎碎的,最近一直在思考自己應該做什麼,迷茫,好像很多語言很多工具需要自己去學習,但又精力不夠,最新的想法是與其去和那些培訓或者門檻低的人去搶android的飯碗,不如在自己C++編程的基礎上,學習少數人會去學習的語言,就像java語言一樣,很多人都說會用java語言編程,但是真正能深入理解其機制和原理的,估計不多,多的是用架構去編寫項目。
python:簡潔,優雅,快捷
簡潔到變數可以不用定義直接用,可以調用很多函數,方便移植,對資料的處理速度快,但是耗記憶體
我學習python的時候,感覺這就像是在看小學生的作業,當然只是剛學習到了基礎部分,還沒有進階到高階,加了個python開發群,去群裡問了有沒什麼好的IDE,熱心的人說pycharm不錯,載下來發現這就是傳說中的大蟒蛇,果然給力。
整理了下python的入門知識。
1.變數和資料類型
1.1 資料類型
在Python中,能夠直接處理的資料類型有以下幾種:
一、整數
Python可以處理任意大小的整數,當然包括負整數,在Python程式中,整數的表示方法和數學上的寫法一模一樣。
二、浮點數
浮點數也就是小數,之所以稱為浮點數,是因為按照科學記號標記法表示時,一個浮點數的小數點位置是可變的,比如,1.23x10^9和12.3x10^8是相等的。
整數和浮點數在電腦內部儲存的方式是不同的,整數運算永遠是精確的(除法難道也是精確的?是的!),而浮點數運算則可能會有四捨五入的誤差。
三、字串
字串是以‘‘
或""
括起來的任意文本,比如‘abc‘,"xyz"等等。請注意,‘‘或""本身只是一種表示方式,不是字串的一部分,因此,字串‘abc‘
只有a,b,c
這3個字元。
四、布爾值
布爾值和布爾代數的表示完全一致,一個布爾值只有True
、False
兩種值,要麼是True
,要麼是False
,在Python中,可以直接用True
、False
表示布爾值(請注意大小寫),也可以通過布爾運算計算出來。
布爾值可以用and
、or
和not
運算。
五、空值
空值是Python裡一個特殊的值,用None
表示。None不能理解為0,因為0是有意義的,而None是一個特殊的空值。
對比與C語言,可以發現很多的不同,最大的不同就是更加抽象化和口語化
1.2 變數
在Python程式中,變數是用一個變數名表示,變數名必須是大小寫英文、數字和_的組合,且不能用數字開頭,
a = 123 # a是整數print aa = ‘imooc‘ # a變為字串print a
這種變數本身類型不固定的語言稱之為動態語言,與之對應的是靜態語言。
靜態語言在定義變數時必須指定變數類型,如果賦值的時候類型不符,就會報錯。例如Java是靜態語言,指派陳述式如下(// 表示注釋):
int a = 123; // a是整數類型變數a = "mooc"; // 錯誤:不能把字串賦給整型變數
和靜態語言相比,動態語言更靈活。
1.3 注釋
單行注釋用“#”
C語言用/**/或//
2.list和Tuple類型
2.1 list:列表,有序的集合,由於Python是動態語言,所以list中包含的元素並不要求都必須是同一種資料類型,我們完全可以在list中包含各種資料,用[元素]。
順序訪問list:需要特別注意的是,索引從 0 開始,也就是說,第一個元素的索引是0,第二個元素的索引是1,以此類推。
倒序訪問list:最後一個元素的索引是-1,以此類推。
類似於數組的訪問
添加元素:用函數append(i),如:L.append("hello"),用函數insert(i,h),如:L.insert(0,"hello")在L的第一個位置添加“hello”元素,其他元素自動移位,比數組的添加簡單多了。
刪除元素:用函數pop(i),刪除第i個元素,當用pop()時表示刪除最後一個元素,其他元素自動移位。
替換元素:直接針對位置替換,如:L(2)="HEllo",將原本第三個位置的元素替換為“HEllo”
2.2 Tuple:有序的列表,我們稱為“元組”,tuple一旦建立完畢,就不能修改,建立tuple和建立list唯一不同之處是用( 元素)
替代了[ ]。
但是當Tuple裡面的元素是可變的集合,比如list時,list對應的元素可以進行修改,tuple所謂的“不變”是說,tuple的每個元素,指向永遠不變。即指向‘a‘,就不能改成指向‘b‘,指向一個list,就不能改成指向其他對象,但指向的這個list本身是可變的。
3.條件判斷和迴圈
3.1 if :冒號表示對應的代碼塊
要縮排
elif :
要縮排
else:
要縮排
3.2 for name in L :
要縮排,不需要什麼++之類的,比C簡單很多
3.3 while x<N:
add code要縮排
x+=1或x=x+1
3.4 退出迴圈
break:後續迴圈 continue:當次迴圈
4.Dict和SET
4.1 dict:key-value,類似於map,用{元素},並且key不能重複。
4.1.1 當訪問value的時候,要避免 KeyError 發生,有兩個辦法:
一是先判斷一下 key 是否存在,用 in 操作符:
if ‘Paul‘ in d: print d[‘Paul‘]
如果 ‘Paul‘ 不存在,if語句判斷為False,自然不會執行 print d[‘Paul‘] ,從而避免了錯誤。
二是使用dict本身提供的一個 get 方法,在Key不存在的時候,返回None:print d.get(‘Bart‘)
4.1.2 dict特點:1.尋找速度快,無論資料量多少,當然是以消耗記憶體為代價的,list正好相反,佔用記憶體小,但是尋找速度慢。2. 儲存的key-value序對是沒有順序的,所以可能每次列印出來的dict都不一樣。3.作為 key 的元素必須不可變,Python的基本類型如字串、整數、浮點數都是不可變的,都可以作為 key。但是list是可變的,就不能作為 key
4.1.3 添加和更新元素:直接採用指派陳述式
4.1.4 遍曆:for迴圈,如:
d = { ‘Adam‘: 95, ‘Lisa‘: 85, ‘Bart‘: 59 }for key in d: print key
4.2 set: 持有一系列元素,這一點和 list 很像,但是set的元素沒有重複,而且是無序的,這點和 dict 的 key很像。
set裡面的元素大小寫敏感,而且訪問時可以用:in 進行判斷元素是否存在。
Bart是該班的同學嗎?
>>> ‘Bart‘ in sTrue
bart是該班的同學嗎?
>>> ‘bart‘ in s
False
4.2.1 set的特點:
set的內部結構和dict很像,唯一區別是不儲存value,因此,判斷一個元素是否在set中速度很快。
set儲存的元素和dict的key類似,必須是不變對象,因此,任何可變對象是不能放入set中的。
最後,set儲存的元素也是沒有順序的。
4.2.2 遍曆:for name in set:進行遍曆
4.2.3 更新:採用add()直接添加,判斷後再用remove()刪除
5.函數
在Python中,定義一個函數要使用 def 語句,依次寫出函數名、括弧、括弧中的參數和冒號:,然後,在縮排塊中編寫函數體,函數的傳回值用 return 語句返回。如果沒有return語句,函數執行完畢後也會返回結果,只是結果為 None。Python的函數返回多值其實就是返回一個tuple,但寫起來更方便。
5.1 定義預設參數:由於函數的參數按從左至右的順序匹配,所以預設參數只能定義在必需參數的後面,請定義一個 greet() 函數,它包含一個預設參數,如果沒有傳入,列印 ‘Hello, world.‘,如果傳入,列印 ‘Hello, xxx.‘其中world設定為預設參數。
5.2 定義可變參數:
如果想讓一個函數能接受任意個參數,我們就可以定義一個可變參數:
def fn(*args): print args
可變參數的名字前面有個 * 號,我們可以傳入0個、1個或多個參數給可變參數。
Python解譯器會把傳入的一組參數組裝成一個tuple傳遞給可變參數,因此,在函數內部,直接把變數 args 看成一個 tuple 。例如:求任意數的平均值
6.對list進行切片:L[0:10],L[::2],L[0:-1],L[4:50:5]
7.迭代:Python中,迭代永遠是取出元素本身,而非元素的索引。
7.1 list迭代索引:使用 enumerate() 函數,我們可以在for迴圈中同時綁定索引index和元素name。但是,這不是 enumerate() 的特殊文法。實際上,enumerate() 函數把:
[‘Adam‘, ‘Lisa‘, ‘Bart‘, ‘Paul‘]
變成了類似:
[(0, ‘Adam‘), (1, ‘Lisa‘), (2, ‘Bart‘), (3, ‘Paul‘)]
enumerate()函數和zip函數的功能類似,只是zip可以指定索引,而enumerate()函數預設從索引0開始。
zip()函數可以把兩個 list 變成一個 list:
>>> zip([10, 20, 30], [‘A‘, ‘B‘, ‘C‘])[(10, ‘A‘), (20, ‘B‘), (30, ‘C‘)]
7.2 dict迭代擷取values:
用dict.values()或dict.itervalues()可以擷取dict的所有values值。
1. values() 方法實際上把一個 dict 轉換成了包含 value 的list。
2. 但是 itervalues() 方法不會轉換,它會在迭代過程中依次從 dict 中取出 value,所以 itervalues() 方法比 values() 方法節省了產生 list 所需的記憶體。
3. 列印 itervalues() 發現它返回一個 <dictionary-valueiterator> 對象,這說明在Python中,for 迴圈可作用的迭代對象遠不止 list,tuple,str,unicode,dict等,任何可迭代對象都可以作用於for迴圈,而內部如何迭代我們通常並不用關心。
如果一個對象說自己可迭代,那我們就直接用 for 迴圈去迭代它,可見,迭代是一種抽象的資料操作,它不對迭代對象內部的資料有任何要求。
7.3 dict迭代key和values:
for key, value in d.items():... print key, ‘:‘, value
用函數items()或iteritems()
8.列表產生式:列表產生式則可以用一行語句代替迴圈,如:
[x * x for x in range(1, 11) if x % 2 == 0]條件過濾
[m + n for m in ‘ABC‘ for n in ‘123‘多重迴圈
python入門