当数据类型的函数参数出现时,为什么Python不是fexlibe?

时间:2017-07-04 11:53:41

标签: python type-conversion

这可能是一个糟糕的标题,但我的意思是:

由于Python是动态类型的,为什么某些函数坚持仅用于某些数据类型,如果有必要,不在内部处理转换?这会导致什么问题?

示例:

  

startswith():将strtuple作为参数。

  • 为什么不list 太?如果有充分的理由(这可能是 case),为什么不简单地在内部转换它们?
  

join():仅接受str个项目的容器。

  • 为什么不简单地执行[str(x) for x in whatever]

从语言的设计来看,到目前为止我的印象是它更注重灵活性而不是纯度,因此上述行为似乎是非典型的..

另一个例子来自@VPfB

  

" IPv4地址(主机,端口)必须是套接字库中的元组 - 而不是列表。"。

由于它们的不变性,是否可以选择元组?是否存在tuple被拒绝且只接受list的情况?最好是标准Python发行版及其模块的一部分。

2 个答案:

答案 0 :(得分:1)

  

从语言的设计来看,到目前为止我的印象是它更注重灵活性而不是纯度,因此上述行为似乎是非典型的。

你的印象是错误的。 Python是动态类型的,但也是强类型的,这意味着对象的类型总是固定的。如果您需要不同类型的对象,则必须以某种方式进行比较。

第二个问题是合法的,但这本来是可能的。但明确比隐含更好。

答案 1 :(得分:1)

Python 强烈动态类型化,这意味着对象具有明确的类型,并且必须显式执行转换。为什么,请考虑Zen of Python

  

明确比隐含更好。