Python笔记(十五):匿名函数和@property
(一)匿名函数
不想显式定义函数的时候,可以使用匿名函数。
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的更多相关文章
- Python笔记(十一)_匿名函数与map()、filter()
匿名函数 无需显式定义函数名,和函数过程,使代码更精简的lambda表达式 函数没有命名,不用担心函数名的冲突 冒号前面代表函数的参数,后面表示计算过程 >>>func=lambda ...
- Python笔记(十五)_异常处理
try-except语句 try: 被检测代码 except Exception [as reason]: 出现异常后的处理代码 例: try: sum = 1+' f=open('未定义文件.txt ...
- python笔记十五(面向对象及其特性)
一.面向对象: class(类):一类拥有共同属性对象的抽象:定义了这些对象的属性和方法object(对象):是一个类实例化后的实例,类必须经过实例化才可以在程序中调用: 由于之前学习过java,对类 ...
- Python学习笔记(十)匿名函数
摘抄自:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431843456 ...
- Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块
Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fab ...
- python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...
- 初学 Python(十五)——装饰器
初学 Python(十五)--装饰器 初学 Python,主要整理一些学习到的知识点,这次是生成器. #-*- coding:utf-8 -*- import functools def curren ...
- 孤荷凌寒自学python第二十五天初识python的time模块
孤荷凌寒自学python第二十五天python的time模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 通过对time模块添加引用,就可以使用python的time模块来进行相关的时间操 ...
- 孤荷凌寒自学python第十五天python循环控制语句
孤荷凌寒自学python第十五天python循环控制语句 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) python中只有两种循环控制语句 一.while循环 while 条件判断式 1: ...
- 初学 Python(十三)——匿名函数
初学 Python(十三)--匿名函数 初学 Python,主要整理一些学习到的知识点,这次是匿名函数. # -*- coding:utf-8 -*- #关键字lambda定义的函数都是匿名函数 #做 ...
随机推荐
- mysql 开发基础系列9 存储引擎 MyISAM 介绍
MyISAM是mysql 默认存储引擎,它不支持事务,外键.但访问速度快,对事务完整性没有要求或者以select,insert 为主的应用基本上都可以使用这个引擎.每个MyISAM在磁盘上存储成3个文 ...
- 技术简历这样写,才能得到BAT面试官的青睐
公众号[程序员江湖] 作者陆小凤,985 软件硕士,阿里 Java 研发工程师,在技术校园招聘.自学编程.计算机考研等方面有丰富经验和独到见解,目前致力于分享程序员干货和学习经验,同时热衷于分享作为程 ...
- java-vip介绍
大叔Springboot+微服务+持续集成和交付VIP(价格:5000元) springboot部分 微服务部分 持久集成和交付部分 springboot部分 视频课(10讲) 项目源代码(api r ...
- 使用redis进行基于shiro的session集群共享
之前写过一篇nginx多tomcat负载均衡,主要记录了使用nginx对多个tomcat 进行负载均衡,其实进行负载均衡之前还有一个问题没有解决,那就是集群间的session共享,不然用户在登录网站之 ...
- [机器学习]梯度提升决策树--GBDT
概述 GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由 ...
- Dockerfile 中的 multi-stage(多阶段构建)
在应用了容器技术的软件开发过程中,控制容器镜像的大小可是一件费时费力的事情.如果我们构建的镜像既是编译软件的环境,又是软件最终的运行环境,这是很难控制镜像大小的.所以常见的配置模式为:分别为软件的编译 ...
- 第一册:lesson ninety one.
原文: Poor lan. Has lan sold his house yet? Yes,he has. He sold it last week. Has he moved to his new ...
- 结构型---桥接模式(Bridge Pattern)
定义 桥接模式即将抽象部分与实现部分脱耦,使它们可以独立变化.桥接模式的目的就是使两者分离,根据面向对象的封装变化的原则,我们可以把实现部分的变化封装到另外一个类中,这样的一个思路也就是桥接模式的实现 ...
- 数据库部分(MySql)_4
约束 约束:给表的字段名添加限制条件; 非空约束(not null):添加非空约束后,字段值不能为null: 唯一约束(unique):添加唯一约束后,字段值不能重复: 主键约束(primary ke ...
- oracle expdp自动备份脚本
windows: @echo off echo ================================================ echo Windows环境下Oracle数据库的自动 ...