Python def语句中能否将for循环与return语句合并为单行书写?
代码4的单行实现
语法上完全可以实现,核心需要保证return语句在循环逻辑完全执行结束后再运行,避免出现代码2提前返回的问题,推荐写法如下:
def x(): [print(i) for i in range(3)]; return None
如果不想生成无意义的临时列表,也可以用生成器表达式替代:
def x(): any(print(i) for i in range(3)); return None
两种写法的运行逻辑和代码4完全一致。
带非None返回值的场景简化
这类循环加工后返回结果的场景支持更简洁的单行写法,直接用列表推导式替代显式的循环+append逻辑即可,你给出的示例可以压缩为如下单行代码:
def y(): return [i * 2 for i in range(3)]; print(y())
如果是更复杂的加工逻辑,也可以结合生成器表达式、map+lambda等写法实现单行压缩,上述示例也可以写为:
def y(): return list(map(lambda x: x*2, range(3))); print(y())
运行结果和原代码完全一致。
注意:上述所有单行写法仅符合Python语法规范,不符合PEP 8编码规范,可读性较差,仅适合临时调试场景使用,生产环境不建议使用。
内容的提问来源于stack exchange,提问作者J. SungHoon
相关产品推荐
相关产品推荐

