Joe*_*Joe 5 python tuples wildcard pattern-matching iterable-unpacking
多年来,我注意到我遇到的各种各样的Python中的'通配符'变量.我认为它像Haskell一样工作:允许你在形式参数中放置一个变量,但不绑定它.
例如,当我不需要其中一个变量时,我已经将它用于元组解包赋值的左侧.
例如:
_, extension = os.path.splitext(filename)
Run Code Online (Sandbox Code Playgroud)
所以当我今天写下类似的东西时:
(lambda (x,_,_): x)((1,2,3))
Run Code Online (Sandbox Code Playgroud)
IE我尝试绑定下划线两次,我收到语法错误.我很惊讶地看到_确实是一个真正的变量:
(lambda (x,_,z): _)((1,2,3))
> 2
Run Code Online (Sandbox Code Playgroud)
看起来就像_一个变量名称一样.
是否有一个真正的通配符变量,我可以按照我的意愿使用(即在一个元组解包分配中能够使用多个),如第一个例子?
Python 中没有通配符变量。
我已经尝试劝阻人们不要将其用作_变量名有一段时间了。您不是第一个误认为_某种特殊语法的人,因此最好_根本不要用作变量名,以避免这种混乱。如果曾经有一个“约定”用作_一次性变量名称,那么这个约定就被误导了。
不仅仅是它造成的混乱,还有更多的问题。例如,与交互式解释器和常见的 gettext 别名_发生冲突。_
关于lambda表达式,我只是用来lambda x, *args: ...忽略除第一个参数之外的所有参数。在其他情况下,我会使用名称明确表明我不想使用它们,例如dummy. 在 s 循环的情况下range(),我通常使用for i in range(n)但不使用i。
编辑:我刚刚注意到(通过查看其他答案)您在参数列表中使用元组解包,因此lambda x, *args: ...不能解决您的问题。参数列表中的元组解包已在 Python 3.x 中删除,因为它被认为是一个过于晦涩的功能。最好选择mipadi 的答案。
| 归档时间: |
|
| 查看次数: |
12095 次 |
| 最近记录: |