Home  >  Article  >  Backend Development  >  Python语言是不是有设计缺陷?

Python语言是不是有设计缺陷?

WBOY
WBOYOriginal
2016-06-06 16:22:381249browse

看python写的源码,很多不知道类型到底是什么,亦不知道该调用什么方法,常用方法的返回值也不知道是什么类型,中文处理相当不好,乱码十分严重,为什么还有人推荐?

回复内容:

python3不是加function annotation了吗,用function annotation或isinstance方法,IDE都能找到可用的方法,实在不行还有REPL呢 这个问题下面的答案戾气好重... 不敢说话了...
只好祭出别人的文章, 大家不要喷我了, 我看不懂链接内的文字, 也不知道他在说啥... 我贴这个链接并不表示我赞同或反对这个链接里面的任何观点. 个人瑾保持独立乐观开放的心态对待python.
Python is ugly
Wit.io 对于问题本身,不知道类型是什么。

治标的方法是用 JetBrains PyCharm,有类型推导(注意要加类型标注)。

治本的方法是改用强类型静态类型的语言。比如我现在沉迷的 Rust 语言。

另外 Python 正考虑引入类型检查(mypy)[Python-ideas] Proposal: Use mypy syntax for function annotations。本身 Python 3 就支持类型注释。

<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确实有垃圾的地方,可是你问题描述里列的这些都不是:

看python写的源码,很多不知道类型到底是什么,亦不知道该调用什么方法,常用方法的返回值也不知道是什么类型,中文处理相当垃圾,乱码十分严重,浪费时间,为什么还有人推荐? 竟然这么多评论的,吓尿了。

其实这东西都是仁者见仁智者见智的,争来争去没什么意思,都是个人品味的东西,如果是bug早就被修复了。

大家可以去看 @徐酿泉的答案,从另一个角度来看这些问题。

顺便给大家安利一下,rust大法好,类型系统保平安。

==================================

LZ你喷python都喷不到点子上啊。

1. python号称是面向对象语言。

那让我们来看看list类:list.append(), list.count(), 嗯看起来很不错的样子。..... 但是,等一下! len(list) 什么鬼! consistence被狗吃了么。。 以为自己是STL的Algorithm库????

2. 命名风格不忍直视。

getstatusoutput ← 这是什么东西。。???

3. 闭包。

诶,python有lambda表达式诶,那有没有闭包呢? 让我们来试一下

<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?
中文乱码这个可以试试Python3.x

ps:我猜题主学了erlang/haskell之后会说连循环都没有,什么垃圾语言
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn