标签: zen-of-python

如何在Python中打印到stderr?

有几种方法可以写入stderr:

# Note: this first one does not work in Python 3
print >> sys.stderr, "spam"

sys.stderr.write("spam\n")

os.write(2, b"spam\n")

from __future__ import print_function
print("spam", file=sys.stderr)
Run Code Online (Sandbox Code Playgroud)

这似乎与Python#13 †的禅宗相矛盾,那么这里有什么区别,这种方式有哪些优点或缺点?应该使用哪种方式?

应该有一个 - 最好只有一个 - 显而易见的方法.

python printing stderr zen-of-python

1246
推荐指数
13
解决办法
77万
查看次数

为什么Python将元组,列表,集合和字典视为根本不同的东西?

我喜欢Python的原因之一是由元组,列表,集合和字典提供的表达能力/减少编程工作.一旦你理解了列表理解和一些使用IN和FOR的基本模式,生活就会变得更好!Python摇滚.

但是我确实想知道为什么这些结构会被视为不同,以及随着时间的推移它会如何变化(变得陌生).回到Python 2.x,我本可以提出一个论点,它们只是基本集合类型的变体,并且有些令人恼火的是,一些非常外用例需要您将字典转换为列表并再次返回.(字典不仅仅是具有特定唯一性约束的元组列表吗?列表不是仅具有不同类型的唯一性约束的集合吗?).

现在在3.x世界中,它变得更加复杂.现在有名为元组 - 开始感觉更像是一个特例字典.现在有订单的词典 - 开始感觉更像是一个列表.我刚看到有序套装的配方.我可以想象一下这个......还有什么独特的清单等等.

Python的禅宗说"应该有一个 - 最好只有一个 - 明显的方式".在我看来,这种专门的集合类型的大量与这个Python规则相冲突.

硬核Pythonistas的想法是什么?

python collections language-design zen-of-python

23
推荐指数
2
解决办法
4487
查看次数

关于条件表达式的语句

遵循"武士原则",我试图在我的功能上做这个,但似乎是错的......

return <value> if <bool> else raise <exception>
Run Code Online (Sandbox Code Playgroud)

有没有其他"美丽"的方式来做到这一点?谢谢

python conditional exception raise zen-of-python

23
推荐指数
2
解决办法
1万
查看次数

Python的禅与声明 - 哲学思考

我不打算简单地浪费你的时间,但是:它是否也发生在你身上,而使用Python的with声明,它确实与"禅宗的Python"的第5行相反,"扁平比嵌套好"?任何开明的Python大师能否与我分享他们对此的一些见解?

(我总是发现每次使用时我的代码中都会出现一个更多级别的缩进with而不是f.close()......并且它不会像我不会try: ... finally: ...反正使用那样因此with我仍然无法获益,即使我渐渐喜欢并越来越多地了解Python ...)


@glglgl(对不起,我找不到在评论中编写代码的方法):是的,但如果with顺便说一下,你的代码就会变成:

try:
    with file(...) as f:
        ...
except IOError:
    ...
Run Code Online (Sandbox Code Playgroud)

...并且只使用没有这try是人们最终做的hacky"一次使用"代码,他们使用f.close()而不是反正(这是不好的,因为如果在他们之前抛出异常,文件可能不会被关闭f.close()),所以对于"hacky"代码,人们只是不使用with因为,我不知道,我猜他们只是发现它太"花哨"而且对于结构良好的代码它不会带来任何好处,所以它似乎我没有真正的世界用例...这是我真正的思考.

python coding-style indentation with-statement zen-of-python

10
推荐指数
3
解决办法
1051
查看次数

Python Zen - (仅)一种方法

这个问题可能听起来很主观,但正如"禅宗"所说的那样,(几乎总是)有一种方式可以优先考虑,最后不应该是主观的.

什么方式更好?

[i.something() for i in l]
map(operator.methodcaller('something'), l)
map(lambda x: x.something(), l)
Run Code Online (Sandbox Code Playgroud)

(1)是(IMO)非常清楚,但在很多答案中,map()都是使用的.如果我们这样做,(2)和(3)之间的可读性几乎相同(IMO,至少).

许多其他任务同样重要,但我选择了这个,因为它可以代表所有类似的任务.

python zen-of-python

10
推荐指数
1
解决办法
1178
查看次数