在python 3.8中实现namedexpressions到旧版本python的非常小的库。
namedassignments的Python项目详细描述
名称分配
named assignments是我为自己开发的一个库,用于在python<;=3.7项目中使用命名赋值。
什么是指定作业?
实际上我甚至不知道该怎么称呼他们,但这是我为他们找到的最好的名字。如果您已经阅读了PEP 572,那么python 3.8中会出现一个名为命名表达式的新操作符,它可以帮助您编写更干净、更短的代码。
但是怎么做呢?
对于原始示例,您可以直接检查PEP 572 examples,但如果您正在查找此库,则可能没有使用Python3.8,因此请留在这里继续阅读。
缓存计算开销较大的计算(这绝对是计算开销较大的一个坏例子,但让我们像这样行事)
旧方式:
# Makes two addition every timestrange_list=[[x+1,x/(x+1)]forxinrange(5)]
改进:
# Makes only one addition every timestrange_list=[[N('y',lambda:x+1),x/N.y]forxinrange(5)]
while循环中的用法
旧方式:
# conn is a accepted socket connectionwhileTrue:data=conn.recv(1024)ifnotdata:breakconn.sendall(data)
改进:
# conn is a accepted socket connectionwhileN('data',conn.recv,1024):conn.sendall(N.data)
用法
由于局限性,使用方法并不像原来那样干净,但它是我发现的最干净的方法。
fromnamedassignmentsimportNamedAssignmentsasNN(variable_name,function,*args,**kwargs)
安装
库在pypi上可用,因此只需运行
pip install namedassignments
API
因为整个代码只有5行,所以没有太多。library使用python的魔术方法__new__
返回函数返回的内容这是library在后台所做的一切。
__new__
参数:variable_name
:检索数据时要使用的变量名。(字符串)(必需)function
:要执行的函数。(功能)(必需)*args
:要传递函数的参数。(列表)(可选)**kwargs
:要传递函数的关键字参数。(dict)(可选)