• Python笔记(十五):匿名函数和@property


    (一)匿名函数

    不想显式定义函数的时候,可以使用匿名函数。

    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  实际上就是:

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

     lambda关键字表示一个匿名函数,通过上面的对比可以看出冒号前面的x就是函数的参数,后面的表达式就是该匿名函数的返回值。

    匿名函数只有一个表达式,不需要写return,因为表达式的结果就是该匿名函数的返回值。

    例1:

    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)))

    使用匿名函数重写上面的代码:下面这个和上面的是一样的

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

    例2:

    匿名函数也可以定义多个参数

    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))

    (二)@property

     例如:现在有一个可以存储人类年龄的类

     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()的效果是一样的
  • 相关阅读:
    YZR.Data 事务处理(Tranaction)
    啊Ran讲微信开发(.net) :公众号(服务号)+自定义服务器(OAuth授权登录)
    啊Ran讲微信开发(.net) 目录结构
    啊Ran讲微信开发(.net) :公众号(订阅号)+自定义服务器(自定义菜单)
    js和jQuery的总结
    Javascript重要解析
    IntelliJ-项目配置,解决no artifacts的warnings
    农夫过河问题(java版)
    redis安装常见问题
    idea 项目中 maven 编译出错Fatal error compiling: 无效的目标发行版: 1.8 -> [Help 1] 解决方法
  • 原文地址:https://www.cnblogs.com/simple-free/p/9278744.html
Copyright © 2020-2023  润新知