对Python匿名函数和@property小小理解,希望对你学习也有帮助

枫铃3年前 (2021-10-03)Python233

1.匿名函数

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

def f(x):
    return x*x

#将匿名函数赋值给一个变量
result = lambda x:x*x

print(result(5))
print(f(5))

输出:

25
25

通过输出可以看出, 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))

输出

4
4

2.@property

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

class people():

    def __init__(self,age=1):
        self.age = age

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

p = people()
p.age = 100
print(p.age)

输出

100

现在有一个新需求,要求年龄只能输入大于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())

输出:

20
25

上面的代码可以实现需求,但是有一种更简单的方式就是使用@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()的效果是一样的

输出

20

学会了吗?不会关系,小编创建了一个Python学习交流QQ群:531509025,群里有大量基础入门知识,都是从零开始的,群里还有专业的人给你解答问题。寻找有志同道合的小伙伴,互帮互助,群里还有不错PDF电子书!

相关文章

利用python同步windows和linux文件

写python脚本的初衷,每次在windows编辑完文件后,想同步到linux上去,只能够登录服务器,...

爬虫基本原理

爬虫基本原理 一、爬虫是什么? 百度百科和维基百科对网络爬虫的定义:简单来说爬虫就是抓取目标网站内容的工具,一般是根据定义的行...

Django 函数和方法的区别

函数和方法的区别 1、函数要手动传self,方法不用传 2、如果是一个函数,用类名去调用,如果是一个方法...

Django 知识补漏单例模式

单例模式:(说白了就是)创建一个类的实例。在 Python 中,我们可以用多种方法来实现单例模式&#x...

Django基础知识MTV

Django简介 Django是使用Python编写的一个开源Web框架。可以用它来快速搭建一个高性能的网站。 Django也是一个MVC框架。但是在Dj...

Python mysql 索引原理与慢查询优化

一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。