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,因为它更具可读性?
功能不仅更具可读性,而且可重复使用.
内联表达式可能会调用c.find('@')两次,效率很低.
正如Useless在评论中提到的那样,已经有内置函数来执行此操作; 在这种情况下,你真的不需要定义自己的函数:
agent,_,address = c.partition('@')
Run Code Online (Sandbox Code Playgroud)
顺便说一下,回调是一个作为参数传递并稍后调用的函数.您没有回调,因为它以后没有被调用.我认为它应该被称为一个函数.
| 归档时间: |
|
| 查看次数: |
399 次 |
| 最近记录: |