search
HomeBackend DevelopmentPython Tutorial如何用通俗易懂的语言解释《Flask 框架作者希望看到的 Python》到底在说什么?

原文:Flask 框架作者希望看到的 Python

Python 真的有这种「最大的设计错误」吗?难道 Python 设计者看不到?「槽(slots)系统」真的很糟糕吗?

回复内容:

作者吐槽了Python语言与CPython解释器结合得过于紧密。甚至有时候CPython解释器的某些实现成为了语言的一部分。
虽说有语言规范,但是大多数情况下,它只是规定了解释器要做什么,甚至连这些都没有规定。

Python的问题在文章的“该死的解释器”一节有了一个直接的解释:
解释器把这些类型结构体直接暴露给Python代码。

比如,你写了一个BigInteger类(只是举例子而已)
<span class="k">class</span> <span class="nc">BigInteger</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="o">...</span>
    <span class="k">def</span> <span class="nf">__add__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
        <span class="k">return</span> <span class="n">BigInteger</span><span class="p">(</span><span class="n">other</span><span class="o">.</span><span class="n">Value</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">Value</span><span class="p">)</span>
    <span class="o">...</span>
我认为作者的意思是,Python现在的发展模式是,公开搜集PEP,然后在现有基础上根据被采用的PEP打补丁,却几乎从来不对早起历史遗留下的解释器设计做调整和完善,并且几乎是针对CPython的。新特性越来越多,语言越来越复杂,老的问题一直没有改进,并且PSF致力于把一些历史遗留的烂设计解释成这是Python的哲学……与此同时,Python语言的文档其实是CPython的文档,于是乎其它实现,如Jython、PyPy、IronPython也不得不参照这些个奇怪的设计来做……

他举的例子,如slots的设计就是完全为了兼容了早期解释器把内置类型的一些方法而做的,以现在的角度来看完全没有必要……

再说GIL,如果按照python哲学,PSF说这么做更便于写C扩展什么的,说只需要一个解释器实体什么的,明明可以脱离GIL,并且别家也都这么做了,性能也确实能有很大改善,再说GIL带来的明显性能缺陷……没有任何道理把单解释器归到python哲学里……

大致如此吧…… 所以Python / Ruby这些编程语言基本上都是implement-driven而非specification-driven来设计的。

Ruby有过1.8到1.9的一次蜕变,整体上还算是好的。
当然你也会看到其他人在吐槽:Matz's Ruby Developers Don't Use RubySpec and It's Hurting Ruby 整篇文章的意思就是说:

Python明面上给了你一套标准,背地里自己老走后门;
操蛋的是,写得很多库之类的还特么依赖自己的后门儿,就算新来的,比如PyPy想走标准,也走不通了,最后也被迫走了后门;
更操蛋的是,他那个后门,开的也不是很高级,一堆缺陷。 首先,flask做的挺烂的,混乱的测试支持,没准的卡死问题。

然后,他提到的很多问题是框架设计层面的,比如slot,一般用户用不到,就算需要类似功能也可以有其他实现。

Python C层面确实很多问题,甚至我怀疑都不能算积重难返,而是故意拖延。Python3在几年前决定大规模重构,但很多核心问题还是扔在那里没动。比如GIL仍然是进程级的,而不是解释器级的。以当前状态看,如果有Python4的那天,肯定还是个不兼容的升级。

说说看而已,对正常的Python用户,这些讨论都没什么卵用。反正大家又用不上。 Slot 这一点没看出来有什么大不了的槽点,cpython 投机取巧又不是说别的解释器不能投机取巧了,无非就是语言规范散漫了点,比这更戳死人的槽点多了去了。
私以为,以 flask 那个样子,作者这种吐槽不用太当真,什么时候 bottle 作者也开始吐槽了再说吧。
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
Merging Lists in Python: Choosing the Right MethodMerging Lists in Python: Choosing the Right MethodMay 14, 2025 am 12:11 AM

TomergelistsinPython,youcanusethe operator,extendmethod,listcomprehension,oritertools.chain,eachwithspecificadvantages:1)The operatorissimplebutlessefficientforlargelists;2)extendismemory-efficientbutmodifiestheoriginallist;3)listcomprehensionoffersf

How to concatenate two lists in python 3?How to concatenate two lists in python 3?May 14, 2025 am 12:09 AM

In Python 3, two lists can be connected through a variety of methods: 1) Use operator, which is suitable for small lists, but is inefficient for large lists; 2) Use extend method, which is suitable for large lists, with high memory efficiency, but will modify the original list; 3) Use * operator, which is suitable for merging multiple lists, without modifying the original list; 4) Use itertools.chain, which is suitable for large data sets, with high memory efficiency.

Python concatenate list stringsPython concatenate list stringsMay 14, 2025 am 12:08 AM

Using the join() method is the most efficient way to connect strings from lists in Python. 1) Use the join() method to be efficient and easy to read. 2) The cycle uses operators inefficiently for large lists. 3) The combination of list comprehension and join() is suitable for scenarios that require conversion. 4) The reduce() method is suitable for other types of reductions, but is inefficient for string concatenation. The complete sentence ends.

Python execution, what is that?Python execution, what is that?May 14, 2025 am 12:06 AM

PythonexecutionistheprocessoftransformingPythoncodeintoexecutableinstructions.1)Theinterpreterreadsthecode,convertingitintobytecode,whichthePythonVirtualMachine(PVM)executes.2)TheGlobalInterpreterLock(GIL)managesthreadexecution,potentiallylimitingmul

Python: what are the key featuresPython: what are the key featuresMay 14, 2025 am 12:02 AM

Key features of Python include: 1. The syntax is concise and easy to understand, suitable for beginners; 2. Dynamic type system, improving development speed; 3. Rich standard library, supporting multiple tasks; 4. Strong community and ecosystem, providing extensive support; 5. Interpretation, suitable for scripting and rapid prototyping; 6. Multi-paradigm support, suitable for various programming styles.

Python: compiler or Interpreter?Python: compiler or Interpreter?May 13, 2025 am 12:10 AM

Python is an interpreted language, but it also includes the compilation process. 1) Python code is first compiled into bytecode. 2) Bytecode is interpreted and executed by Python virtual machine. 3) This hybrid mechanism makes Python both flexible and efficient, but not as fast as a fully compiled language.

Python For Loop vs While Loop: When to Use Which?Python For Loop vs While Loop: When to Use Which?May 13, 2025 am 12:07 AM

Useaforloopwheniteratingoverasequenceorforaspecificnumberoftimes;useawhileloopwhencontinuinguntilaconditionismet.Forloopsareidealforknownsequences,whilewhileloopssuitsituationswithundeterminediterations.

Python loops: The most common errorsPython loops: The most common errorsMay 13, 2025 am 12:07 AM

Pythonloopscanleadtoerrorslikeinfiniteloops,modifyinglistsduringiteration,off-by-oneerrors,zero-indexingissues,andnestedloopinefficiencies.Toavoidthese:1)Use'i

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

DVWA

DVWA

Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool