【问题标题】:how to repeat / expand expressions in python如何在python中重复/扩展表达式
【发布时间】:2017-01-08 22:48:09
【问题描述】:

在 Python 中重复表达式的最 Pythonic 方式是什么。

上下文:一个函数正在传递一个字典(可能有 20 个元素),我需要从这个字典中提取和使用值如果它们存在。像这样的:

x = dict_name['key1'] if dict_name['key1'] else ''

现在,我不想为所有 20 个不同的键编写这个逻辑 20 次,而是想在一个地方定义这个表达式,然后重复使用它。以后会更容易维护。在“C/C++”编程语言中,它是#defineinline 函数的一个很好的例子。在 Python 中执行此操作的 Pythonic 方式是什么?

如您所料,我是 Python 新手。因此,我感谢您对此提供的帮助或在 Python 中为此构造的指针。

【问题讨论】:

  • 这应该是 lambda 函数的用例吗?
  • get_val = lambda key: dict_name.get(key, '')
  • 这就是函数的用途。
  • @shravster 如果要将 lambda 函数分配给名称,不妨改用 def
  • 为什么dict_name.get('key1', '') 不够用?

标签: python inline


【解决方案1】:

在 Python 中是否存在与 inline 的“等价物”取决于您询问的对象以及您检查的内容。

对于没有等价物,例如:https://stackoverflow.com/a/6442497/2707864

对于等价物,例如:https://www.safaribooksonline.com/library/view/python-cookbook-3rd/9781449357337/ch07s06.html

从实际的角度来看,lambda 可以解决问题(dict.get 替换您的三元条件运算符)

dict_get = lambda key : dict_name.get(key, '')

或者你总是可以定义一个单行函数。

def dict_get( key ) : dict_name.get( key, '' )

Pythonicity 通常(总是?)是主观的。

【讨论】:

  • 从某种意义上说,将 lambda 函数分配给名称与 PEP8 不符,它不是 Pythonic。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-21
  • 1970-01-01
  • 1970-01-01
  • 2015-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多