Python簡介及入門
部落格遷往:新地址 (點選直達)
新部落格使用markdown維護,線下有版本庫,自己寫的所以會定時更新同步,同時提供更好的導航和閱讀體驗 csdn對markdown支援不好,所以舊版不會花時間進行同步修訂,抱歉---------------------------------
Python簡介及入門
python
為什麼是python
選擇自己喜歡的語言,這往往不容易,更多的是根據需求
話說,之前是java,大學用了三年+實習半年,後來入職做測試開發後,碰到了python
到最後,轉python開發了
寫起來快,縮排,不用打花括號,省手指,讀起來舒服…..
喜歡,貌似不需要什麼太牛的理由,用著順手舒服就行
什麼語言之爭,編輯器之戰啥的,能忽略就忽略吧,能無視就無視吧,工具,夠用,用這舒服就ok了,浪費口水精力爭來爭去圖個啥呢
Life is short, I use python!
簡介
python介紹: 到官網自個看
有興趣可以看看: 解釋性語言+動態型別語言+強型別語言
優點缺點: 自己google
國際慣例
互動模式:(主要拿來試驗,可以試試 ipython)
$python >>> print 'hello world'
指令碼
#!/usr/bin/env python
print 'hello world'
環境及其他
基本安裝: 自己google[安裝和配置一搜一大把,基本技能,不解釋,貌似很久之前我也寫了一篇http://blog.csdn.net/wklken/article/details/6311292
環境:
建議python2.7 + easy_install + pip + virtualenv + ipython
開發工具:
vim/sublimetext2/eclipse+pydev/pycharm
建議初學idle或者pydev吧,用著順手就行,
關於編碼風格:
谷歌的:http://google-styleguide.googlecode.com/svn/trunk/pyguide.html
中文: http://www.bsdmap.com/articles/zh-google-python-style-guide/
入門
不扯,開始
縮排
Python 函式沒有明顯的 begin 和 end,沒有標明函式的開始和結束的花括號。唯一的分隔符是一個冒號 (:),接著程式碼本身是縮排的。
例子:
#函式
def func(value):
print value #縮排
if value == 1:
value += 1
elif value == 2:
pass
else:
value += 10
識別符號
變數是識別符號的例子。 識別符號 是用來標識 某樣東西 的名字。在命名識別符號的時候,你要遵循這些規則:
1.python中的識別符號是區分大小寫的。
2.標示符以字母或下劃線開頭,可包括字母,下劃線和數字,大小寫敏感
3.以下劃線開頭的識別符號是有特殊意義的。
- 以單下劃線開頭(_foo)的代表不能直接訪問的類屬性,需通過類提供的介面進行訪問,不能用“from xxx import *”而匯入;
- 以雙下劃線開頭的(__foo)代表類的私有成員;
- 以雙下劃線開頭和結尾的(foo)代表python裡特殊方法專用的標識,如init()代表類的建構函式。
4.識別符號不能是保留字
and elif global or yield
assert else if pass
break except import print
class exec in raise
continue finally is return
def for lambda try
del from not while
變數
賦值語句
- 賦值語句建立物件引用值
- 變數名在首次賦值時會被建立
- 變數名在引用前必須先賦值,不能引用未宣告賦值的變數
賦值方式
- 簡單賦值
Variable(變數)=Value(值)
s = ‘spam’
- 多變數賦值
python中原始的元組和列表賦值語句形成,最後已被通用化,以接受右側可以是是任何型別的序列,只要長度相等即可。注意,長度一定相等
Variable1,variable2,...=Value1,Value2,...
s,h = ‘a’,’b’ 元組賦值,位置性 【常用】
[s,h] =[‘a’,’b’] 列表賦值,位置性
a,b,c,d = ‘spam’ 序列賦值,通用性
a,*b = ‘spam’ 拓展序列解包(python3)
- 多目標賦值
a=b=variable
s = h = ‘spam’ 多目標賦值
注意:多個變數記憶體中指向同一物件,對於可變型別需要,修改一個會對其他造成影響
- 自變賦值
如+=,-=,*=等。
在自變賦值中,python僅計算一次,而普通寫法需計算兩次;
自變賦值會修改原始物件,而不是建立一個新物件。
s +=42 增強賦值
x += y
優點:
程式設計師輸入更少
左側只需計算一次,優化技術自動原處修改,更快
l +=[] 原處修改
l = l+[] 複製,生成新的物件
運算子
一個表示式可以分解為運算子和運算元
運算子 的功能是完成某件事,它們由如+這樣的符號或者其他特定的關鍵字表示
運算子需要資料來進行運算,這樣的資料被稱為 運算元
運算子優先順序列表(從最高到最低)
運算子 描述
'expr' 字串轉換
{key:expr,...} 字典
[expr1,expr2...] 列表
(expr1,expr2,...) 元組
function(expr,...) 函式呼叫
x[index:index] 切片
x[index] 下標索引取值
x.attribute 屬性引用
~x 按位取反
+x,-x 正,負
x**y 冪
x*y,x/y,x%y 乘,除,取模
x+y,x-y 加,減
x<<y,x>>y 移位
x&y 按位與
x^y 按位異或
x|y 按位或
x<y,x<=y,x==y,x!=y,x>=y,x>y 比較
x is y,x is not y 等同測試
x in y,x not in y 成員判斷
not x 邏輯否
x and y 邏輯與
x or y 邏輯或
lambda arg,...:expr Lambda匿名函式
結合規律
運算子通常由左向右結合,即具有相同優先順序的運算子按照從左向右的順序計算
計算順序
預設地,運算子優先順序表決定了哪個運算子在別的運算子之前計算。然而,如果你想要改變它們的計算順序,你得使用圓括號。好的做法:預設對複雜的運算加括號,而不是依賴於預設結合和計算順序
真值
真值測試
- 任何非零數字或非空物件都為真
- 數字零,空物件以及特殊物件None都為假
- 比較和相等測試都會遞迴地運用到資料結構中
- 比較和相等測試會返回True或False
真值表
物件/常量 值
"" 假
"string" 真
0 假
2>=1 真
-2<=-1 真
()空元組 假
[]空列表 假
{}空字典 假
None 假
布林表示式
三種布林表示式運算子
x and y
x or y
not x
比較
- 數字通過相對大小進行比較
- 字串時按照字典順序的,一個字元一個字元比較
- 列表和元組從左到右對每部分的內容進行比較
- 字典通過排序後的鍵值列表進行比較
- 數字混合型別比較在python3是錯誤的,但是python2.6支援,固定但任意的排序規則
布林數
- 有兩個永遠不改變的值True,False
- 布林是整型的子類,但不能被再繼承
- 沒有nonzero()方法的物件的預設值是True
- 對於值為0的任何數字或空集,值False
- 在數學運算中,Bollean值的True和False分別對應於1和0
基本控制流
if
基本的條件測試語句,用來判斷可能遇到的不同情況,並針對不同的情況進行操作
基本形式
if <條件>:
<語句>
elif <條件>:
<語句>
else:
<語句>
注意
python根據縮排判斷, elif和else部分是可選的
例子:
a = 1
b = 2
c = 3;d=4 #兩個放一句用分號隔開,不過建議分行
if a < b and c < d:
print("branch a")
elif a == b:
print("branch b")
else:
print("branch c")
switch
python 本身沒有 switch 語句,若需要,用if/elif/else實現完成同樣的工作,某些情況可以考慮用字典
也可以用dict的形式
if/else三元運算子
A = ((X and Y) or Z)
A = Y if X else Z
例: a = ‘t’ if x else ‘a’
for
- 基本語法
迴圈控制語句,可以用於迴圈遍歷某一序列
else塊可選,在迴圈終止的時候執行,若是break終止迴圈,else不執行
格式:
for <物件變數> in <物件集合>:
if<條件>:
break
if<條件>:
continue
<其他語句>
else:
<其他語句>
注意:
1.物件集合可以是列表,字典以及元組等
2.for..in迴圈對於任何序列都適用
3.for遍歷一個字典時,遍歷的是字典的鍵
- rang & xrange
可以通過range()函式產生一個整數列表,完成計數迴圈
range([start,] stop[, step])
start可選引數,起始數
stop終止數,若為x,產生從0-(x-1)的整數列表
step可選引數,步長,未寫預設為1
range(1,5) 包含序列為 [1,2,3,4]
xrange和range區別
(python3.x的可無視)
在Range的方法中,它會生成一個list的物件,但是在XRange中,它生成的卻是一個xrange的物件,當返回的東西不是很大的時候,或者在一個迴圈裡,基本上都是從頭查到底的情況下,這兩個方法的效率差不多。但是,當返回的東西很大,或者迴圈中常常會被Break出來的話,還是建議使用XRange,這樣既省空間,又會提高效率。
>>> print range(1, 5)
[1, 2, 3, 4]
>>> print xrange(1, 5)
xrange(1, 5)
在上面語句中,range返回了一個普通List,而xrange返回了一個特定的xrange型別的物件。由於 xrange 方法也建立整數 list(其使用相同引數),所以它與 range 方法非常相似。但是,xrange 方法僅在需要時才在 list 中建立整數。當需要迭代大量整數時,xrange 方法更適用,因為它不會創建極大的 list,那樣會消耗大量計算機記憶體。
while
與if語句類似,含一個條件測試語句,迴圈,允許重複執行一個語句塊。
可選else語句塊,同for的else塊。
格式:
while <條件>:
if <條件>:
break
if <條件>:
continue
<其他語句>
else:
<語句>
說明:
- while迴圈條件變為False的時候,else塊才被執行
- 若是使用break結束迴圈,while可選的else塊不執行
- python沒有do while或do until迴圈語句
break & continue & pass
break,終止迴圈語句,停止迴圈,若是for/while迴圈中終止,其else不執行
continue,結束當前,進入下一輪迴圈 - 跳到最近所在迴圈的開頭處(來到迴圈首行)
pass 什麼事也不做,只是空佔位語句,它用於那些語法上必須要有什麼語句,但程式什麼也不做的場合
迴圈else塊 :只有迴圈正常離開時才會執行,即
如果你從for或while迴圈中break終止 ,任何對應的迴圈else塊將不執行。記住,break語句也可以在for迴圈中使用
其他
編寫迴圈的技巧:
在迭代過程中修改迭代序列不安全(只有在使用連結串列這樣的可變序列時才會有這樣的情況)。如果你想要修改你迭代的序列(例如,複製選擇項),你可以迭代它的複本。使用切割標識就可以很方便的做到這一點
>>> for x in a[:]: # make a slice copy of the entire list
... if len(x) > 6: a.insert(0, x)
在字典中迴圈時,關鍵字和對應的值可以使用 iteritems() 方法同時解讀出來
>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
>>> for k, v in knights.iteritems():
... print k, v
...
gallahad the pure
robin the brave
在序列中迴圈時,索引位置和對應值可以使用 enumerate() 函式同時得到。
>>> for i, v in enumerate(['tic', 'tac', 'toe']):
... print i, v
The end!
To be continue
wklken
Email: [email protected]
Blog: http://blog.csdn.net/wklken
2013-03-16
轉載請註明出處,謝謝