天天看點

python學習(2)基本文法

——python的設計哲學是“優雅”、“明确”、“簡單”

推薦的ide:pycharm        python版本2.7

(1)整數、浮點數與c++一樣,其運算也是一樣。

(2)字元串:“”或’’括起來的文本,對特殊字元,可以用 \ 進行轉義。可以用 r'...' 和r'''...'''轉義多個特殊字元,後者對段落有效。以unicode表示的字元串用 u'...' 表示,不加u中文不能正常顯示。同樣有u'''...''',甚至組合為ur'''...'''。

可以在第一行添加注釋 

# -*- coding: utf-8 -*-

目的是告訴python解釋器,用utf-8編碼讀取源代碼。

(3)布爾值:用true和false表示(注意大小寫),可以用and、or和not運算。

python把0、空字元串''和none看成 false,其他數值和非空字元串都看成 true。

(4)空值:none

(5)list:一種有序的集合,可以随時添加和删除其中的元素。構造很簡單,直接用 [ ] 就可以了,裡面的元素也不要求類型相同,超級自由的,像這樣:

 my_list = ['you', true, 233]

或是這樣

 empty_list = []

我們可以直接用print就把整個list列印出來,超級友善!

而且還可以用下标通路,跟數組一樣:l[1],倒序通路也可以!!!l[-1]我的天呐!

插入:有兩種方法:l.append(元素)追加元素到末尾,l.insert(0,元素)插入元素到0位置,其他元素順勢往後移。

删除:l.pop(),删掉最後一個,l.pop(2)删掉位置2的元素。

替換:l[0]=元素,直接替換0位置的元素。

(6)tuple(元組):一旦建立就不能修改。建立方式是這樣的:

t = ('元素1', '元素2', '元素3') 或是 t=(元素,)——單元素tuple需要避免歧義。

tuple裡面嵌套list也是可以的:

t = ('a', 'b', ['a', 'b'])

(7)dict:表示映射關系的字典,用 {} 表示,花括号裡是key:value這樣的對應關系。

len(d)可以用來求字典的大小。要注意key是不可變得類型,如字元串、整數、浮點數。

通路dict裡面的元素:d[key],但要知道這個key值是否存在,避免發生錯誤。判斷方法如下:

1. if ‘key’ in d:

2. d.get(‘key’),存在傳回value,不存在傳回none

d[key]=value語句可以用于添加新的映射,也可以用于修改原來的映射。

(8)set:set裡面的元素不會有重複,而且是無序的。建立 set 的方式是調用 set() 并傳入一個 list,list的元素将作為set的元素。

 s = set(['元素1', '元素2', '元素3'])

用in操作符判斷一個元素是否在set中。

s.add(元素)和s.remove(元素)可以用于在set中添加和删除元素。删除時需注意判斷元素是否在set中,否則會報錯。

變量的命名規則:大小寫英文、數字和下劃線(_)的組合,且不能用數字開頭。

python是動态語言,變量本身的類型是不固定的!

print語句,可以連多個字元串,用“,”隔開,在輸出中會顯示為空格。

以 # 開頭,至行尾都是注釋

python代碼的縮進規則:具有相同縮進的代碼被視為代碼塊。縮進據說用4個空格比較好。

(1)if語句:

if+表達式+:

(2)if-else語句:

else:

(3)if-elif-else語句:

elif+表達式+:

(4)for循環:

可以用來周遊list、tuple、dict和set裡的元素:

l = ['adam', 'lisa', 'bart']

for name in l:

    print name

(5)while循環:

while+表達式+:

(6)break跳出循環:

再循環中可以使用break跳出循環。

(7)continue跳出本次循環,繼續以後的循環:

調用:方法和c++一樣,像:abs(-1)、cmp(x,y)、int(‘123’)、str(123)。(後兩個為類型轉換),zip()函數可以把兩個list變成一個list:

>>> zip([10, 20, 30], ['a', 'b', 'c'])

[(10, 'a'), (20, 'b'), (30, 'c')]

編寫:用def語句,後接函數名、括号、參數和冒号,再編寫函數體,裡面可以包含return語句,當然也可以沒有,這時會傳回none。

注意python的函數是可以傳回多個值的,實際上這裡傳回的是一個tuple。像下面這段代碼:

import math

def move(x, y, step, angle):

    nx = x + step * math.cos(angle)

    ny = y - step * math.sin(angle)

    return nx, ny

遞歸函數、預設參數和c++的差不多。

可變參數:參數名前面加一個*,就可以傳入0個、1個或多個參數。其實這裡也是一個tuple。看下面求平均值的一段代碼:

def average(*args):

    ave=0.0

    ji=0.0

    for i in args:

        ji=ji+1

        ave+=i

    if ji!=0:

        ave=ave/ji    

    return ave  

print average()

print average(1, 2)

print average(1, 2, 2, 3, 4)

關鍵字參數:允許你傳入0個或任意個含參數名的參數,這些關鍵字參數在函數内部自動組裝為一個dict。

def person(name, age, **kw):

print 'name:', name, 'age:', age, 'other:', kw

>>> person(mike, 20)

name: mike age: 20 other: {}

>>> person('sam', 15, city=’guangdong’)

name: sam age: 15 other: {'city': ’guangdong’}

>>> person(‘allen’, 45, gender='m', job='player')

name: allen age: 45 other: {'gender': 'm', 'job': ‘player’}

,可以對list和tuple甚至字元串進行切片,看下面幾個例子就明白了:

l[0:3]:表示從0開始的3個元素

l[:3]:表示從0開始的3個元素

l[:]:表示從頭到尾

l[::2]:第三個參數表示每兩個元素取一個

倒序也是可以的!l[-2:]:表示從倒數第二個到末尾的元素

(1)enumerate() 函數,可以在循環中同時綁定元素下标和元素,實際上是把元素下标和元素組成tuple中的映射。

看下面代碼:

>>> l = ['a', 'b', 'c', 'd']

>>> for index, name in enumerate(l):

...     print index, '-', name

... 

0 - a

1 - b

2 - c

3 - d

(2)dict的周遊:

1.直接周遊時周遊的是dict的key,像下面的代碼:

for key in d:

print key+':',d[key]

2.若想要周遊value,方法有兩種:

一種是用values()方法:

for v in d.values():

print v

另一種是用 itervalues() 方法(更省記憶體):

for v in d.itervalues():

3.同時周遊,我們有時需要同時周遊dict的key和value,我們有items()方法和iteritems()方法,後者不占用額外的記憶體。看下面的代碼:

>>> for key, value in d.items():

   print key, ':', value

清單生成式可以用簡潔的代碼生成list。代碼例子像下面這樣:

>>> [x * x for x in range(1, 11) if x % 2 == 0]

[4, 16, 36, 64, 100]

當然多層嵌套也是可以的:

>>> [m + n for m in 'abc' for n in '123']

['a1', 'a2', 'a3', 'b1', 'b2', 'b3', 'c1', 'c2', 'c3']

當然有些時候我們隻需要按一定規則生成的元素,而不需要把所有元素列出一個list。這個時候我們就可以用生成器(generator)。

我們用 () 建立,像這樣: g = (x * x for x in range(10)),我們可以一直用next()方法調用生成的元素,當然用一個for循環會顯得理智得多。

當函數傳回結果用yield語句時,它其實也是一個生成器。

寫文章的時候剛剛接到消息,小李子拿奧斯卡了,嗷嗷~,小李子你不是一個人在拿獎

繼續閱讀