Python是不是弱类型?如果是的话是不是仅仅因此就不需要泛型了?
回复内容:
请先理解以下基本概念:- python是强类型;
- 泛型是啥。
- Python 是强类型的
- Python 不需要泛型是因为 Python 的变量签名是动态的,有 lazy binding 效果。比如一个函数传入 connection 参数,然后函数中调用 connection.close() 。直到你调用这个函数的时候(运行期),虚拟机才会去查找 close 方法,而不是像静态类型语言一样在编译期或装载期就事先建立符号表。
一般的解释语言为了编程的灵活性,都没有类型声明。这是被变量都要声明类型的语言坑惨的程序汪的报复。比如说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>
官网有解答:http://docs.oracle.com/javase/tutorial/java/generics/why.html
总的来说,Generics根据这个解释,主要作用就是在编译期做类型检查+避免不必要的类型转换。
Python(2.x)的确切的类型信息本身要等到运行时才会暴露出来,自然编译期做类型检查也就没有意义了。 Duck Typing, C++ 式的编译期泛型和 Java Collection Framework 1.4 之前的基于接口的做法,目的相似,手段不同而已。
http://en.wikipedia.org/wiki/Duck_typing 因为Python是动态类型,所以天然就是支持泛型支持泛型的。但是动态类型语言,都自然支持泛型 python/ruby 都是强类型的……php是弱的 看了一些回答后,再次感叹python的确又是一个类似C++那般被国外再到国内被误解相当深的编程语言工具。
1. 为变量指定数据类型称为“强类型”,但此形式并不代表该编程语言类型系统一定更强大。Python有一个统一的、明确的、强大的类型系统,比Java的类型系统更强。
2. 见你这样问,显然对“泛型”的理解只是形式上的,建议你还是认真看看其定义和目的、意义:http://zh.wikipedia.org/zh-cn/%E6%B3%9B%E5%9E%8B。

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。 Python以简洁和强大的生态系统着称,C 则以高性能和底层控制能力闻名。

Python在游戏和GUI开发中表现出色。1)游戏开发使用Pygame,提供绘图、音频等功能,适合创建2D游戏。2)GUI开发可选择Tkinter或PyQt,Tkinter简单易用,PyQt功能丰富,适合专业开发。

Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。

2小时内可以学会Python的基本编程概念和技能。1.学习变量和数据类型,2.掌握控制流(条件语句和循环),3.理解函数的定义和使用,4.通过简单示例和代码片段快速上手Python编程。

要在有限的时间内最大化学习Python的效率,可以使用Python的datetime、time和schedule模块。1.datetime模块用于记录和规划学习时间。2.time模块帮助设置学习和休息时间。3.schedule模块自动化安排每周学习任务。

Python在开发效率上优于C ,但C 在执行性能上更高。1.Python的简洁语法和丰富库提高开发效率。2.C 的编译型特性和硬件控制提升执行性能。选择时需根据项目需求权衡开发速度与执行效率。

Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。

Python在web开发、数据科学、机器学习、自动化和脚本编写等领域有广泛应用。1)在web开发中,Django和Flask框架简化了开发过程。2)数据科学和机器学习领域,NumPy、Pandas、Scikit-learn和TensorFlow库提供了强大支持。3)自动化和脚本编写方面,Python适用于自动化测试和系统管理等任务。
