相关疑难解决方法(0)

在lambda中自动元组解包的好等价python3是什么?

考虑以下python2代码

In [5]: points = [ (1,2), (2,3)]

In [6]: min(points, key=lambda (x, y): (x*x + y*y))
Out[6]: (1, 2)
Run Code Online (Sandbox Code Playgroud)

这在python3中不受支持,我必须执行以下操作:

>>> min(points, key=lambda p: p[0]*p[0] + p[1]*p[1])
(1, 2)
Run Code Online (Sandbox Code Playgroud)

这非常难看.如果lambda是一个函数,我可以做

def some_name_to_think_of(p):
  x, y = p
  return x*x + y*y
Run Code Online (Sandbox Code Playgroud)

在python3中删除此功能会强制代码执行丑陋的方式(使用魔术索引)或创建不必要的函数(最令人烦恼的部分是为这些不必要的函数考虑好名称)

我认为该功能至少应该添加到lambdas中.有没有好的选择?


更新:我正在使用以下助手扩展答案中的想法

def star(f):
  return lambda args: f(*args)

min(points, key=star(lambda x,y: (x*x + y*y))
Run Code Online (Sandbox Code Playgroud)

Update2:更清洁版star

import functools

def star(f):
    @functools.wraps(f):
    def f_inner(args):
        return f(*args)
    return f_inner
Run Code Online (Sandbox Code Playgroud)

python python-3.x

79
推荐指数
4
解决办法
3万
查看次数

使用生成器表达式而不是列表排序()

看到这里的讨论后:Python - 生成我很好奇的时差.我最初也认为生成器比列表更快,但是当谈到sorted()我不知道.将生成器表达式发送到sorted()而不是列表有什么好处?在排序之前,生成器表达式是否最终被放入sorted()中的列表?

编辑:让我感到悲伤的是只能接受一个答案,因为我觉得很多回复都有助于澄清这个问题.再次感谢大家.

python optimization

42
推荐指数
5
解决办法
2万
查看次数

标签 统计

python ×2

optimization ×1

python-3.x ×1