102
woshi88 2019-07-01 16:21:00 +08:00 4
1. Python 是一种解释型语言。这就是说,与 C 语言和 C 的衍生语言不同,Python 代码在运行之前不需要编译。其他解释型语言还包括 PHP 和 Ruby。
2. Python 是动态类型语言,指的是你在声明变量时,不需要说明变量的类型。你可以直接编写类似 x=111 和 x="I'm a string"这样的代码,程序不会报错。 3. Python 非常适合面向对象的编程( OOP ( Object Oriented Programming )),因为它支持通过组合( composition )与继承( inheritance )的方式定义类( class )。Python 中没有访问说明符( access specifier,类似 C++中的 public 和 private ),这么设计的依据是“大家都是成年人了”。 4. 在 Python 语言中,函数是第一类对象( first-class objects )。这指的是它们可以被指定给变量,函数既能返回函数类型,也可以接受函数作为输入。类( class )也是第一类对象。 5. Python 代码编写快,但是运行速度比编译语言通常要慢。好在 Python 允许加入基于 C 语言编写的扩展,因此我们能够优化代码,消除瓶颈,这点通常是可以实现的。numpy 就是一个很好地例子,它的运行速度真的非常快,因为很多算术运算其实并不是通过 Python 实现的。 6. Python 用途非常广泛——网络应用,自动化,科学建模,大数据应用,等等。它也常被用作“胶水语言”,帮助其他语言和组件改善运行状况。 7. Python 让困难的事情变得容易,因此程序员可以专注于算法和数据结构的设计,而不用处理底层的细节。 8. 优雅,简单,开发效率高,第三方包多,高级语言,可移植,可嵌入,胶水语言,脚本语言。 |
103
LokiSharp 2019-07-01 16:29:40 +08:00
本来我也觉得 Python 是个好语言,直到我知道了 Kotlin
|
104
tohearts 2019-07-01 16:40:26 +08:00
好语言的关键,难道不是取决于用的顺不顺手吗?
|
106
guolaopi 2019-07-01 17:10:45 +08:00
在做简单抓黄图或者帮人在简单网站刷赞的话我选择 PY,
别的时候还是用自己常用的语言。 今天下午帮同事调 py 代码的时候那个空格要死了。 “最好的语言”这种噱头和 CSDN 右侧广告一样( XX 天精通 XXX,9102 年了学什么语言 XXX )正在毁掉这个语言。 |
107
exonuclease 2019-07-01 17:11:22 +08:00 via iPhone
除了慢别的都挺好
|
108
annielong 2019-07-01 17:17:03 +08:00
和 php 一样,编辑简单,无需编译,最头大的就是 java,如果不是专职 java,临时用一下就很麻烦
|
109
ben1024 2019-07-01 17:23:34 +08:00
python 的游标卡尺的梗是十分难受
golang 的语法习惯也是难受 还是习惯了 PHP,JS,JAVA 一类的语法 |
110
2gua 2019-07-01 17:41:27 +08:00
不知道 Python 好在哪儿。就是每每用到它时,感觉写代码很愉悦就是了。比如这样我就觉得很方便:
In [79]: m1 = {'a': 1, 'b': 2} In [80]: m2 = {'c': 3, 'd': 4} In [81]: {**m1, **m2} Out[81]: {'a': 1, 'b': 2, 'c': 3, 'd': 4} |
111
noli OP |
112
cnanyi 2019-07-01 17:51:59 +08:00
如果跟 java 做对比的话, 脑中在勾画程序逻辑时, 用 python 可以顺手就做了一个简单的实现原型,用代码验证一下大体逻辑,也不会影响思考。 用 java 可能还没声明完实体类
|
114
chengxiao 2019-07-01 18:22:22 +08:00
用不惯就不用嘛,又不是人逼着你用
v2 豆瓣 python 不都用着好好的 youtube instagram 这种体量的大站不也存在着大量 python 么 |
115
hmxxmh 2019-07-01 18:47:17 +08:00 via Android
存在即合理,好不好,用不用,都取决于你自己的想法。
|
117
watsy0007 2019-07-02 01:46:15 +08:00
你先说哪里不好
你觉得什么样的语言好, 然后再来一条一条辩论. |
118
zone10 2019-07-02 09:28:56 +08:00
首先 Python 是动态语言这点前面很多人也说了,然后 GIL 是 CPython 的锅不是 Python 的锅, 你用其他的解释器像 Jython 就没 GIL, 还有性能更强悍的 Pypy 正在考虑干掉 GIL, 吐槽一门语言前请对这门语言有足够的了解
|
119
skinny 2019-07-02 10:27:20 +08:00
@lolizeppelin 对,各种基本类型的内存占用太大就大大拉低了性能,然而很多人认识不到这点,你讲这个还会有人跟你抬杠说你不会用,我就遇到过这种杠精。
|
120
noli OP @zone10
吐槽我不了解 python 之前请在本帖中查找我不懂 python 的迹象。 不然的话,你也只是跟你吐槽的一样,凭着莫名其妙的印象来吐槽,一点价值都没有。 何止有 Jython, .Net 上也有 python 呢,实际项目中有多少人用你知道吗? GIL 是 CPython 的锅,那你告诉我 Pypy 现在有没有 GIL ? 吐槽之前请先多了解你要护的。 |
121
ytymf 2019-07-02 11:29:41 +08:00
你说的第一条就已经很重要了,对于编程水平不怎么好的人来说,python 上来能实现很多功能
|
122
silkriver 2019-07-02 12:46:33 +08:00
Python 关键的杀手级特性还是语法简洁自然,基本上就是可执行的英语
因为便于学习和分享,从而积累起不计其数的第三方包,建成可持续生态系统 |
123
VZXXBACQ 2019-07-02 13:20:00 +08:00
我觉得对我来说有一个优点就是比 Bash 好用。(真的,即使有 Bash 更好用的时刻我也可以轻松调用 Bash 完成更复杂的工作。
|
124
lolizeppelin 2019-07-02 13:31:22 +08:00
@noli
python 的线程本来就是稍微做点异步的,稍微注重点性能都是用协程,锁都是用排序实现 所以 GIL 不管是谁的锅对 python 来说真不是最大的问题 即使没有 GIL 的限制, PYTHON 能像 dart 一样用协程+多线程(go 不熟悉,理论上应该是一样的)也没用 因为 python 的性能本来就是坨屎, python2 我有次测 monotonic 时间调用,就 ctype 返回的时间再算一次除法 比直接调用 time 慢了 60 倍, python3 用同样写法提升不少但是也有 20 多倍差距 所以才说 GIL 根本不是黑点,python 到处都慢, 那这个来黑 python 根本没什么卵意思 了解 python 的的话,一开始就应该知道,必须单进程里用多核就应该 pass 了 可以多进程但是涉及到大量计算,如果不方便胶水到 c 里做,也不应该用 python python 一开始就不适合你要做的东西, 然后你用 python 这些缺点来说 python 不好有啥意思呢? 只盯着缺点不,看不到优点,python 自然是个渣 |
125
lolizeppelin 2019-07-02 13:47:04 +08:00
python 有优秀的路径处理库,我用过的语言里都怎么见过
python 有 psutil, 没见哪个语言提供了这么方便的进程管理库 python 把各种系统调用封装得非常方便,没哪个语言在这方面能这么舒服的 python 有 rpm 库, 如果你发布的代码用 rpm 管理,python 处理起来非常舒服,哪个语言有? gdb 里有 python 虚拟机, gdb 的时候可以用 python 辅助调试,你告诉我哪个语言有? 操作系统选 python 来管理淘汰了 perl,openstack 选择了 python 都不是偶然的. python 在很多不是那么注重性能的场合真的非常好用.没那么多地方对性能要求那么高的,要求高就胶水,胶水不行换语言,不要只看到 python 慢不看 python 好. |
126
noli OP @lolizeppelin
你的回复代表了一部分“迷信”。 Python 有优秀的路径处理库,其他语言能不能有?如果不能有,那说明 python 真的优秀,只有他能做出这么好用的库。 你的说法只能体现一个事实,很多人用 Python 的时候需要处理路径,所以有了这样的库 Python 有 psutil, 没见哪个语言提供了这么方便的进程管理库。 你的说法只能体现一个事实,很多人写 Python 需要手动管理进程。 python 把各种系统调用封装得非常方便,没哪个语言在这方面能这么舒服的。 这个我有话说,python 如果不靠 gevent 这种外挂,封装一下异步调用链试试?当然,现在有 asyncio 可以跟上了。 剩下的我不一一反驳了 当你陷进了一种路径依赖,或者所谓变相的人择原理的时候,python 什么都是香的。 只有跳出这种狭隘环境比对,你才能发现别的语言的好。 |
127
noli OP @woshi88
2. Python 是动态类型语言,指的是你在声明变量时,不需要说明变量的类型。你可以直接编写类似 x=111 和 x="I'm a string"这样的代码,程序不会报错 C# 也可以,rust 也可以,var x = 111; var x = "I'm a string"; var x = new Something(); 并且还是强类型静态类型的,绝对不会突然变成 OtherThing 并且运行时才报错。 3. 要说 OO 的话,继承、封装、多态。Python 的封装就做不好吧? 4. C# 还专门把函数引用抽象出一个 delegate 概念,还可以运行时生成范型类呢 5. 写得快,重构的时候也快吗? 6. .Net 系里面无缝调用各种其他语言的代码,不比你 Python 爽? 7. “程序员可以专注于算法和数据结构的设计” 我专门写多线程下数据安全的数据结构的,Python 拿一个出来看看? 8. 在 .Net 上你可以用 Lua, Python, F#, 实在不喜欢,C# unsafe 直接操纵内存和指针也行。 要不你学一个 Cython 先? |
128
ptrees 2019-07-02 15:25:15 +08:00
对我来说最大的优点就是简洁,写起来舒服.至于性能上的优劣,我不懂,好像也没人吹吧
|
129
lolizeppelin 2019-07-02 15:35:10 +08:00
@noli
你这不 TM 是废话么 别的语言为什么都没做好或者不做,因为别人不用那些语言干这些活或者那些语言做这些活太麻烦 我 TM 做一些系统管理的事情不上 python 我直接拿 c 写拿 go 写拿其他的的写有 python 方便? 不是能不能而是更适合 OK,照你说法不如都不 C 大家都用 C 算了? 用起来爽用起来方便,在很多领域性能可以接受这不是优点? 算了和你扯浪费时间,python 就垃圾得了 |
130
silkriver 2019-07-02 15:38:41 +08:00
嗯正如上面说的强制缩进就是 Python 最大的杀手级特性,任何用花括号或 begin/end 来标示结构的语言全都没资格跟 Python 比简洁自然……
|
131
lolizeppelin 2019-07-02 15:43:46 +08:00
我要用 rpm 管理程序版本, 你拿其他语言封装好 rpm 库给我用?
我要 gdp 调试程序用 python 辅助, 你给写个 gdp 插件? go/java/再牛逼还能把 python 现有的各种方便库都做好了? 还是你觉得自己有本事可以用其他语言做没问题 我没本事我需要啊,OK ? 你对 python 特有的东西没需求所以 python 渣? 妈的 go 没泛型难用的 1B,所以我可以说 go 就是渣,我用 go 干嘛不用 c ? |
132
woshi88 2019-07-02 15:44:34 +08:00
@noli 既然你不喜欢 python 那你去学其他语言啊,你不喜欢这个为什么还要研究它?我就搞不清楚你是怎么想的,己所不欲勿施于人,难道别人的喜好你就要去否定吗?你说 python 封装不好?我想知道他哪里不好,是你自己学的不到位还是是 python 本身的问题,没有哪个语言是完美的,你又何必再鸡蛋里挑骨头,就例如爬虫来讲,Java 也可以写,但是效率没有 python,所以大家都用 python 写爬虫。
|
133
lolizeppelin 2019-07-02 15:49:41 +08:00
还有,别扯什么 gevent, 谁和你扯这种系统调用
go/java 里才封装了几个系统调用,大部分要自己写 system call,用起来不如直接写 c 我所见的语言 python 里才有那么多系统封装 我写相关代码不用 python 用 go/java 吃屎? |
134
noli OP @lolizeppelin
好笑了,C# 源代码中直接调用 C 的都笑而不语了。 似乎在你的理解里面除了 C++ 没别的语言能直接调用 C,同时又够优雅? 你喜欢 python 就好,反正我享受着你带着我复习知识。 而我给你说的你不爱听,那就不听吧。 |
135
noli OP @woshi88
关于封装性。 我在 python 里面能不能写一个函数,只有我愿意的调用的时候才可以被调用,其他人调用不了,但我又能保证它是可服用的(说白了就是 private method) 据我所知是不能,期待你给我新的知识。 啊,顺带一说,我不研究 python,我只是调查一下用 python 的人怎么想的。 |
136
silkriver 2019-07-02 18:07:41 +08:00
private method in python
In [1]: class Test: ...: def __privMeth(self): ...: return 1 ...: def invoke(self): ...: return self.__privMeth() In [2]: t = Test() In [3]: t.__privMeth() Traceback (most recent call last): File "<ipython-input-3-37e2c9517af3>", line 1, in <module> t.__privMeth() AttributeError: 'Test' object has no attribute '__privMeth' In [4]: t.invoke() Out[4]: 1 |
138
silkriver 2019-07-02 18:13:41 +08:00
In [5]: t._Test.__privMeth()
Traceback (most recent call last): File "<ipython-input-5-f7b5ca82cf86>", line 1, in <module> t._Test.__privMeth() AttributeError: 'Test' object has no attribute '_Test' |
139
silkriver 2019-07-02 18:15:01 +08:00
as Guido van Rossum put it: "we are all adults."
|
140
noli OP |
141
www5070504 2019-07-02 18:21:22 +08:00
@noli private 的问题 如果导弹发射按钮上边有个盖子 谁也不能阻止你打开盖子按下按钮 真觉得 private 跟上了锁了一样安全了么
|
142
silkriver 2019-07-02 18:26:10 +08:00
随便你,我只是不明白 t._Test__privMeth()
跟最面向对象的 Java 的 Method.setAccessible 有什么本质区别 |
143
cordea 2019-07-02 18:27:08 +08:00
哦
|
144
noli OP @www5070504
如果是导弹发射按钮,为什么只装一个没有锁的盖子? 这是设计师的严重渎职啊。 如果只有一个盖子,谁知道下面发射的是导弹还是跳蛋? 这还是设计师渎职啊。 如果只有一个盖子,我觉得我自己知道盖子下面是什么,结果是导弹!噢真遗憾! |
145
noli OP @silkriver 那是因为你以为 Java 是最面向对象的而已。
了解一下只允许构造函数里面 set 的设计,或者完全是 immutable 不让改的设计。 这些不完全是性能考虑的原因,也是为了优雅地设计。 |
146
lolizeppelin 2019-07-02 18:36:23 +08:00
@noli
又来,谁 TM 说了其他语言不能调 C 了? python 封装好了的库我不用我专门去写个 c ? 语言原生对系统管理友好其他语言要自己来一套就不是优点? 什么叫方便? C 要是写起来方便还写其他语言干个屌?方便就不是优点? |
147
noli OP @lolizeppelin
"我所见的语言 python 里才有那么多系统封装" 考虑到现行大多数系统调用主要都是 C 库形式, 然而 python 又不能直接调用 C。 所以我对此(你把这个当作 python 的优点)感到非常奇怪。 |
148
silkriver 2019-07-02 18:40:48 +08:00
不继续抬杠了,总而言之我认同 import this 里的那十九句话
好语言并不需要最好、最优雅、最面向对象 |
149
ManjusakaL 2019-07-02 18:43:32 +08:00
@lolizeppelin 说的太绝对了
> python 把各种系统调用封装得非常方便,没哪个语言在这方面能这么舒服的 Python 系统封装还是有很多坑的。。。举两个例子 在 3.6 之前 Python 默认不支持 EPOLLEXCLUSIVE 参数 再举个例子 之前处理过一个 BPO https://bugs.python.org/issue36054 大概意思是 Python 一些系统封装,对于容器环境中失效。没有针对容器环境做优化。而 Java 在 JDK 9 之后默认支持,而且也 backport 到 JDK8 了 https://blogs.oracle.com/java-platform-group/java-se-support-for-docker-cpu-and-memory-limits 所以还是客观看待为好 |
150
noli OP @silkriver
如果你喜欢的语言就是最好的语言,我想也不会反对。 但出于求知和对他人有所启发的目的,我只是想指出,即使你们都喜欢,python 还是有很多缺陷使之不能适应现代编程需要,称之为好语言实在非常不讲理。 |
151
mink 2019-07-02 18:50:44 +08:00
越来越像微博了。。
|
152
silkriver 2019-07-02 18:52:45 +08:00
最好的语言才需要有最多的人来认可,Python 称之为好语言你实在没资格反对
|
153
noli OP |
154
silkriver 2019-07-02 22:51:44 +08:00
|
155
araraloren 2019-07-03 08:41:23 +08:00
@woshi88 #102 ...动态类型不是那个意思,讲的不对要被喷的,先做做功课吧
|
156
vindurriel 2019-07-03 08:41:36 +08:00 via iPhone
我抽烟 喝酒 说脏话 但我是个好女孩
|
157
darknoll 2019-07-03 08:55:43 +08:00
python 已经非常厉害了,你别鸡蛋里挑骨头
|
158
woshi88 2019-07-03 10:14:01 +08:00
@araraloren 所谓动态类型语言,就是类型的检查是在运行时才做。
类型对于变量,属性,方法以及方法的返回类型都是可有可无的,在给变量赋值时才决定它的类型, 之后,还可以赋值不同类型的值,即使是基本类型,比如 C# 装箱( boxing )和拆箱( unboxing ),可以把值类型转换成引用类型,引用类型转换成值类型。当需要时,很多类型之间都会发生自动转换,可以把不同的基本类型添加到同一数组( collections )中。 动态类型在解释语言中极为普遍,如 JavaScript、Perl、Python、Ruby 等等。 某些人真把无知当个性?那您说 python 是什么类型的语言。 |
159
www5070504 2019-07-03 10:25:27 +08:00
@noli 多说无益
|
160
XIVN1987 2019-07-03 10:53:54 +08:00
应该先给“好语言”下个定义,,不然争论不出个所以然来。。
|
161
XIVN1987 2019-07-03 11:00:40 +08:00
其实 Python 的优点和缺点都极其显而易见,,只不过:
有些人觉得 Python 的优点很重要、缺点不那么重要,所以就喜欢它 有些人觉得 Python 的优点不那么重要、缺点不可忍受,所以就不喜欢它 |
162
silkriver 2019-07-03 11:34:35 +08:00
好语言肯定不需要完美无缺
想要完美无缺的好女孩,那你没有女朋友 |
164
silkriver 2019-07-03 12:24:24 +08:00
和你讨论倒是很刷新我的认知,祝你最终找到完美无缺的好语言和好女朋友~
|
165
noli OP @silkriver
说我对 python 的批评无效 -> 说我要完美的语言 -> 又说完美的语言和完美的女友一样不存在 这就是你在脑海中构想的和我辩论的方式,真是浪漫啊。 实际的情况是:我用过 python 做过各式项目;现在我用多种语言做项目;以及,我过二人世界很多年了。 你们不要总是以你们的那丁点体验瞎猜别人的想法。好好琢磨代码吧。 顺带说一句:完美的语言确实不存在,完美的女朋友确实存在,不承认这一点的话你比较像单身狗,哈哈。 |
166
silkriver 2019-07-03 14:11:50 +08:00
我的实际情况和你一致,讨论可以结束了
最后绝对客观地说一句:上面讨论所提过的语言都是好语言,PHP 是最好的语言~ |
167
zkqiang 2019-07-03 18:50:07 +08:00
Python 治好了我一半的强迫症,另一半是 Go
|
168
encro 2019-07-03 20:15:29 +08:00
我:来个 html 解析!
百度:pyquery,还有 bs4 都不错,你要来哪个? 我:虽然既然大家都说 bs4 好,但是我对 jq 语法非常熟悉有好感啊 。。。1 个小时后。。。 我:怎么 from_string 后,一堆操作,再 to_string 就不是想要的结果啊???还是试试 bs4 吧 。。。1 个小时后。。。 我:怎么 bs4 语法这么奇怪啊,怎么也是一样不行呢,google stackoverflow 看下吧 。。。1 个小时后。。。 我:原来解析库还有 html.parser,lxml,xml 还是 html5lib 之分啊,都 9102 年了,我要 html5lib 。。。30 分钟后。。。 我:html5lib 不行,试试 lxml 吧 。。。5 分钟后。。。 我:终于可以了, 法克。。。 |
169
encro 2019-07-03 20:19:09 +08:00
刚学 Python:解决问题最好的办法只有一种。
学了后:每个库都算一种。 |
170
luozic 2019-07-03 21:49:19 +08:00 via iPhone
符合直觉和思维方式,考虑性能 各种胶水,上别的语言,想一个语言极限性能又符合人的思维而不是机器执行,去做梦吧,梦里啥都有
|
171
zh584728 2019-07-04 16:51:58 +08:00
每一种语言都有它的使用环境,就像前端用 js,后端用 java,游戏开发用 c#一样,python 的在科学计算、深度学习、自然语言处理方面也有它自己的优势
|
172
yumenoks 2019-07-12 21:56:57 +08:00
你觉得好用或者不好用都没关系,不需要让被人赞同你..
|