搜索
首页后端开发Python教程Python是不是弱类型?如果是的话是不是仅仅因此就不需要泛型了?

回复内容:

请先理解以下基本概念:
  1. python是强类型;
  2. 泛型是啥。
  • Python 是强类型的
  • Python 不需要泛型是因为 Python 的变量签名是动态的,有 lazy binding 效果。比如一个函数传入 connection 参数,然后函数中调用 connection.close() 。直到你调用这个函数的时候(运行期),虚拟机才会去查找 close 方法,而不是像静态类型语言一样在编译期或装载期就事先建立符号表。
一句话:泛型是一种类型声明的表达方法。Python不声明类型,所以你想找泛型也没处找去。跟强/弱类型和静态/动态都没有直接联系。

一般的解释语言为了编程的灵活性,都没有类型声明。这是被变量都要声明类型的语言坑惨的程序汪的报复。比如说Java,一屏幕代码,四分之一都是没啥信息量的局部变量类型声明,光看都要瞎了有没有。

但是类型声明还是有好处的啊,写Python的程序员肯定遇到过处理exception(比如连不上服务器)的代码里类型错误,结果程序写的时候好好的,跑的时间一长就类型错误,简直吐血三升有木有。有类型声明的话,写的时候就能发现错误了。

所以呢,解释语言的程序汪们就又往语言里加可选的类型声明了。比如Python有mypy,既有泛型又有duck-typing,简直左牵黄右擎苍啊。以后再也不要说我们解释语言不做类型检查了,是我们不爱做而已。
mypy - Optional Static Typing for Python “不需要泛型”和强/弱类型无关,另外一般认为Python是强类型

泛型属于多态的概念。广义的多态包括:Ad-hoc多态(函数重载),参数化多态(泛型),子类型多态。

泛型是指:函数的类型签名中可以包含类型变量,使用时类型变量会被静态地替换成具体类型,而针对不同具体类型的函数体是一模一样的。

如C++的template,T是类型变量
<span class="n">T</span> <span class="nf">max</span><span class="p">(</span><span class="n">T</span> <span class="n">x</span><span class="p">,</span> <span class="n">T</span> <span class="n">y</span><span class="p">)</span>
<span class="p">{</span>
    <span class="k">return</span> <span class="n">x</span> <span class="o"><</span> <span class="n">y</span> <span class="o">?</span> <span class="nl">y</span> <span class="p">:</span> <span class="n">x</span><span class="p">;</span>
<span class="p">}</span>
先来看看为啥Java需要Generics?
官网有解答:docs.oracle.com/javase/
总的来说,Generics根据这个解释,主要作用就是在编译期做类型检查+避免不必要的类型转换。
Python(2.x)的确切的类型信息本身要等到运行时才会暴露出来,自然编译期做类型检查也就没有意义了。 Duck Typing, C++ 式的编译期泛型和 Java Collection Framework 1.4 之前的基于接口的做法,目的相似,手段不同而已。
en.wikipedia.org/wiki/D 因为Python是动态类型,所以天然就是支持泛型支持泛型的。但是动态类型语言,都自然支持泛型 python/ruby 都是强类型的……php是弱的 看了一些回答后,再次感叹python的确又是一个类似C++那般被国外再到国内被误解相当深的编程语言工具。
1. 为变量指定数据类型称为“强类型”,但此形式并不代表该编程语言类型系统一定更强大。Python有一个统一的、明确的、强大的类型系统,比Java的类型系统更强。
2. 见你这样问,显然对“泛型”的理解只是形式上的,建议你还是认真看看其定义和目的、意义:zh.wikipedia.org/zh-cn/
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Python:深入研究汇编和解释Python:深入研究汇编和解释May 12, 2025 am 12:14 AM

pythonisehybridmodelofcompilationand interpretation:1)thepythoninterspretercompilesourcececodeintoplatform- interpententbybytecode.2)thepytythonvirtualmachine(pvm)thenexecuteCutestestestesteSteSteSteSteSteSthisByTecode,BelancingEaseofuseWithPerformance。

Python是一种解释或编译语言,为什么重要?Python是一种解释或编译语言,为什么重要?May 12, 2025 am 12:09 AM

pythonisbothinterpretedAndCompiled.1)它的compiledTobyTecodeForportabilityAcrosplatforms.2)bytecodeisthenInterpreted,允许fordingfordforderynamictynamictymictymictymictyandrapiddefupment,尽管Ititmaybeslowerthananeflowerthanancompiledcompiledlanguages。

对于python中的循环时循环与循环:解释了关键差异对于python中的循环时循环与循环:解释了关键差异May 12, 2025 am 12:08 AM

在您的知识之际,而foroopsareideal insinAdvance中,而WhileLoopSareBetterForsituations则youneedtoloopuntilaconditionismet

循环时:实用指南循环时:实用指南May 12, 2025 am 12:07 AM

ForboopSareSusedwhenthentheneMberofiterationsiskNownInAdvance,而WhileLoopSareSareDestrationsDepportonAcondition.1)ForloopSareIdealForiteratingOverSequencesLikelistSorarrays.2)whileLeleLooleSuitableApeableableableableableableforscenarioscenarioswhereTheLeTheLeTheLeTeLoopContinusunuesuntilaspecificiccificcificCondond

Python:它是真正的解释吗?揭穿神话Python:它是真正的解释吗?揭穿神话May 12, 2025 am 12:05 AM

pythonisnotpuroly interpred; itosisehybridablectofbytecodecompilationandruntimeinterpretation.1)PythonCompiLessourceceCeceDintobyTecode,whitsthenexecececected bytybytybythepythepythepythonvirtirtualmachine(pvm).2)

您可以使用Python中的循环加入列表吗?您可以使用Python中的循环加入列表吗?May 10, 2025 am 12:14 AM

是的,YouCanconCatenatElistsusingAloopInpyThon.1)使用eparateLoopsForeachListToAppendIteMstoaresultList.2)useanestedlooptoiterateOverMultipliplipliplipliplipliplipliplipliplipliplistforamoreConciseApprace.3)

condenate列表python:使用,扩展()等condenate列表python:使用,扩展()等May 10, 2025 am 12:12 AM

ThemostefficientmethodsforconcatenatinglistsinPythonare:1)theextend()methodforin-placemodification,2)itertools.chain()formemoryefficiencywithlargedatasets.Theextend()methodmodifiestheoriginallist,makingitmemory-efficientbutrequirescautionifpreserving

Python循环:示例和最佳实践Python循环:示例和最佳实践May 10, 2025 am 12:05 AM

pythonboopsincludeforandwhileloops,with forloopsidealforequencessand and whileloopsforcondition repetition.bestpracticesinvolve:1)使用listComprehensionsforshensionsforsimpletranspletransformations,2)obseringEnumerateForIndex-valuepairs,3)optingftingftingfortermornemoremoremoremore

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境