(一)匿名函數函數
不想顯式定義函數的時候,能夠使用匿名函數。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()的效果是同樣的