2024-10-03 09:09:19 发布
网友
在Python中,按照惯例,下划线(_)通常用于丢弃未打包元组的部分,如下所示
_
>>> tup = (1,2,3) >>> meaningfulVariableName,_,_ = tup >>> meaningfulVariableName 1
我也在尝试对lambda的元组参数做同样的处理。这似乎是不公平的,只能用2元组。。。在
你知道为什么吗?最好的方法是什么?在
通常最好使用列表理解,而不是lambdas:
lambda
some_list = [(1, 10, 100), (2, 20, 200), (3, 30, 300)] processed_list = [2 * x for x, dummy1, dummy2 in some_list]
如果你真的坚持,你可以用_代替dummy1和{}。但是,我建议不要这样做,因为我经常看到这会引起混乱。人们常常认为_是某种特殊的语法(例如在Haskell和Rust中),而它只是一些不寻常的变量名,没有任何特殊的属性。使用dummy1这样的名称完全可以避免这种混乱。而且,_与常见的gettext别名冲突,而且它在交互式解释器中也有特殊的意义,所以总体上我更喜欢使用dummy来避免所有的混淆。在
dummy1
dummy
正如在评论中所说的,只需使用盯着的论点 要在“u”中抛出剩余的参数:
lambda x, *_: x*2
如果您在map语句中使用这些语句,因为Python不会将元组中的每个项映射到不同的参数,那么可以使用itertools.starmap,这样做:
map
itertools.starmap
但是在sort或sorted的关键参数上没有等价的方法。在
sort
sorted
如果不在元组中间使用参数, 只需编号:
如果您收到来自某个linter工具的关于未使用的参数的投诉:linter的目的是建议mor可读的代码。我个人的偏好是不让它影响实践性,如果发生这种情况,我会毫不犹豫地关闭这行代码的连接。在
否则,你就真的要做“美丽”的事情了——如果是为了取悦你和你的团队,或者仅仅为了取悦皮匠,你就要用理智。在本例中,它是编写一个完整的函数,并假装 使用未使用的参数。在
def my_otherwise_lambda(x, unused_1, unused_2, w): """My make linter-happy docstring here""" unused_1, unused_2 # Use the unused variables return 2 * x + w
除了linter有问题外,其目的是使lambda参数可读,那么无论如何,建议使用一个完整的函数。lambda为了保证可读性,在v.3.0中几乎要被剥离。在
最后,但并非最不重要的是,如果元组中值的语义有意义,也许您应该考虑使用一个类来保存其中的值。通过这种方式,您只需将该类的实例传递给lambda函数,然后通过它们各自的名称检查值。在
Namedtuple是一种可以很好地工作的方法: 从集合导入namedtuple
vector = namedtuple("vector", "x y z") mydata = [(1,10,100), (2,20,200), (3,30,300)] mydata = [vector(*v) for v in mydata] sorted_data = sorted(mydata, lambda v: v.x * 2)
元组在Python中是不可变的,因此您不能“丢弃”(修改)无关的值。在
另外,由于您不关心这些值是什么,所以完全没有必要将它们分配给变量。在
我要做的是,在您感兴趣的索引处简单地索引元组,如下所示:
>>> list(map(lambda x: x[0] * 2, [(1,10,100), (2,20,200), (3,30,300)])) [2, 4, 6]
不需要*args或伪变量。在
*args
通常最好使用列表理解,而不是
lambda
s:如果你真的坚持,你可以用}。但是,我建议不要这样做,因为我经常看到这会引起混乱。人们常常认为
_
代替dummy1
和{_
是某种特殊的语法(例如在Haskell和Rust中),而它只是一些不寻常的变量名,没有任何特殊的属性。使用dummy1
这样的名称完全可以避免这种混乱。而且,_
与常见的gettext别名冲突,而且它在交互式解释器中也有特殊的意义,所以总体上我更喜欢使用dummy
来避免所有的混淆。在正如在评论中所说的,只需使用盯着的论点 要在“u”中抛出剩余的参数:
如果您在
^{pr2}$map
语句中使用这些语句,因为Python不会将元组中的每个项映射到不同的参数,那么可以使用itertools.starmap
,这样做:但是在
sort
或sorted
的关键参数上没有等价的方法。在如果不在元组中间使用参数, 只需编号:
^{3}$如果您收到来自某个linter工具的关于未使用的参数的投诉:linter的目的是建议mor可读的代码。我个人的偏好是不让它影响实践性,如果发生这种情况,我会毫不犹豫地关闭这行代码的连接。在
否则,你就真的要做“美丽”的事情了——如果是为了取悦你和你的团队,或者仅仅为了取悦皮匠,你就要用理智。在本例中,它是编写一个完整的函数,并假装 使用未使用的参数。在
除了linter有问题外,其目的是使lambda参数可读,那么无论如何,建议使用一个完整的函数。
lambda
为了保证可读性,在v.3.0中几乎要被剥离。在最后,但并非最不重要的是,如果元组中值的语义有意义,也许您应该考虑使用一个类来保存其中的值。通过这种方式,您只需将该类的实例传递给lambda函数,然后通过它们各自的名称检查值。在
Namedtuple是一种可以很好地工作的方法: 从集合导入namedtuple
元组在Python中是不可变的,因此您不能“丢弃”(修改)无关的值。在
另外,由于您不关心这些值是什么,所以完全没有必要将它们分配给变量。在
我要做的是,在您感兴趣的索引处简单地索引元组,如下所示:
不需要
*args
或伪变量。在相关问题 更多 >
编程相关推荐