python 强/弱动态/静态类型语言?

标签 python types strong-typing

<分区>

我了解到 Python 是一种强动态类型的语言。
动态:变量的类型在执行时确定,而不是在编译时确定。对于这部分,我可以理解类型是在将值(当然是类型)分配给变量时确定的。

strong:您不能更改变量的类型。 但这不是真实情况:

>>> a = 1
>>> type(a)
<type 'int'>
>>> a = 's'
>>> type(a)
<type 'str'> 

从上面的代码中,我可以将变量 a 的类型从 int 更改为 str
这怎么会发生?我能说 Python 是弱类型语言吗?


编辑:

如果您能给我一个代码片段,说明强动态类型如何影响 Python 编程,我将不胜感激! 在我平时的编码过程中,我从不关心strong-dynamic typing 问题。它也很少影响我的代码功能。奇怪!


编辑:
答案的结论:

  1. 只有对象/值有类型属性。变量没有类型。
  2. (Strong) 类型决定了可以执行什么操作 在对象/值(可能是引用它们的变量)之上/之间。
  3. (动态)类型意味着变量只是一个标签(引用 对象/值)。此标签可以引用任何类型的任何对象/值。

最佳答案

关键是无论你对它做什么,一个对象都会保留它的类型。 int 是 int 是 int;海峡是海峡; float 是一个 float 。在弱类型语言中,你可以做类似的事情

i = "1" 
j = i + 2

并得到 j == 3。在 python 中,你得到

TypeError: cannot concatenate 'str' and 'int' objects

str 始终是 str,即使字符串包含数字,也不能将其视为 int。

试试这个:

for a in {1, 'abc', 3.14159}:
    print a
    print type(a)

会产生

3.14159
<type 'float'>
1
<type 'int'>
abc
<type 'str'>

单个变量可以设置为引用任何类型的对象 - 这是它的“动态”部分。但无论您如何引用它,该对象始终属于同一类型 - 这就是它的“强大”部分。

关于python 强/弱动态/静态类型语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21131553/

相关文章:

python - 为什么 Django testrunner 找不到我创建的测试?

string - 如何检查给定变量值是否为字符串类型

java - "Foo".equals(maybeFoo) 和 MaybeFoo==null 之间有什么区别? false :maybeFoo. 等于 ("Foo")?

events - bbvEventBroker 强类型且没有魔法字符串

strong-typing - 强类型语言的关键方面是什么?

python - 如何将魔术函数(如 %hist)的输出保存到文本文件中?

python - 索引错误,csv 文件

python - QThread.isFinished 在连接到 finished() 信号的插槽中返回 False

Typescript 父类对子类的类型保护

具有任意最小长度 N 的 TypeScript 数组,可以很大