符合条件表达式或函数 - Pythonic?

Raz*_*Raz 3 python coding-style ternary-operator conditional-expressions

我有一种情况,我想有条件地从报告的'@'符号位置切片一个字符串; 条件是:如果'@'在那里,则对字符串进行切片,否则保持不变.我想到了两种方法,一种是使用函数,另一种是使用内联条件表达式.哪种方法最Pythonic?

使用功能

>>> def slice_from_at(inp):
...     res = inp.find('@')
...     if res == -1:
...         return None
...     else:
...         return res     
>>> c = 'agent_address@agent_address'
>>> c[:slice_from_at(c)]
... 'agent_address'
Run Code Online (Sandbox Code Playgroud)

使用内联条件表达式

>>> c = 'agent_address@agent_address'
>>> c[:None if c.find('@') == -1 else c.find('@')]
... 'agent_address'
Run Code Online (Sandbox Code Playgroud)

虽然使用内联条件表达式更简洁,但有些人可能认为更经济 - 函数方法更具Pythonic,因为它更具可读性?

unu*_*tbu 5

功能不仅更具可读性,而且可重复使用.

内联表达式可能会调用c.find('@')两次,效率很低.

正如Useless在评论中提到的那样,已经有内置函数来执行此操作; 在这种情况下,你真的不需要定义自己的函数:

agent,_,address = c.partition('@')
Run Code Online (Sandbox Code Playgroud)

顺便说一下,回调是一个作为参数传递并稍后调用的函数.您没有回调,因为它以后没有被调用.我认为它应该被称为一个函数.