加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

在python列表理解中调用print

发布时间:2020-12-20 12:22:15 所属栏目:Python 来源:网络整理
导读:所以我试图推出一个我在这个网站上真正第一次听到的技巧. [i for i in range(0,10) if True or print(i)] 这个想法是你可以在listcomp的每一步调用一个任意函数,方法是将它放在一个总是返回True的“if”语句中.但该代码给出了语法错误. 如果我包装我想要这样
所以我试图推出一个我在这个网站上真正第一次听到的技巧.

[i for i in range(0,10) if True or print(i)]

这个想法是你可以在listcomp的每一步调用一个任意函数,方法是将它放在一个总是返回True的“if”语句中.但该代码给出了语法错误.

如果我包装我想要这样调用的函数,但是:

def f(i):
    print i

[i for i in range(0,10) if True or f(i)]

它产生所需的输出.所以我想知道,在Python的脑海中,两者之间有什么不同,因为我不知道它可能是什么 – 两个函数都返回“None”,对吧?

解决方法

您不能将语句(如Python 2中的print)与列表推导混合使用.

但是,您可以通过添加以下内容使print()成为一个函数:

from __future__ import print_function

在您的文件的顶部.这将print()转换为整个模??块的功能.

但是,您正在使用True或其他语句,并且永远不会评估’某事’,因为Python布尔表达式会短路.你想转过来:

if print(something) or True

如果左侧已经评估为True,那么评估一个或表达式的右侧是没有意义的;没有任何右侧可以提出的将使整个表达方式变得虚假,永远.

你真的想在列表理解中避免这种副作用.使用正确的循环并将这些惊喜从代码中删除,如果某些东西或True真的是一个混淆未来的代码维护者(包括你)的黑客.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读