python筆記 ---蛋疼的 動態型別+強型別語言
基礎篇
- List tuple(元素不能改變的list,但是指標指向可以變)
- Dict(就是map) ;set:s = set([‘A’, ‘B’, ‘C’]) (特點:去重,無序)
- 切片 : L[0:3], 包頭不包尾, 切了3個元素的列表出來
```
L = ['Adam', 'Lisa', 'Bart', 'Paul']
>>> L[-2:]
['Bart', 'Paul']
>>> L[:-2]
['Adam', 'Lisa']
注意倒序切片的寫法
4 列表生成式 特色功能
[x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
**range(1, 100, 2) 可以生成list [1, 3, 5, 7, 9,...]**
5.raw :多行字串 (好東西)
6.u'中文' :直接轉Unicode 也是好東西
函式篇
1.map()函式 :
def f(x):
return x*x
print map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
輸出結果:
[1, 4, 9, 10, 25, 36, 49, 64, 81]
2.reuduce()
def f (x, y):
return x + y
呼叫 reduce(f, [1, 3, 5, 7, 9])時,reduce函式將做如下計算:
先計算頭兩個元素:f(1, 3),結果為4;
再把結果和第3個元素計算:f(4, 5),結果為9;
再把結果和第4個元素計算:f(9, 7),結果為16;
再把結果和第5個元素計算:f(16, 9),結果為25;
由於沒有更多的元素了,計算結束,返回結果25。
其實就是 list求和 ,跟sum一樣
3.filter( )
def is_odd(x)
return x % 2 == 1
然後,利用filter()過濾掉偶數:
filter (is_odd, [1, 4, 6, 7, 9, 12, 17])
結果:[1, 7, 9, 17]
4.sort 排序 可自定義comparator函式
sorted([36, 5, 12, 9, 21], reversed_cmp)
[36, 21, 12, 9, 5]
4.1 int() 函式可以把字串轉換為整數 ,預設十進位制
5.閉包 (即私有化函式)
def f():
print 'f()...'
def g():
print 'g()...'
return g
6.裝飾器 可以在new_f(n)裡對f(n)進行修飾
@new_f(n)
def f(n):
return n*n;
一般用於:
列印日誌 @log
檢測效能@perfomance
資料庫加事務 @trasaction
裝飾器理解 : python中 一切皆物件!
函式的返回值還是 一個函式,而且 函式還是第一類物件!
所謂第一類物件,就是可以用識別符號給物件命名,或者賦值,傳遞,返回等等。
注意混淆點:
def func():
return "hello,world"
ref1 = func #將函式物件賦值給ref1
ref2 = func() #呼叫函式,將函式的返回值("hello,world"字串)賦值給ref2
- 偏函式: 就是自己定義一個偏好函式
int2 = functools.partial(int, base=2)
>>> int2('1000000')
64
>>> int2('1010101')
85
python的面向物件
_ _ f(n) 私有方法
init(self) 構造方法
因為第一個引數name被Python直譯器傳入了例項的引用,,所以必須是self
例項方法 : 例項的方法就是在類中定義的函式,它的第一個引數永遠是 self,指向呼叫該方法的例項本身 (就是非靜態方法 , self可不顯示呼叫)
類方法 (就是靜態方法) ,通過標記一個 @classmethod,該方法將繫結到 Person 類上
class Person(object):
count = 0
@classmethod
def how_many(cls):
return cls.count
Python的類
繼承 class Student(Person):
麻煩點:一定要用 super(Student, self).init(name, gender)
去初始化父類,
多型 :其中有一個重要區別 :動態語言和靜態語言(例如Java)最大的差別之一。動態語言呼叫例項方法,不檢查型別,只要方法存在,引數正確,就可以呼叫。
拋異常 raise ValueError(‘invalid score’)
裝飾器寫法的 set/get :
@property
def score(self):
return self.__score
@score.setter
def score(self, score):
if score < 0 or score > 100:
raise ValueError('invalid score')
self.__score = score
,slots是指一個類允許的屬性列表:
class Student(object):
__slots__ = ('name', 'gender', 'score')
def __init__(self, name, gender, score):
self.name = name
self.gender = gender
self.score = score
所有的函式都是可呼叫物件。
一個類例項也可以變成一個可呼叫物件,只需要實現一個特殊方法call()。
class Person(object):
def __init__(self, name, gender):
self.name = name
self.gender = gender
def __call__(self, friend):
print 'My name is %s...' % self.name
print 'My friend is %s...' % friend
對Person的例項呼叫就能寫成:
>>> p = Person('Bob', 'male')
>>> p('Tim')
My name is Bob...
My friend is Tim...
ps :其實只看p() 無法確定是函式還是物件吶 不嚴謹的語言!