Home > Article > Backend Development > Python语言是不是有设计缺陷?
看python写的源码,很多不知道类型到底是什么,亦不知道该调用什么方法,常用方法的返回值也不知道是什么类型,中文处理相当不好,乱码十分严重,为什么还有人推荐?
<code class="language-python"><span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="n">foo</span><span class="p">:</span> <span class="n">Foo</span><span class="p">)</span> <span class="o">-></span> <span class="n">Bar</span><span class="p">:</span>
<span class="n">Bar</span><span class="p">(</span><span class="n">foo</span><span class="p">)</span>
</code>
看到python缺陷笑了,还是来谈谈JavaScript吧,这门语言十(ni)分(ma)灵(keng)活(duo)
Python 作为动态类型的语言,使用的时“鸭子类型”的概念,即如果一个生物走起来像鸭子,叫起来像鸭子,他就是鸭子。对于Python编程来说,解释器不管你这个对象是什么类型,只管这个对象有没有对应的方法和属性。所以你希望他是什么类型,你就调用什么方法就行了,如果类型错误解释器会告诉你,你所调用的方法不存在。而可以使用"dir(obj)"这样的命令查看这个对象有什么方法和属性,当然也可以通过"type(obj)"来查看这个对象当前的类型。关于中文乱码,题主用的是Windows吧,Python默认编码是Unicode,*nix系统一般都是兼容的,而Windows用的是万恶的gbk编码, 如果需要统一文字编码,建议使用下面的程序转换编码:<code class="language-python"><span class="c"># 尝试将字符串转成utf-8的,如果失败转为gbk的</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">doc</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s">'utf-8'</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">UnicodeEncodeError</span><span class="p">:</span>
<span class="n">doc</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s">'gbk'</span><span class="p">,</span> <span class="s">'ignore'</span><span class="p">)</span>
</code>
Python确实有垃圾的地方,可是你问题描述里列的这些都不是:<code class="language-python"><span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
<span class="k">return</span> <span class="k">lambda</span> <span class="n">y</span><span class="p">:</span> <span class="n">x</span> <span class="o">+</span> <span class="n">y</span>
<span class="n">g</span> <span class="o">=</span> <span class="n">f</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span>
<span class="k">print</span> <span class="p">(</span><span class="n">g</span><span class="p">(</span><span class="mi">20</span><span class="p">))</span>
</code>
scala大法好
题主这种症状,动态语言赶紧灭退保,去写Java或者C#吧
前面你说的类型的问题,动态类型的语言都是这样,题主只学过C/C++/Java?