(一)匿名函数

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

 def f(x):
return x*x #将匿名函数赋值给一个变量
result = lambda x:x*x print(result(5))
print(f(5))

通过输出可以看出, lambda x:x*x  实际上就是:

 def f(x):
return x*x

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

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

例1:

 def divisible(n):

     return n % 2 == 0
#这里解释下filter(function, iterable)函数,第一个参数为函数,第二个为序列
#序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
the_list =list( filter(divisible,range(20)))

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

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

例2:

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

 def f(x,y):

     return x+y

 l = lambda x,y: x + y

 print(f(1,3))
print(l(1,3))

(二)@property

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

 class people():

     def __init__(self,age=1):
self.age = age #通过下面p = people() p.age = 100,我们可以设置人的年龄 p = people()
p.age = 100
print(p.age)

现在有一个新需求,要求年龄只能输入大于0的整数。有一个解决方式就是隐藏属性,我们可以定义getter和setter接口来操作属性

 class people():

     def __init__(self,age=1):
self.set_age(age) #返回年龄
def get_age(self):
return self._age
#设置年龄
def set_age(self,value):
if value <= 0 or not isinstance(value,int) :
raise ValueError('请输入大于0的整数')
self._age = value p = people(20)
print(p.get_age())
p.set_age(25)
print(p.get_age())

上面的代码可以实现需求,但是有一种更简单的方式就是使用@property,使用@property的实现代码

 class people():

     def __init__(self,age=1):
self._age = age
#在返回属性的方法上,使用@property修饰符
@property
def age(self):
return self._age #在设置属性的方法中使用 属性.setter 修饰符
@age.setter
def age(self,value):
if value <= 0 or not isinstance(value,int) :
raise ValueError('请输入大于0的整数')
self._age = value p = people() p.age = 20 #和之前的 p.set_age(20) 是一样的
print(p.age) #获取属性的值,和之前 p.get_age()的效果是一样的

Python笔记(十五):匿名函数和@property的更多相关文章

  1. Python笔记(十一)_匿名函数与map()、filter()

    匿名函数 无需显式定义函数名,和函数过程,使代码更精简的lambda表达式 函数没有命名,不用担心函数名的冲突 冒号前面代表函数的参数,后面表示计算过程 >>>func=lambda ...

  2. Python笔记(十五)_异常处理

    try-except语句 try: 被检测代码 except Exception [as reason]: 出现异常后的处理代码 例: try: sum = 1+' f=open('未定义文件.txt ...

  3. python笔记十五(面向对象及其特性)

    一.面向对象: class(类):一类拥有共同属性对象的抽象:定义了这些对象的属性和方法object(对象):是一个类实例化后的实例,类必须经过实例化才可以在程序中调用: 由于之前学习过java,对类 ...

  4. Python学习笔记(十)匿名函数

    摘抄自:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431843456 ...

  5. Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块

    Python第十五天  datetime模块 time模块   thread模块  threading模块  Queue队列模块  multiprocessing模块  paramiko模块  fab ...

  6. python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)

    python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...

  7. 初学 Python(十五)——装饰器

    初学 Python(十五)--装饰器 初学 Python,主要整理一些学习到的知识点,这次是生成器. #-*- coding:utf-8 -*- import functools def curren ...

  8. 孤荷凌寒自学python第二十五天初识python的time模块

    孤荷凌寒自学python第二十五天python的time模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 通过对time模块添加引用,就可以使用python的time模块来进行相关的时间操 ...

  9. 孤荷凌寒自学python第十五天python循环控制语句

    孤荷凌寒自学python第十五天python循环控制语句 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) python中只有两种循环控制语句 一.while循环 while 条件判断式 1: ...

  10. 初学 Python(十三)——匿名函数

    初学 Python(十三)--匿名函数 初学 Python,主要整理一些学习到的知识点,这次是匿名函数. # -*- coding:utf-8 -*- #关键字lambda定义的函数都是匿名函数 #做 ...

随机推荐

  1. ionic3 实现扫码功能

    ionic3 通过插件phonegap-plugin-barcodescanner,调用机器硬件摄像头实现扫码功能. 首先当然先了解下 phonegap-plugin-barcodescanner,这 ...

  2. 浅谈canvas中的拖尾效果

    引言 很早就想了解以下 canvas 中的拖尾效果(如彗星,烟花等效果)是怎么实现的,但是一直没有深入了解,正巧在 codepen 上看到一个 demo,代码简单,效果炫酷,故有此文. 什么黑科技 在 ...

  3. Android UI(四)云通讯录项目之云端更新进度条实现

    作者:泥沙砖瓦浆木匠网站:http://blog.csdn.net/jeffli1993个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节.交流QQ群:[编程之美 365234583]h ...

  4. 在ASP.NET Core 2.2 中创建 Web API并结合Swagger

    一.创建 ASP.NET Core WebApi项目 二.添加 三. ----------------------------------------------------------- 一.创建项 ...

  5. Python 实现 KNN(K-近邻)算法

    一.概述 KNN(K-最近邻)算法是相对比较简单的机器学习算法之一,它主要用于对事物进行分类.用比较官方的话来说就是:给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例, ...

  6. CentOS docker 常用命令

    yum install docker 安装服务 systemctl start docker.service 启动服务 systemctl enable docker.service 开机启动服务 d ...

  7. spring boot面试问题集锦

    译文作者:david  原文链接:https://www.javainuse.com/spring/SpringBootInterviewQuestions Q: 什么是spring boot? A: ...

  8. python三大神器之virtualenv

    virtualenv virtualenv用来管理python项目环境,隔离出一个只属于这个项目的虚拟python环境(windows和Linux用法一样). 首先你需要安装virtualenv模块 ...

  9. C#对接----韵达开发平台--取电子面单

    引子 最近根据业务的一些需求,所以放弃从快递鸟对接去电子面单,转而直接对接韵达开发平台:http://open.yundasys.com/ ,中间踩了一些坑,借此做了一个小案例给大伙,瞅瞅,若有需改进 ...

  10. [android] activity横竖屏切换的生命周期

    模拟器横竖屏切换,ctrl+f11 界面activity会销毁,重新打开创建 第一种做法: 定死就是横屏 在清单文件,<activity/>节点部分,添加属性,设置屏幕朝向 android ...