拥有多种数据类型的好处是什么?

3 投票
5 回答
6039 浏览
提问于 2025-04-17 09:18

使用多种不同的数据类型有什么好处呢?我最近在使用pyqt和pyqwt,发现自己经常要写这样的代码:

grid.setPen(Qt.QPen(Qt.Qt.gray, 0, Qt.Qt.DotLine))
curve.setSymbol(Qwt.QwtSymbol(Qwt.QwtSymbol.Ellipse,
                              Qt.QBrush(),
                              Qt.QPen(Qt.Qt.black),
                              Qt.QSize(5, 5)))

如果上面的代码改成下面这样,会有什么损失呢?

grid.setPen('gray', 0 ,'dotted')
curve.setSymbol('ellipse', 'k', (5,5))

即使某些特定的数据类型是出于技术上的需要,难道不可以在需要这些类型的方法里把字符串转换成这些类型吗?

这是因为pyqt和pyqwt只是C++库的绑定吗?如果是这样,为什么在C++中也需要它们呢?

5 个回答

1

想象一下,你打错了字,或者拼写错误。比如你写成了 Elipse 而不是 Ellipse

如果你用 Qwt.QwtSymbol.Elipse 这样的代码,错误会在运行之前被发现。

但如果你用像 'elipse' 这样的字符串,错误就无法在运行前发现,只有在实际调用 setSymbol 的时候才会被发现(如果这个调用出现在一个你这次运行中根本不会执行的 else 分支里,那这个错误就会一直被忽视)。

当然,还有性能方面的原因。

关于这个 类型系统 的问题,有整本书可以看。你可以学习一些 Ocaml,并阅读 B.Pierce 的 类型与编程语言

还可以看看 这个问题

3

不同类型的变量可以让你在编译的时候(至少在C++中)检查你传入的东西是否正确。比如说,如果所有的东西都用字符串,那你很容易把'gray'错打成'grey',这样可能会让程序搞混。

一个常见的做法是像这样:

greypen = Qt.QPen(Qt.Qt.gray, 0, Qt.Qt.DotLine)
blackpen = Qt.QPen(Qt.Qt.black, 0, Qt.Qt.DotLine)
# ...
grid.setPen(greypen)
# ...
grid.setPen(blackpen)

这样做可以避免你在多次使用相同类型的属性时重复写代码。

4

这里有几个好处:

  1. 类型安全的语言(比如C++)有个优点,就是很多错误在编译时就能被发现(而不是在运行时)。这意味着如果你用Qt.grey(注意这个“e”)的话,编译时就会出错,因为这个类型没有定义。

  2. 性能更好,内存占用更少。在背后,Qt.gray其实是一个数字,而数字的运算速度比字符串要快得多。

在pyqt的情况下,因为这个库是用C++库封装的,所以它看起来更像C++代码,而不是Python代码。

撰写回答