我基本上是一个对python知之甚少的Java程序员。我非常喜欢python的语法和程序员能够轻松表达他的想法,但我也知道python是动态类型的,因此是没有Java快。我的问题是为什么python不能像scala这样的语言推断类型?
答案 0 :(得分:26)
不是Python不能,但事实并非如此。不同之处在于语言设计者选择遵循的类型系统。
Python使用duck typing并且有类型对象但是无类型的变量名。在编译时不检查类型约束;相反,对象上的操作可能会失败,表示给定的对象不是合适的类型。尽管是动态类型的,但Python是强类型的,禁止未明确定义的操作(例如,向字符串添加数字),而不是默默地尝试理解它们。
Scala是一种静态类型语言,即在编译时检查类型。本地类型推断机制注意不要求用户使用冗余类型信息来注释程序。破坏类型约束的操作会导致编译器错误,而不是运行时错误。另请参阅The Purpose of Scala's Type System,尤其是讨论鸭子类型的部分。
答案 1 :(得分:2)
Python不进行静态类型推断,因为它希望让你做一些在这种方案下不可能完成的事情。例如:
def myfn():
if random.random() > 0.5
return "howdy"
else:
return 7
x = myfn() # Am I a string or an integer?
x的类型应该是什么?
编辑:示例是:def myfn(x):
try:
return str(x[0]+1) + " is my favourite"
catch IndexError:
return x+1
myfn(1) # = 2
myfn( [2,4,6] ) # = "3 is my favourite"
答案 2 :(得分:-3)
Python是动态类型的,而类型推断只能在静态类型语言中使用。如果不删除对任意对象列表等功能的支持,就无法实现静态类型。