怎么总有人说python是弱类型语言呢??

2013-02-27 22:10:57 +08:00
 crossmaya
python是动态脚本语言

python is not vbscript

我想说的就这么多.....
24897 次点击
所在节点    Python
42 条回复
bhuztez
2013-02-27 22:13:22 +08:00
因为他们不懂强类型弱类型和静态类型动态类型有啥区别

其实Python大部分时候是强类型语言,有那么几个角落有那么点弱类型
binux
2013-02-27 22:15:49 +08:00
他们想的弱类型和你想的弱类型不一样罢了
jybox
2013-02-27 22:19:50 +08:00
还有人说C是弱类型语言呢~
xavierskip
2013-02-27 22:30:00 +08:00
确实应该是动态类型,而不是弱类型。
qinix
2013-02-27 22:34:01 +08:00
@jybox C不就是静态弱类型语言么?
RisingV
2013-02-27 22:37:45 +08:00
@qinix 如果从这样一个角度看:都是整数和浮点数,就是长度不一样。貌似还真是成立的,哈哈
cai314494687
2013-02-28 10:52:00 +08:00
变量不需要声明为特定的数据类型的语言就是弱语言。
LTaoist
2013-02-28 11:03:37 +08:00
C是典型的静态类型弱类型语言。python是典型的动态类型强类型语言。

静态类型动态类型说的是变量的类型十分可以改变。针对的是变量的类型。
弱类型强类型值得是变量的具体的值是否是有固定的类型的,是否可以改变。

C的变量是不可以改变类型的,所以是强类型。但是强制类型转换可以发生,一个整数可以强制解读为浮点数,等等,所以是弱类型的。python的变量可以改变类型,是动态类型的。但是其绑定的实体是不会改变类型的,即使是把dict转换为list,参与的其实是两个值的实体了,没有发生真正的类型转换。

大部分动态类型的语言都是强类型的,只有C这种接近底层的语言才比较容易是弱类型。

应该是这样吧?
keakon
2013-02-28 11:23:21 +08:00
@cai314494687
没有弱语言这种玩意。
弱类型语言是指变量的类型可以被隐式转换。而 Python 不允许,所以它是强类型语言。
这里有个例子: http://www.zhihu.com/question/20224705/answer/14394999
haohaolee
2013-02-28 11:27:14 +08:00
没有绝对的弱与强,只有比较,才能说谁更弱谁更强
yegle
2013-02-28 11:31:08 +08:00
不是说只要存在隐式类型转换的语言就是动态语言么笑…
aisk
2013-02-28 11:31:23 +08:00
强/弱类型区分已经没那么明显了,说Python是强类型,但是他有的时候还是会偷偷的给你做隐式类型转换。本来这个定义就是先有语言实现,再有后来的人给划分,非要分类总是还会有争议的。


@cai314494687 这种说法完全不正确,像Haskell或者go等等有类型推导的语言,很多情况也不需要你声明变量类型,但是变量的类型确实是在运行时前就确定的了,其实是编译器做了这部分工作。


@LTaoist 你自己说的矛盾了啊。。。你的观点c是强类型还是弱类型?而且现在很多人认为js是弱类型的啊,这个和是否动态语言/是否接近底层没关系。
xuc
2013-02-28 11:42:11 +08:00
@LTaoist 是不是笔误了?
BOYPT
2013-02-28 12:56:54 +08:00
因为这么说的人就不知道什么叫弱类型。我接触过的语言里面只有php和javascript有弱语言特性:

1000 == "1000"

而且因为这种特性经常被人诟病,绝大多数情况都要写成 === 恒等。
FrankHB
2013-02-28 13:05:20 +08:00
C是强类型的,只不过不怎么彻底。C的弱类型一面表现在有限的compatible type允许省略部分类型限制而不是随便什么转换(要说转换,反而正好说明强类型的,因为除了UB外的操作意义明确且都不会导致类型错误)。至于所谓强制(coercion)根本就不是C的概念。
http://tieba.baidu.com/p/1398718411?pid=17001826896&cid=0#17001826896
ooscrewyou
2013-02-28 15:02:24 +08:00
看了下Wikipeadia把Python歸爲強類型語言
The object-oriented programming languages Smalltalk, Ruby, Python, and Self are all "strongly typed" in the sense that typing errors are prevented at runtime and they do little implicit type conversion, but these languages make no use of static type checking: the compiler does not check or enforce type constraint rules.
不過strong typed是打引號的。
Python裏面
>>> 1 == 1.0
True
>>> 1 + 1.1
2.1
ML系的帶類型推倒的靜態語言是嚴格區分整數和浮點數的
# 1 + 1.;;
Error: This expression has type float but an expression was expected of type
int
不過樓主說Python是腳本語言是不對的,只要你願意,完全可以寫一個Python編譯器出來。沒有腳本語言的說法,只是說某個語言的實現是腳本運行的。
crossmaya
2013-02-28 20:32:32 +08:00
膜拜大神们 学习了.
seeker
2013-02-28 23:59:53 +08:00
@aisk 强弱类型的概念的确不是很确切,也难以划分,不像动态/静态。@LTaoist 应该是笔误了,c/c++弱爆了类型。
reusFork
2013-03-01 09:30:49 +08:00
类型的强弱是没有明确的边界的,所以存在两可的区域,争论这个没有多大意义
静态类型和动态类型就有明确的区分边界
aisk
2013-03-01 10:12:24 +08:00
@seeker 我觉得动态静态划分界限都越来越模糊了,比如Java现在都大量使用接口来增加代码的动态性

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/61513

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX