Python是當(dāng)今日趨流行的一種腳本語言,它比Java更簡單,比php更強(qiáng)大,并且還適用于做桌面應(yīng)用的開發(fā),在ubuntu中,更加是必須的一種腳本引擎,所以有必要去學(xué)習(xí)一下,這里的文章只針對有一定編程基礎(chǔ),最好是比較熟悉php或javascript的用戶,如果沒任何基礎(chǔ)的新手建議找更詳細(xì)的教程去學(xué)習(xí)。
Python的變量是不需要定義的,這方面和php一樣,它比javascript還是寬松,不過它是用縮進(jìn)作為段落標(biāo)識(shí)的,作為習(xí)慣了C語言風(fēng)格語法的人,可能一開始會(huì)很不習(xí)慣使用,但細(xì)一想,其實(shí)也是很正常,很合理的。雖然Python在面向過程/面向?qū)ο蠓矫嬉彩呛軐捤桑珜?shí)際上一般的程序都是一個(gè)主入口,然后不斷調(diào)用其它類庫或函數(shù),所以用縮進(jìn)的方式并無不妥,那樣一方面要求用戶寫代碼時(shí)要規(guī)范,另一方面反向省去了多余的{}。
與C語言風(fēng)格相比,Python主要語法特點(diǎn)而下:
1、變量、字符串
??? 在python中,所有變量都是對象,數(shù)組其實(shí)是一個(gè)鏈表,并且可以進(jìn)行相應(yīng)的鏈表操作。
1.1 對于普通數(shù)據(jù)類型,定義/賦值方法都是一樣的,這里不作介紹,python的字符串方面有些特別,這里介紹一下。
python對字符串用 [']["] 括起含義是一樣的,同樣對特殊字符使用 [\] 進(jìn)行轉(zhuǎn)義
不過它有一個(gè)很特別的語法就是:[''']三引號(hào),它用于括起分多行的字符串,實(shí)際是這也可以作為它的多行注解,如:
'''
單獨(dú)使用三引號(hào),字符串因?yàn)闆]有使用,就相當(dāng)于注解了
下面是給一個(gè)變量賦值
'''
str = ''' 我是一個(gè)三引號(hào),\'oh!\'我可以換行,
????????? 換行了,照樣OK '''
print str
這樣的語法很有趣吧。
需要特別注意的是,如果源碼里有中文的,一定要在源碼的第一行定義:
# -*- coding: gb18030 -*-
當(dāng)然,你也可以使用utf-8編碼,這看你是在linux還是在windows下調(diào)試了。
1.2 此外關(guān)于變量方面, 有幾個(gè)內(nèi)置類型是有必要了解的,它們是:None、True、False (注意: python的變量是嚴(yán)格區(qū)分大小寫的 )
None 是表示沒定義的變量,至于True/False這個(gè)誰都知道了吧,呵呵。
注解:除了用 ''' 作多行注解之外,也可以用 # 作為單行注解,這是linux下的腳本語言的常規(guī)做法了。
續(xù)行:python 中對于太長的行,可以用 \ 表示未結(jié)束,這和linux的shell的通用做法是一致的。
1.3 數(shù)組定義:
arr = ['a', 'b', 'c']
等同于
arr = []
arr += ['a']
arr += ['b']
arr += ['c']
#遍歷方法:
for i in range(0, len(arr)):
??? print arr[i], "\n"
python的數(shù)組實(shí)際不是數(shù)組,而是一個(gè)list對象,如果要參考它的用法,可以參考這個(gè)對象的方法。
需要注意的是,python的數(shù)組實(shí)際是一個(gè)鏈表,因此定義后不能像php之類語言一樣,直接在后面追加元素,而是需要用操作鏈表的方法操作。在上述例子中:如果用 arr[2] = 'ccccc' 可以改變第三個(gè)元素的值,但如果用 arr[3] = 'dddd' 增加一個(gè)元素是會(huì)指錯(cuò)的,應(yīng)該用:arr.append('ddddd') 或 arr.insert(任意位置, 'dddd') 增加元素
對于多維數(shù)組,定義方式為: arr = [[]] * 3 它定義的是:[[], [], []],也可以用 arr = [[] for i in range(3)]
對于數(shù)組和字符串等常用操作,后面會(huì)有一章專門介紹,這里就不在列舉更多的使用方法。
2、區(qū)塊的定義(如語句、函數(shù)等)
Python的區(qū)塊的格式都是
區(qū)塊代碼:
??? 區(qū)塊內(nèi)部的代碼
它怎么判斷區(qū)塊結(jié)束呢?它不同VB、Dephi之類,區(qū)塊都是有結(jié)束標(biāo)志的,它沒有,它是純粹根據(jù)縮進(jìn)來識(shí)別的,這樣雖然有點(diǎn)怪異,不過習(xí)慣了會(huì)覺得也是挺好的。
區(qū)塊基本定義語法:
2.1. if / elif / else
if x>0:
??? print '正數(shù)'
elif x==0:
??? print '零'
else:
??? print '負(fù)數(shù)'
Python中沒用三問運(yùn)算符,不過可以用 (滿足條件的值 if 滿足條件 else 未滿足條件的值) 替代
如: str = ('ok' if 1>2 else 'not ok')
最終結(jié)果是: str == 'not ok'
這里需要說明的一個(gè)地方是,python中沒有 !、&& 和 || 運(yùn)算符,而是用 not、and、or
2.2. in
in判斷 一個(gè)數(shù) 是否在 一個(gè)集合(如:元組,列表等) 中
if 'yes' in? ('y','ye','yes'):
??? print? 'ok'
與之相對應(yīng)的還有 not in
2.3. for ... in
python中沒有類似C 中的for循環(huán),而是使用for...in來對集合中的每一個(gè)元素進(jìn)行操作
for x in a:
??? print x
等同于:
??? print a[i]
如果要修改a的內(nèi)容,請用a的副本循環(huán) (否則不安全),如:
for x in a[:]:
??? if len(x)>6: a.insert(0,x)
print a
結(jié)果為:
['tttyyyuuu', 'cat', 'tttyyyuuu']
2.4. break / continue
這兩個(gè)的用法和其它C語法類的語言相同
??? if 2==i: continue #結(jié)束當(dāng)前循環(huán),進(jìn)入下一步循環(huán)
??? if 6==i: break #跳出循環(huán)
??? print i
結(jié)果為:
0
1
3
4
5
2.5. while / pass
while True:
??? pass #什么也不做
2.6. is
用來比較兩個(gè)變量是否指向同一內(nèi)存地址(也就是兩個(gè)變量是否等價(jià)) 而 == 是用來比較兩個(gè)變量是否邏輯相等
b = [1,2]
>>> a is b
False
>>> a == b
True
2.7. del
用于刪除元素
del a[0]
a
>>>[2,3,4,5,6]
del a[2:4]
a
>>>[2,3,6]
del a[:]
a
>>>[]
del a
a
#拋出異常
>>>NameError: name 'a' is not defined
2.8. try ... except ... finally / raise
用于異常處理
??? x=int(raw_input("請輸入數(shù)字:"))
except ValueError: #可以同時(shí)捕獲多個(gè)異常,寫法如except(RuntimeError,ValueError):
??? print "您輸入不是數(shù)字" #當(dāng)輸入非數(shù)字時(shí)
except: #省略異常名,可以匹配所有異常,慎用
??? pass
else: #當(dāng)沒有異常時(shí)
??? print 'result=', x
finally: #和Java中類似。一般用于釋放資源,如文件,網(wǎng)絡(luò)連接。
?? print 'finish'
raise用于拋出異常,可以為自定義的異常類
這里需要特別注意的是 try 語句內(nèi)部不應(yīng)該有完成某個(gè)操作的語法,而是需要寫在
else: 后面,這和其它語言是很不同的,例如在 try 后面寫個(gè) print 它是不會(huì)顯示任何東西的。
慣例是以Error結(jié)尾的類,同類的異常一般派生自同一個(gè)基類(如Exception)
??? def __init__(self,value):
??????? self.value=value
??? def __str__(self):
??????? return reper(self.value)
基類異常可以匹配派生類異常
??? raise Exception("spam","egg")
except Exception,inst: #inst為該異常類的實(shí)例,為可選項(xiàng)
??? print type(inst) #異常的類型
??? print inst
2.9 函數(shù)的定義
def 函數(shù)名(參數(shù)列表):
??? 函數(shù)代碼
??? return 返回值(可選)
??? arr.insert(0, 'aaa')
??? return arr
arr = ['1','2','3']
new_arr = get_arr(arr)
print new_arr
結(jié)果為:['aaa', '1','2','3']
默認(rèn)參數(shù):
其中在后面的參數(shù),允許初始化一個(gè)默認(rèn)值,如:def myfunc(a, b=0, c='aaa') :
參數(shù)關(guān)鍵字:
python的函數(shù)還有一個(gè)變態(tài)的使用方法,就是調(diào)用時(shí)可以不按參數(shù)順序,而是直接用 key=value這樣的鍵值對表示參數(shù),如:
myfunc(c='ggggg', a=0)
可變參數(shù):
用 *key 表示,也是必須在參數(shù)表未尾
如:
??? file.write(format % args)
關(guān)于類和包的定義,在第三章會(huì)專門介紹,這里先不作說明。
3、附注――Python的運(yùn)算符
運(yùn)算符 | 名稱 | 說明 | 例子 |
---|---|---|---|
+ | 加 | 兩個(gè)對象相加 | 3 + 5得到8。'a' + 'b'得到'ab'。 |
- | 減 | 得到負(fù)數(shù)或是一個(gè)數(shù)減去另一個(gè)數(shù) | -5.2得到一個(gè)負(fù)數(shù)。50 - 24得到26。 |
* | 乘 | 兩個(gè)數(shù)相乘或是返回一個(gè)被重復(fù)若干次 的字符串 | 2 * 3得到6。'la' * 3得到'lalala'。 |
** | 冪 |
返回x的y次冪 |
3 ** 4得到81(即3 * 3 * 3 * 3) |
/ | 除 | x除以y | 4/3得到1(整數(shù)的除法得到整數(shù)結(jié) 果)。4.0/3或4/3.0得到1.3333333333333333 |
// | 取整除 | 返回商的整數(shù)部分 | 4 // 3.0得到1.0 |
% | 取模 | 返回除法的余數(shù) | 8%3得到2。-25.5%2.25 得到1.5 |
<< | 左移 | 把一個(gè)數(shù)的比特向左移一定數(shù)目(每個(gè) 數(shù)在內(nèi)存中都表示為比特或二進(jìn)制數(shù)字,即0和1) | 2 << 2得到8。――2按比特表示為10 |
>> | 右移 | 把一個(gè)數(shù)的比特向右移一定數(shù)目 | 11 >> 1得到5。――11按比特表示為1011,向右移動(dòng)1比特后得到101,即十進(jìn)制的5。 |
& | 按位與 | 數(shù)的按位與 | 5 & 3得到1。 |
| | 按位或 | 數(shù)的按位或 | 5 | 3得到7。 |
^ | 按位異或 | 數(shù)的按位異或 | 5 ^ 3得到6 |
~ | 按位翻轉(zhuǎn) | x的按位翻轉(zhuǎn)是-(x+1) | ~5得到6。 |
< | 小于 | 返回x是否小于y。所有比較運(yùn)算符返 回1表示真,返回0表示假。這分別與特殊的變量True和False等價(jià)。注意,這些變量名的大寫。 | 5 < 3返回0(即False)而3 < 5返回1(即True)。比較可以被任意連接:3 < 5 < 7返回True。 |
> | 大于 | 返回x是否大于y | 5 > 3返回True。如果兩個(gè)操作數(shù)都是數(shù)字,它們首先被轉(zhuǎn)換為一個(gè)共同的類型。否則,它總是返回False。 |
<= | 小于等于 | 返回x是否小于等于y | x = 3; y = 6; x <= y返回True。 |
>= | 大于等于 | 返回x是否大于等于y | x = 4; y = 3; x >= y返回True。 |
== | 等于 | 比較對象是否相等 | x = 2; y = 2; x == y返回True。x = 'str'; y = 'stR'; x == y返回False。x = 'str'; y = 'str'; x == y返回True。 |
!= | 不等于 | 比較兩個(gè)對象是否不相等 | x = 2; y = 3; x != y返回True。 |
not | 布爾“非” | 如果x為True,返回False。 如果x為False,它返回True。 | x = True; not y返回False。 |
and | 布爾“與” | 如果x為False,x and y返回False,否則它返回y的計(jì)算值。 | x = False; y = True; x and y,由于x是False,返回False。在這里,Python不會(huì)計(jì)算y,因?yàn)樗肋@個(gè)表達(dá)式的值肯定是False(因?yàn)閤是False)。這個(gè)現(xiàn)象 稱為短路計(jì)算。 |
or | 布爾“或” | 如果x是True,它返回True, 否則它返回y的計(jì)算值。 | x = True; y = False; x or y返回True。短路計(jì)算在這里也適用。 |
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
