Python筆記(十五):匿名函數和@property

(一)匿名函數函數

不想顯式定義函數的時候,能夠使用匿名函數。spa

1 def f(x):
2     return x*x
3 
4 #將匿名函數賦值給一個變量
5 result = lambda x:x*x
6 
7 print(result(5))
8 print(f(5))

經過輸出能夠看出, lambda x:x*x  實際上就是:code

1 def f(x):
2     return x*x

 lambda關鍵字表示一個匿名函數,經過上面的對比能夠看出冒號前面的x就是函數的參數,後面的表達式就是該匿名函數的返回值。blog

匿名函數只有一個表達式,不須要寫return,由於表達式的結果就是該匿名函數的返回值。接口

例1:get

1 def divisible(n):
2 
3     return n % 2 == 0
4 #這裏解釋下filter(function, iterable)函數,第一個參數爲函數,第二個爲序列
5 #序列的每一個元素做爲參數傳遞給函數進行判斷,而後返回 True 或 False,最後將返回 True 的元素放到新列表中。
6 the_list =list( filter(divisible,range(20)))

使用匿名函數重寫上面的代碼:下面這個和上面的是同樣的it

1 the_list = list(filter(lambda n: n % 2 == 0,range(20)))

例2:io

匿名函數也能夠定義多個參數function

1 def f(x,y):
2 
3     return x+y
4 
5 l = lambda x,y: x + y
6 
7 print(f(1,3))
8 print(l(1,3))

(二)@propertyclass

 例如:如今有一個能夠存儲人類年齡的類

 1 class people():
 2 
 3     def __init__(self,age=1):
 4         self.age = age
 5 
 6 #經過下面p = people()   p.age = 100,咱們能夠設置人的年齡
 7 
 8 p = people()
 9 p.age = 100
10 print(p.age)

如今有一個新需求,要求年齡只能輸入大於0的整數。有一個解決方式就是隱藏屬性,咱們能夠定義getter和setter接口來操做屬性

 1 class people():
 2 
 3     def __init__(self,age=1):
 4         self.set_age(age)
 5 
 6     #返回年齡
 7     def get_age(self):
 8         return self._age
 9     #設置年齡
10     def set_age(self,value):
11        if  value <= 0  or not isinstance(value,int) :
12            raise ValueError('請輸入大於0的整數')
13        self._age = value
14 
15 p = people(20)
16 print(p.get_age())
17 p.set_age(25)
18 print(p.get_age())

上面的代碼能夠實現需求,可是有一種更簡單的方式就是使用@property,使用@property的實現代碼

 1 class people():
 2 
 3     def __init__(self,age=1):
 4         self._age = age
 5     #在返回屬性的方法上,使用@property修飾符
 6     @property
 7     def age(self):
 8         return self._age
 9 
10     #在設置屬性的方法中使用 屬性.setter 修飾符
11     @age.setter
12     def age(self,value):
13        if  value <= 0  or not isinstance(value,int) :
14            raise ValueError('請輸入大於0的整數')
15        self._age = value
16 
17 p = people()
18 
19 p.age = 20 #和以前的 p.set_age(20) 是同樣的
20 print(p.age) #獲取屬性的值,和以前 p.get_age()的效果是同樣的
相關文章
相關標籤/搜索