Python程序設(shè)計(jì)入門(mén)(1)基本語(yǔ)法簡(jiǎn)介
Python是當(dāng)今日趨流行的一種腳本語(yǔ)言,它比Java更簡(jiǎn)單,比php更強(qiáng)大,并且還適用于做桌面應(yīng)用的開(kāi)發(fā),在ubuntu中,更加是必須的一種腳本引擎,所以有必要去學(xué)習(xí)一下,這里的文章只針對(duì)有一定編程基礎(chǔ),最好是比較熟悉php或javascript的用戶,如果沒(méi)任何基礎(chǔ)的新手建議找更詳細(xì)的教程去學(xué)習(xí)。
Python的變量是不需要定義的,這方面和php一樣,它比javascript還是寬松,不過(guò)它是用縮進(jìn)作為段落標(biāo)識(shí)的,作為習(xí)慣了C語(yǔ)言風(fēng)格語(yǔ)法的人,可能一開(kāi)始會(huì)很不習(xí)慣使用,但細(xì)一想,其實(shí)也是很正常,很合理的。雖然Python在面向過(guò)程/面向?qū)ο蠓矫嬉彩呛軐捤?,但?shí)際上一般的程序都是一個(gè)主入口,然后不斷調(diào)用其它類(lèi)庫(kù)或函數(shù),所以用縮進(jìn)的方式并無(wú)不妥,那樣一方面要求用戶寫(xiě)代碼時(shí)要規(guī)范,另一方面反向省去了多余的{}。
與C語(yǔ)言風(fēng)格相比,Python主要語(yǔ)法特點(diǎn)而下:
1、變量、字符串
在python中,所有變量都是對(duì)象,數(shù)組其實(shí)是一個(gè)鏈表,并且可以進(jìn)行相應(yīng)的鏈表操作。
1.1 對(duì)于普通數(shù)據(jù)類(lèi)型,定義/賦值方法都是一樣的,這里不作介紹,python的字符串方面有些特別,這里介紹一下。
python對(duì)字符串用 [']["] 括起含義是一樣的,同樣對(duì)特殊字符使用 [\] 進(jìn)行轉(zhuǎn)義
不過(guò)它有一個(gè)很特別的語(yǔ)法就是:[''']三引號(hào),它用于括起分多行的字符串,實(shí)際是這也可以作為它的多行注解,如:
'''
單獨(dú)使用三引號(hào),字符串因?yàn)闆](méi)有使用,就相當(dāng)于注解了
下面是給一個(gè)變量賦值
'''
str = ''' 我是一個(gè)三引號(hào),\'oh!\'我可以換行,
換行了,照樣OK '''
print str
這樣的語(yǔ)法很有趣吧。
需要特別注意的是,如果源碼里有中文的,一定要在源碼的第一行定義:
# -*- coding: gb18030 -*-
當(dāng)然,你也可以使用utf-8編碼,這看你是在linux還是在windows下調(diào)試了。
1.2 此外關(guān)于變量方面,有幾個(gè)內(nèi)置類(lèi)型是有必要了解的,它們是:None、True、False (注意:python的變量是嚴(yán)格區(qū)分大小寫(xiě)的)
None 是表示沒(méi)定義的變量,至于True/False這個(gè)誰(shuí)都知道了吧,呵呵。
注解:除了用 ''' 作多行注解之外,也可以用 # 作為單行注解,這是linux下的腳本語(yǔ)言的常規(guī)做法了。
續(xù)行:python 中對(duì)于太長(zhǎng)的行,可以用 \ 表示未結(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對(duì)象,如果要參考它的用法,可以參考這個(gè)對(duì)象的方法。
需要注意的是,python的數(shù)組實(shí)際是一個(gè)鏈表,因此定義后不能像php之類(lèi)語(yǔ)言一樣,直接在后面追加元素,而是需要用操作鏈表的方法操作。在上述例子中:如果用 arr[2] = 'ccccc' 可以改變第三個(gè)元素的值,但如果用 arr[3] = 'dddd' 增加一個(gè)元素是會(huì)指錯(cuò)的,應(yīng)該用:arr.append('ddddd') 或 arr.insert(任意位置, 'dddd') 增加元素
對(duì)于多維數(shù)組,定義方式為: arr = [[]] * 3 它定義的是:[[], [], []],也可以用 arr = [[] for i in range(3)]
對(duì)于數(shù)組和字符串等常用操作,后面會(huì)有一章專(zhuān)門(mén)介紹,這里就不在列舉更多的使用方法。
2、區(qū)塊的定義(如語(yǔ)句、函數(shù)等)
Python的區(qū)塊的格式都是
區(qū)塊代碼:
區(qū)塊內(nèi)部的代碼
它怎么判斷區(qū)塊結(jié)束呢?它不同VB、Dephi之類(lèi),區(qū)塊都是有結(jié)束標(biāo)志的,它沒(méi)有,它是純粹根據(jù)縮進(jìn)來(lái)識(shí)別的,這樣雖然有點(diǎn)怪異,不過(guò)習(xí)慣了會(huì)覺(jué)得也是挺好的。
區(qū)塊基本定義語(yǔ)法:
2.1. if / elif / else
if x>0:
print '正數(shù)'
elif x==0:
print '零'
else:
print '負(fù)數(shù)'
Python中沒(méi)用三問(wèn)運(yùn)算符,不過(guò)可以用 (滿足條件的值 if 滿足條件 else 未滿足條件的值) 替代
如: str = ('ok' if 1>2 else 'not ok')
最終結(jié)果是: str == 'not ok'
這里需要說(shuō)明的一個(gè)地方是,python中沒(méi)有 !、&& 和 || 運(yùn)算符,而是用 not、and、or
2.2. in
in判斷 一個(gè)數(shù) 是否在 一個(gè)集合(如:元組,列表等) 中
if 'yes' in ('y','ye','yes'):
print 'ok'
與之相對(duì)應(yīng)的還有 not in
2.3. for ... in
python中沒(méi)有類(lèi)似C 中的for循環(huán),而是使用for...in來(lái)對(duì)集合中的每一個(gè)元素進(jìn)行操作
for x in a:
print x
等同于:
print a[i]
如果要修改a的內(nèi)容,請(qǐng)用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語(yǔ)法類(lèi)的語(yǔ)言相同
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
用來(lái)比較兩個(gè)變量是否指向同一內(nèi)存地址(也就是兩個(gè)變量是否等價(jià)) 而 == 是用來(lái)比較兩個(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("請(qǐng)輸入數(shù)字:"))
except ValueError: #可以同時(shí)捕獲多個(gè)異常,寫(xiě)法如except(RuntimeError,ValueError):
print "您輸入不是數(shù)字" #當(dāng)輸入非數(shù)字時(shí)
except: #省略異常名,可以匹配所有異常,慎用
pass
else: #當(dāng)沒(méi)有異常時(shí)
print 'result=', x
finally: #和Java中類(lèi)似。一般用于釋放資源,如文件,網(wǎng)絡(luò)連接。
print 'finish'
raise用于拋出異常,可以為自定義的異常類(lèi)
這里需要特別注意的是 try 語(yǔ)句內(nèi)部不應(yīng)該有完成某個(gè)操作的語(yǔ)法,而是需要寫(xiě)在
else: 后面,這和其它語(yǔ)言是很不同的,例如在 try 后面寫(xiě)個(gè) print 它是不會(huì)顯示任何東西的。
慣例是以Error結(jié)尾的類(lèi),同類(lèi)的異常一般派生自同一個(gè)基類(lèi)(如Exception)
def __init__(self,value):
self.value=value
def __str__(self):
return reper(self.value)
基類(lèi)異??梢云ヅ渑缮?lèi)異常
raise Exception("spam","egg")
except Exception,inst: #inst為該異常類(lèi)的實(shí)例,為可選項(xiàng)
print type(inst) #異常的類(lèi)型
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這樣的鍵值對(duì)表示參數(shù),如:
myfunc(c='ggggg', a=0)
可變參數(shù):
用 *key 表示,也是必須在參數(shù)表未尾
如:
file.write(format % args)
關(guān)于類(lèi)和包的定義,在第三章會(huì)專(zhuān)門(mén)介紹,這里先不作說(shuō)明。
3、附注——Python的運(yùn)算符
運(yùn)算符 | 名稱(chēng) | 說(shuō)明 | 例子 |
---|---|---|---|
+ | 加 | 兩個(gè)對(duì)象相加 | 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?!?按比特表示為10 |
>> | 右移 | 把一個(gè)數(shù)的比特向右移一定數(shù)目 | 11 >> 1得到5?!?1按比特表示為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à)。注意,這些變量名的大寫(xiě)。 | 5 < 3返回0(即False)而3 < 5返回1(即True)。比較可以被任意連接:3 < 5 < 7返回True。 |
> | 大于 | 返回x是否大于y | 5 > 3返回True。如果兩個(gè)操作數(shù)都是數(shù)字,它們首先被轉(zhuǎn)換為一個(gè)共同的類(lèi)型。否則,它總是返回False。 |
<= | 小于等于 | 返回x是否小于等于y | x = 3; y = 6; x <= y返回True。 |
>= | 大于等于 | 返回x是否大于等于y | x = 4; y = 3; x >= y返回True。 |
== | 等于 | 比較對(duì)象是否相等 | x = 2; y = 2; x == y返回True。x = 'str'; y = 'stR'; x == y返回False。x = 'str'; y = 'str'; x == y返回True。 |
!= | 不等于 | 比較兩個(gè)對(duì)象是否不相等 | x = 2; y = 3; x != y返回True。 |
not | 布爾“非” | 如果x為T(mén)rue,返回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)象 稱(chēng)為短路計(jì)算。 |
or | 布爾“或” | 如果x是True,它返回True, 否則它返回y的計(jì)算值。 | x = True; y = False; x or y返回True。短路計(jì)算在這里也適用。 |
相關(guān)文章
雙向RNN:bidirectional_dynamic_rnn()函數(shù)的使用詳解
今天小編就為大家分享一篇雙向RNN:bidirectional_dynamic_rnn()函數(shù)的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01python魔法方法-屬性轉(zhuǎn)換和類(lèi)的表示詳解
下面小編就為大家?guī)?lái)一篇python魔法方法-屬性轉(zhuǎn)換和類(lèi)的表示詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07Python的requests網(wǎng)絡(luò)編程包使用教程
requests包為Python擴(kuò)展了各種基于HTTP的網(wǎng)絡(luò)數(shù)據(jù)操作功能,包括各種請(qǐng)求與session和cookie等的追加,very強(qiáng)大,下面我們就來(lái)看一下Python的requests網(wǎng)絡(luò)編程包使用教程2016-07-07Python使用imagehash庫(kù)生成ahash算法的示例代碼
aHash、pHash、dHash是常用的圖像相似度識(shí)別算法,本文將利用Python中的imagehash庫(kù)生成這一算法,從而實(shí)現(xiàn)計(jì)算圖片相似度,感興趣的可以了解一下2022-11-11Python3按一定數(shù)據(jù)位數(shù)格式處理bin文件的方法
今天小編就為大家分享一篇Python3按一定數(shù)據(jù)位數(shù)格式處理bin文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01python實(shí)戰(zhàn)游戲之史上最難最虐的掃雷游戲沒(méi)有之一
這篇文章主要介紹了使用 python 實(shí)現(xiàn)掃雷游戲,不同于傳統(tǒng)過(guò)時(shí)的掃雷,今天我們用 Python 增加了新花樣,文中給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-09-09python3中利用filter函數(shù)輸出小于某個(gè)數(shù)的所有回文數(shù)實(shí)例
今天小編就為大家分享一篇 python3中利用filter函數(shù)輸出小于某個(gè)數(shù)的所有回文數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11python scp 批量同步文件的實(shí)現(xiàn)方法
今天小編就為大家分享一篇python scp 批量同步文件的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01