首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python在列表元素类型中的灵活性是动态键入的结果吗?

Python在列表元素类型中的灵活性是动态键入的结果吗?
EN

Stack Overflow用户
提问于 2022-08-23 03:45:31
回答 1查看 32关注 0票数 0

我是Python新手,对C++有一定的经验。(不幸的是,只有两个样本点,任何一对特性都不是不相关的,就是完全相关的。)在Python中,相同列表中的元素可以有任何类型。在C++中,STL容器包含同构类型。(我认为可以使用空指针向量来模拟Python列表中的灵活性。)Python为通用编程提供了便利,但是C++列表具有更多的通用性。是什么造成了这种对比?设计一种具有静态类型系统并具有类似Python列表的语言是否困难?

更广泛地说,我常常不得不抵制这样的冲动:"Python有特性A,而C++有特性B,因此Python有X,C++有Y。“是否有好的语言选择可以提供与这两种语言的良好比较和对比,以便我能够理解编程语言的哪些特性是相关的,哪些特性是正交的?计算机科学的正规教育是否将语言学比喻为编程语言?(如果是这样的话,我怎么知道呢?)

EN

回答 1

Stack Overflow用户

发布于 2022-08-31 09:48:23

在Python中,相同列表中的元素可以有任何类型。在C++中,STL容器包含同构类型。..。Python为通用编程提供了便利,但是C++列表具有更多的通用性。是什么造成了这种对比?设计一种具有静态类型系统并具有类似Python列表的语言是否困难?

与之形成对比的是Python使用鸭型,所以它并不关心您在列表中添加了什么。另一方面,C++模板将确定正在传递哪些类型,用这些类型实例化“骨架”代码,然后键入检查实例化的代码。

在C++中有一个异构向量/列表是可能的。std::vector<void*>是你提到的一种可能性。对于C++17和更高版本,一个更类型安全的选择是std::vector<std::any> (更多类型安全,因为std::any存储类型信息)。

然而,通常有更多类型安全和较少出错的方法.如果您只关心数据,在单个容器下收集不同类型的数据,那么您可以考虑使用sum类型或带标记的联合 (例如std::vector<std::variant<x, y, z>>)的函数式编程方法。如果您关心元素的数据成员和成员函数,那么可以考虑使用基于类/基于继承的多态性的OOP方法。

是否有好的语言选择可以提供与这两种语言的良好比较和对比,以便我能够理解编程语言的哪些特性是相关的,哪些特性是正交的?

我会尽量给出一个客观的答案。

很少会看到PL本身与每一个单一的功能。在工业中维护和应用是不可行的。PL维护人员和委员会将做出决定,一些特性建议将被驱逐出去。不同的PLs构建方式不同(例如,有些使用演员模型以获得更好的并发性,有些使用垃圾收集器。所以,只需学习和暴露自己的不同的请。从不同的范式(面向对象、功能、并发)中进行选择。

C++和Python是很好的第一步。通过学习C++,您可以了解指针、OOP和类型。学习Python,您就能感觉到编程是多么的方便和快捷。这两种语言都不是没有弱点的。在用Python编写代码时,您可能已经意识到:“哦,我不需要担心指针和内存泄漏,因为这一切都是在幕后完成的!”但是过了一会儿:“啊,我在这个分支中返回了错误的类型,为什么Python不早点警告我呢?”

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73452911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档