社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python-3.14 持续增强中的函数式编程

Python猫 • 6 月前 • 227 次点击  

背景

应该是在 Python 这条道上混的久了,总能不经意间看到一些水面之下的东西。就比如 3.14 版本的 operator 模块增加了下面这样的两个函数。change-log 是这样写的

Two new functions operator.is_none and operator.is_not_none have been added, such that operator.is_none(obj) is equivalent to obj is None and operator.is_not_none(obj) is equivalent to obj is not None. (Contributed by Raymond Hettinger and Nico Mexis in gh-115808.)

实现如下

def is_none(a):    "Same as a is None."    return a is None
def is_not_none(a): "Same as a is not None." return a is not None

新手一定会认为,就这都能上 change-log 太水了。然而对于我这种几年前自己亲自实现过这类型函数的人来说,太亲切了。



讲一下 None 以前是怎么坑的我

以前我们有一个程序去监控 MySQL 的延时,当延时大于 100 秒的时候打告警电话,伪代码是这样的。

status = get_replication_lag(host, port, user, password)if status.seconds_behind_master > 100:    call_dba()

这段逻辑确实是可以发现延时,但是数据备机的复制异常了,这个时候 MySQL 返回的 seconds_behind_master 会是 None ,当我们执行 None > 100 的检查时这段程序就会报异常。

None 值的判断对于程序鲁棒性还是非常重要的



官方这次更新的用意

假设我们有一个需求就是要把列表中的 None 值过虑出来。一般来说一个列表推导就行了,按面向过程的写法应该是这样的。

numbers = [1, 2, None, 3, 5]numbers_exclude_none = [num for num in numbers if num is not None]

面向过程确实不太好理解语义,如果我们要是用函数式编程,逻辑就一目了然了。

def is_not_none(a):    return a is not None
numbers_exclude_none = filter(is_not_none, numbers)


现在我们可以看到 is_not_none 的用处了。也就说如果你也使用函数式编程,你大概率写过一堆的真假值测试函数,官方的这次更新就只把常用的比较函数,实现在标准库里,一来大家都方便,二来实现上也统一,还是有一些用的。



结论

社区在函数式编程方式不只是搭了个架子,一些边边角角的工具还是有在增强的。

以上是今天的分享,最后提醒一下:Python 潮流周刊限时特惠,原价 128 元/年,限时仅需 99 元/年,欲购从速啦!

如果你正在寻找优质的Python文章和项目,我必须向你推荐🎁Python潮流周刊🎁!

它精选全网的优秀文章、教程、开源项目、软件工具、播客、视频、热门话题等丰富内容,让你紧跟技术最前沿,获取最新的第一手学习资料!

欢迎点击下方图片,了解这份全世界知识密度最高、知识广度最大的 Python 技术周刊。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/175413
 
227 次点击