在工作中为一个项目学习了Python(这很酷,b/c现在我可以摆弄Anki了!)。总的来说,我很喜欢这门语言。没有Perl那么强大,虽然我还没有玩过它的库,但它似乎和Perl一样强大,而且思考更少。你知道吗
我最不喜欢的一件事是Python觉得它无法决定是过程的还是面向对象的。一个让我悲伤的例子就是印刷。例如,这会导致错误:
f = 5.0
print 'The value is ' + f
您需要显式地将f转换为字符串。或者求助于1969年以来最不面向对象的范例之一:
f = 5.0
print 'The value is %f' % f
这是怎么回事?我声称,如果Python不打印第一个代码段,那只是因为Python没有足够努力,而不是因为它做不到。也许它们只是一些数字,当被问到时,它们不知道如何返回它们的字符串化表示。Python当然会跟踪它们的类型。我知道这一点,因为类型(f)告诉我。那为什么不多跑一英里,帮我做些转换呢?如果我担心的是纳秒级的执行时间,我就不会首先使用Python。你知道吗
即使是面向对象的语言,如Perl或VB6,也可以用优雅的方式来表达。你知道吗
好的,对不起。我不是故意要说出来的。我真正想要的是寻求帮助。你知道吗
有没有一个库,也许是一些用户编写的代码,也许是一个包装器函数,它只允许我做这样的事情:
f = 5.0
g = (1, 2, 3)
h = [a, b, c]
print 'f: ' + ', ' + f + ', g: ' + g + ', h: ' + h
不用自己转换成字符串?我可以偷懒。我是个程序员。这是我与生俱来的权利。。。你知道吗
谢谢!你知道吗
你说的是隐式类型转换,它与面向对象编程毫无关系。每种范式都有包含或不包含隐式转换的语言,python就是一个明显的例子。你知道吗
问题是为什么。隐式转换可能很方便,但在某些条件下,它会带来意外行为的代价。This video突出了一些更幽默的。有些语言设计师觉得这种便利值得付出代价,有些则不然。这就是为什么我们有这么多语言。The Zen of Python将“显式优于隐式”列为其指导原则之一。你知道吗
在python中,您可以做的是创建一个函数来转换它的每个参数。事实上,许多内置函数已经可以这样工作了。例如,您可以执行以下操作:
您还可以使用python的函数端将一组不同的变量转换为字符串:
当然,您也可以创建自己的函数,使用
*args
和**kwargs
并对所有函数调用str()
。你知道吗你有很多很好的选择。不要抱怨,因为它们看起来不像你更习惯的另一种语言。你知道吗
下面的代码应该是您想要的。你知道吗
以下是输入和输出示例:
注意,函数也接受bools。你知道吗
如果这有帮助的话,不客气!你知道吗
不,没有库允许您连接字符串和数字。这正是由于Python面向对象方面的原因:加法的行为是由被添加对象的方法决定的,这些类被关闭以进行修改(尽管您继承了它们并重写了它们的方法,但您不能替换它们的方法)。你知道吗
这并不是完全错误的。”但“不够努力”是一种误导,请继续阅读。你知道吗
它清楚地知道:
some_number.__str__()
(尽管您通常会编写str(some_number)
)。你知道吗因为设计师们认为这样的隐式转换比它们的价值更麻烦。它使编码错误(例如忘记将数字输入从文本转换为实际的数字类型)默默地产生错误的结果。这也会导致初学者对数据的实际类型感到困惑。再加上一百万个小理由。你知道吗
我不知道你认为表演是怎么回事。隐式转换实际上可能更快,或者同样快。无论如何,这说明你为这个决定预设了如此愚蠢的理由。你知道吗
最后,这种行为对
print
来说没有什么特别的。在print
“上下文”中,加法的行为与其他任何地方完全相同,因为没有特殊情况,print
只接受一系列表达式,并在计算任何其他表达式时对它们进行计算。这在python3(或者使用from __future__ import print_function
)中是非常明显的,其中print
只是另一个内置函数。Python不会处理那些会影响参数计算的无意义函数。你知道吗相关问题 更多 >
编程相关推荐