为什么Python有那么多方便的库而C++很少?
程序员文章站
2022-04-18 12:25:26
...
比如Python的matplotlib库吧,很方便而且甚至内置了从雅虎财经上扒数据的类,连正则表达式都不用输。。。而C++比起来库就少的多。。。就算有,很多代码看起来也乱糟糟的(估计是因为命名规则的问题,我也见过用Java那种命名规则的C++代码,挺好看的,所以选择性忽略我这句话),为什么Python的库发展的那么人性化?
其次python的库,基本上都通用,pip下来就可以直接用了。只适用于py2的库,也在也很少了。
而C++的库,且不说一堆库只能在linux下用,一堆只能在win下用。就算可以用的,叫你自己编译一遍,你就不一定能成功,有些代码不好的,只能在某些版本的编译器上才能跑,你就只能哭了。
编译方法乱七八糟的,有的只支持configure+make,有的是cmake,还有chrome用的那啥玩意忘记名字了。大一点的编译要几个小时,在win下还要编译debug和release两个版本。
编译好了,用的时候还要自己去配置头文件路径,库文件路径,链接的时候链接上才能使用。一不小心就会有各种链接错误无从查起。
python的库做起来也很方便,你可以无所顾忌地用已有的库来节省开发。而C++的库呢?你想偷点懒,用些第三方的库在你的库中,只会让别人编译的时候更麻烦。
另外好多C++的库,本身带有一定的学习作用,你领悟之后,可以自己做个更适合自己的库出来,反正C++开发慢,不再乎再慢这么点时间。 方便就意味着屏蔽更多的细节。
这也许是个哲学问题。就像有的人觉得苹果好用,是因为有的人不需要知道什么安装包啊,文件管理啊。但是我身边也有人喜欢安卓,喜欢自己去管理那些文件,喜欢那种透明。这或许也像是如果你想在身边拿什么东西都方便,就需要身边摆尽量少的东西。当你需要的东西越来越多,身边的东西多起来的时候,是一定不方便的。
所以我的一个观点是,我斗胆猜测,题主之所以认为python有很多库用起来都比较方便,是因为题主的需求都很基础。如果需求复杂,追求细节,对每一个用到的东西的每一个细节都要求可定制的时候,题主说到的大多数方便的python库就并没有题主想象中那么方便了,甚至一些你要求的细节,库并没有提供给你定制的方法。
随口说个例子(可能不是那么严谨,凑活听下):就简单的说save一张图片,在Python里边用PIL就是save这么简单,名字带上后缀其他都不需要理会。那如果是我也许我会有一个疑惑,我带了.png后缀你save的到底是png8还是 png24 png32。如果我想存成这些我想要的格式我也要去查查,有没有相应的方法。
C++的类库是为了让专业的用户写专业的程序。这要求使用的人有比较高的水准,如果你玩图片,你对图片的各个方面的东西都要了解。在初始化的时候你就要写清楚,你是否需要alpha通道,是要32位、16位还是8位色。
你的图片是多少dpi的、图片显示在屏幕上的时候是多少缇。
这些东西在你需求简单的时候根本不需要理会,你用到的也只是Python库里边的show,当然你会觉得方便。
当然我说这些也不是说Python就不能处理这些。当然Python也是可以的。但是当Python拿来写专业的程序时候,题主恐怕也会觉得很多库跟C++的库一样繁琐了。
我也觉得Python的很多库好用,但是一定是要看在哪些需求下和C++的库比较。
题外:
C++的库有时候在调用上没有那么自然,有时候也和这个有那么一点关系
一个有内存管理的语言和内存需要程序猿自己管理的语言,在类库的方法设计上都有很大的不同。因为经常会要纠结如何不用分配更多的内存返回调用者需要的信息。那样子可能他的调用就很奇怪,很诡异,很蹩脚,甚至不能实现。
这个例子类似字符串的split,题主看下这个。
C库中没有itoa以及C++中string没有split方法的原因
这个观点正确与否这个现在无法确定,但有一点可以确定的是每一个C++的类库设计者,都会产生这样的一种困扰。也不排除他们因为想不到更好的方式然后就把库的方法设计的非常反人类。
=====================================================================
深夜回答这个,写了删,删了改,只是因为突然有了感触,一两年前跟题主一样对这个问题有着不解。不过相信时间会让题主对这个问题有更深刻的认识…… python简单,简单到“12岁少女教你如何用python开发游戏” 等事例屡见不鲜
pycode可读性强(喷缩进退散),伪代码语言不是吹出来的
除去语言本身的buff,还有一个很重要的原因是py本身就封装了很多复杂的实现(通常代价是牺牲效率),而我们的代码就是基于这些封装上进行的,比如用c++ curl实现post请求和用python urllib*对于新人/懒人来说自然选择后者,通过一个from import又可以展开many开源库直到出现requests这样的库,当你用c++拼命socket的时候我早已requests.get()解决,节省下来的时间又可以撸几个基于requests库的爬虫库 1.对库的理解不能限于标准库。Python库比C++多得多太违反我的认知,求一下统计数据。另外由于面向的用户不同,你能举出Python有的而C++没有的东西,我也能找到C++有的而Python没有。
2.Java命名规则是什么鬼=_=Java程序员设计的规则?
3.如果我希望让别人忽略一段静态文本,我根本就不会让它出现在屏幕上。如果你真的后悔说漏了嘴,现在还有机会删掉。
4.Python是很人性化。因为题主比较喜欢Python,想黑C++又不敢直说。 Boost就是在企图解决这个问题(不看好) 同样是通信工具,为啥手机有那么多配件还有那么多app用?为啥卫星电话就啥都没啊,一点不人性化啊?
需求不一样,场景不一样,目的不一样。
回复内容:
首先python有个pip,发布和获取都比较方便。其次python的库,基本上都通用,pip下来就可以直接用了。只适用于py2的库,也在也很少了。
而C++的库,且不说一堆库只能在linux下用,一堆只能在win下用。就算可以用的,叫你自己编译一遍,你就不一定能成功,有些代码不好的,只能在某些版本的编译器上才能跑,你就只能哭了。
编译方法乱七八糟的,有的只支持configure+make,有的是cmake,还有chrome用的那啥玩意忘记名字了。大一点的编译要几个小时,在win下还要编译debug和release两个版本。
编译好了,用的时候还要自己去配置头文件路径,库文件路径,链接的时候链接上才能使用。一不小心就会有各种链接错误无从查起。
python的库做起来也很方便,你可以无所顾忌地用已有的库来节省开发。而C++的库呢?你想偷点懒,用些第三方的库在你的库中,只会让别人编译的时候更麻烦。
另外好多C++的库,本身带有一定的学习作用,你领悟之后,可以自己做个更适合自己的库出来,反正C++开发慢,不再乎再慢这么点时间。 方便就意味着屏蔽更多的细节。
这也许是个哲学问题。就像有的人觉得苹果好用,是因为有的人不需要知道什么安装包啊,文件管理啊。但是我身边也有人喜欢安卓,喜欢自己去管理那些文件,喜欢那种透明。这或许也像是如果你想在身边拿什么东西都方便,就需要身边摆尽量少的东西。当你需要的东西越来越多,身边的东西多起来的时候,是一定不方便的。
所以我的一个观点是,我斗胆猜测,题主之所以认为python有很多库用起来都比较方便,是因为题主的需求都很基础。如果需求复杂,追求细节,对每一个用到的东西的每一个细节都要求可定制的时候,题主说到的大多数方便的python库就并没有题主想象中那么方便了,甚至一些你要求的细节,库并没有提供给你定制的方法。
随口说个例子(可能不是那么严谨,凑活听下):就简单的说save一张图片,在Python里边用PIL就是save这么简单,名字带上后缀其他都不需要理会。那如果是我也许我会有一个疑惑,我带了.png后缀你save的到底是png8还是 png24 png32。如果我想存成这些我想要的格式我也要去查查,有没有相应的方法。
C++的类库是为了让专业的用户写专业的程序。这要求使用的人有比较高的水准,如果你玩图片,你对图片的各个方面的东西都要了解。在初始化的时候你就要写清楚,你是否需要alpha通道,是要32位、16位还是8位色。
你的图片是多少dpi的、图片显示在屏幕上的时候是多少缇。
这些东西在你需求简单的时候根本不需要理会,你用到的也只是Python库里边的show,当然你会觉得方便。
当然我说这些也不是说Python就不能处理这些。当然Python也是可以的。但是当Python拿来写专业的程序时候,题主恐怕也会觉得很多库跟C++的库一样繁琐了。
我也觉得Python的很多库好用,但是一定是要看在哪些需求下和C++的库比较。
题外:
C++的库有时候在调用上没有那么自然,有时候也和这个有那么一点关系
一个有内存管理的语言和内存需要程序猿自己管理的语言,在类库的方法设计上都有很大的不同。因为经常会要纠结如何不用分配更多的内存返回调用者需要的信息。那样子可能他的调用就很奇怪,很诡异,很蹩脚,甚至不能实现。
这个例子类似字符串的split,题主看下这个。
C库中没有itoa以及C++中string没有split方法的原因
这个观点正确与否这个现在无法确定,但有一点可以确定的是每一个C++的类库设计者,都会产生这样的一种困扰。也不排除他们因为想不到更好的方式然后就把库的方法设计的非常反人类。
=====================================================================
深夜回答这个,写了删,删了改,只是因为突然有了感触,一两年前跟题主一样对这个问题有着不解。不过相信时间会让题主对这个问题有更深刻的认识…… python简单,简单到“12岁少女教你如何用python开发游戏” 等事例屡见不鲜
pycode可读性强(喷缩进退散),伪代码语言不是吹出来的
除去语言本身的buff,还有一个很重要的原因是py本身就封装了很多复杂的实现(通常代价是牺牲效率),而我们的代码就是基于这些封装上进行的,比如用c++ curl实现post请求和用python urllib*对于新人/懒人来说自然选择后者,通过一个from import又可以展开many开源库直到出现requests这样的库,当你用c++拼命socket的时候我早已requests.get()解决,节省下来的时间又可以撸几个基于requests库的爬虫库 1.对库的理解不能限于标准库。Python库比C++多得多太违反我的认知,求一下统计数据。另外由于面向的用户不同,你能举出Python有的而C++没有的东西,我也能找到C++有的而Python没有。
2.Java命名规则是什么鬼=_=Java程序员设计的规则?
3.如果我希望让别人忽略一段静态文本,我根本就不会让它出现在屏幕上。如果你真的后悔说漏了嘴,现在还有机会删掉。
4.Python是很人性化。因为题主比较喜欢Python,想黑C++又不敢直说。 Boost就是在企图解决这个问题(不看好) 同样是通信工具,为啥手机有那么多配件还有那么多app用?为啥卫星电话就啥都没啊,一点不人性化啊?
需求不一样,场景不一样,目的不一样。