![]() | 1 defunct9 2017-06-28 23:43:53 +08:00 via iPhone ![]() 高高兴兴的用了 p2,结果被 encode、decode 折磨了个半死 |
2 donething 2017-06-29 02:10:09 +08:00 via Android 为什么 python3 好用的 MySQL 连接库都没有? |
3 MIMEIK 2017-06-29 08:03:20 +08:00 via Android 因为 py3 和 py2 本来就不是一种语言呀 摔() |
5 CYKun 2017-06-29 08:56:09 +08:00 via Android 因为后向兼容就是很难做呀,不然 java 也不会有那么多人骂了。 |
![]() | 6 to2false 2017-06-29 09:01:03 +08:00 兼容问题,是时候喊出那一句话了,PHP 是世界上...... |
8 keysona 2017-06-29 09:04:45 +08:00 ![]() 破坏 & 重生。 py3 大法好。 除了 遗留项目,现在 统一 py3. |
![]() | 9 RealLiuSha 2017-06-29 09:16:48 +08:00 ![]() python 1989 年发明,第一个公开发行版发行于 1991 年 utf8 由 Ken Thompson 于 1992 年创建 |
10 chenyu0532 2017-06-29 09:20:19 +08:00 因为 py 爸爸设计的就不能兼容啊。。。老老实实用吧。。这个问题没有为什么 |
![]() | 11 Phariel 2017-06-29 09:39:02 +08:00 via Android Swift 不是同样的道理 为什么不能好好的兼容前面的版本 因为压根就没考虑过兼容问题 |
![]() | 12 justtery 2017-06-29 09:53:45 +08:00 via Android ![]() 没升级 python3 的 python 包你就当它死了就好了 |
![]() | 13 jason19659 2017-06-29 09:58:46 +08:00 所以一般都装 2 个版本的 py |
![]() | 15 kinghui 2017-06-29 10:03:13 +08:00 @donething #3 我们目前在尝试把在开发中的 Python2 项目迁移到 Python3, MySQL 连接库我们目前在尝试使用 https://github.com/PyMySQL/mysqlclient-python , |
![]() | 16 tankb52 2017-06-29 10:04:14 +08:00 兼容是个无底的坑。 |
![]() | 17 leavic 2017-06-29 10:04:58 +08:00 ![]() 非商业语言的有点就是敢于大破大立,只管对错不管利益。 |
![]() | 19 eloah 2017-06-29 10:11:12 +08:00 ![]() Rust 表示,兼容是什么 |
![]() | 20 gouchaoer 2017-06-29 10:11:13 +08:00 这是 py 犯下的最愚蠢的错误,当然了我能不用就不用这门语言 |
![]() | 21 gouchaoer 2017-06-29 10:14:49 +08:00 我就不懂了,你把 /这种基本操作符的意义都变了,除了给库开发者造成冒犯,有毛意义 print 加不加括号有毛意义 一堆抖 M 么 |
![]() | 22 zhengxiaowai 2017-06-29 10:48:00 +08:00 ![]() py2 很大一部分是兼容 py1 导致的,你看看 python 诞生的时间,比 java 还早好多年,很多现在的丑陋的在当时来看是很优雅的实现。 python 是一种简单又复杂的语言,取决于使用方式。举个栗子,元编程的强大,大家都知道。目前很好实现元编程的只有 Python 和 Ruby。python 排序所用的 timsort 算法的高效被很多语言实现的排序作为参考(来自《流畅的 Python 》)。 @gouchaoer 你不懂就要多看书,不是瞎喷。print 加不加括号取决于 print 是作为函数还是关键字。作为函数的话实用性远远大于关键字。 要我说,python3 出来的第一天就要停止 python2 的开发才对,哈哈哈哈哈! |
23 ke1e 2017-06-29 10:48:01 +08:00 print 加括号它就是个函数,不加括号它就是个表达式 |
![]() | 24 kinghui 2017-06-29 10:51:04 +08:00 ![]() @gouchaoer 不是加不加括号, 而是从一个表达式变成了函数, 引用 https://stackoverflow.com/a/6241519 提到的其中一个好处就是可以像如下方式使用 print: >>> [print(x) for x in range(10)] print 并不会对兼容性造成太多的困扰, 毕竟很少有库里直接使用 print, 而且 print 这种非常容易修改. 最大的不兼容就是底层使用 Unicode 重新实现, 同时严格区分了 字节序(bytes) 和 Unicode(str). 比如 Python2 中 bytes 和 unicode 可以相互比较, 但是在 Python3 中是不允许的: Python2: >>> b'abc' in u'cc abc' # True Python3: >>> b'abc' in 'abc' # TypeError 还有比如 Python2 中只要是字符串类型(str,unicode) 都有 format/decode/encode 方法, 但是 Python3 中仅允许 Unicode(str) 有 encode/format 方法, bytes 不允许有 format 方法, 等等等. 这样做的好处是让语言更加严谨, 其他一些库的不兼容可能主要是由于这个原因导致, 也有部分可能是破窗效应: 反正不兼容那就做些大调整, 比如换个名啥的. 还有一些类似 MySQLdb 这样的库不兼容是因为 Python3 的 C API 也不兼容, 导致这些用 C 写的扩展库不支持 Python3, 就像 #8 说的, 除非一些已死的项目(想 MySQLdb) 基本上都已经(或正在)同时兼容 Python2 和 Python3. |
25 tempdban 2017-06-29 11:00:22 +08:00 @gouchaoer 以前同事初学 python2 的时候,调试全靠 print。后来我想优雅的重载 print 向 log 输出,做不到.... 到了 python3 重载 print()后,就随便他们怎么 print 了 |
![]() | 26 gouchaoer 2017-06-29 11:16:39 +08:00 @zhengxiaowai @tempdban 你不用为 py 的 print 辩解了,我这个外行教 guido 怎么兼容,简单的很: 对 py3 而言,print 如果不加括号,ok 这是一个关键字;如果加了括号,这是一个函数,你想怎么重载怎么重载 |
27 tempdban 2017-06-29 11:31:01 +08:00 |
![]() | 28 RealLiuSha 2017-06-29 11:31:27 +08:00 ![]() |
![]() | 29 RealLiuSha 2017-06-29 11:32:11 +08:00 ![]() @tempdban 不用给 php 解释这些东西 |
30 BOYPT 2017-06-29 11:33:38 +08:00 感觉今年看到的逼都在这个帖子里了 |
![]() | 31 gimp 2017-06-29 11:37:54 +08:00 ![]() “我这个外行教 guido 怎么兼容” 有趣 :) |
![]() | 32 Kongyuan 2017-06-29 11:38:26 +08:00 ![]() 最近被 python3 的数据库链接库给纠结坏了。 找了半天才找到个合适库: 如果你也在找链接 MySQL 的请参考: * pymysql - 怎一个幔子了得。好在 docker 的 image 不用准备 mysql 的包了。 * mysqlclient-python - 就是 python2.x MySQLdb 的替代品。 对于的 乖乖去下载 mysql 安装包和 dev 库吧 然后,这年头有谁多进程连数据库不用连接池? 然并卵,pymysql 不支持,mysqlclient-python 支持但用起来复杂。 所以找了这个 DBUtils: https://pypi.python.org/pypi/DBUtils/1.2 (support both python2.x/3.x) 发现找到了救星。 顺便说一下为了找这个库,翻遍了 github 上的各种 python3 mysql pool 的项目。 弄了一下午 (逃) |
![]() | 33 cashew 2017-06-29 11:41:31 +08:00 Java 到是一直在做兼容,然后就越来越臃肿了。 |
![]() | 34 ixiaohei 2017-06-29 11:45:17 +08:00 表示做 java 的看你们讨论 py2 和 py3 迁移问题都很 happy,另外你们要是以后切换 py4 是不是有得吐槽一番,有些东西能废弃就废弃吧,一直抱着老的,还怎么去拥抱新的,另外 java 很多时候为了兼容老的,出个新东西都得多久... |
![]() | 35 ixiaohei 2017-06-29 11:45:56 +08:00 不过不用头痛的是,java 切换高级版本,很多老的都可以用。 |
![]() | 36 gouchaoer 2017-06-29 11:51:29 +08:00 ![]() @cashew 得了吧,java 语言很简洁很规矩,兼容做的很好,jvm 也做得好,社区成熟库多不折腾,真正的工业级语言,这么好用的基础设施。。。这么说吧,java 是最好的语言 |
37 ty89 2017-06-29 11:52:55 +08:00 所以我现在尽量只用 ror 做 web 开发了 |
![]() | 38 nullcc 2017-06-29 11:57:14 +08:00 长远来看肯定是要用 py3 的,这点没有任何疑问 |
![]() | 40 AnyISalIn 2017-06-29 12:00:26 +08:00 主要问题是一些三方库可能不支持 Python 3,但是如果自己写的话,还是很容写 2.7 -> 3.6 都兼容的代码的 |
![]() | 41 jiangzhuo 2017-06-29 12:00:32 +08:00 最近用了 six 感觉好一点 |
![]() | 42 gouchaoer 2017-06-29 12:02:58 +08:00 ![]() @smithtel 你不战一战怎么把那些只知道人云亦云、掌握了一个技术栈就只知道敝帚自珍的小白骂醒,真的好的技术是不怕拿出来比较的。而且我又不是大神没啥包袱,引战啊煽风点火啥的我挺喜欢的 |
43 tairan2006 2017-06-29 12:29:32 +08:00 其实不反对 Python3 不兼容,反对的是好不容易不兼容了,你就不能多改一些么…比如更快一点… |
44 ivechan 2017-06-29 12:33:55 +08:00 一天到晚宣传程序员需要学习的新技术多的是你们, 可 Python3 都出来了差不多十年了, 还有人在讨论 XX 库为什么不兼容 Python2 这种问题。。 |
45 xijiangtao 2017-06-29 12:43:11 +08:00 @donething pymysql,python-mysql 之类的,搜索一下都是好多一堆教你怎么连接 Mysql 的 |
![]() | 47 0915240 2017-06-29 12:50:18 +08:00 via iPhone java 是臃肿,但兼容确实做的很好。 |
![]() | 48 cashew 2017-06-29 12:50:52 +08:00 @gouchaoer 说简洁、说臃肿也是相对于别的语言,这些本身就没什么好争的,各个语言各有千秋。说 Java 繁重,也恰恰说明它是一个靠谱好用的语言,更何况 Java 在各个领域都有闪光点也证明它本身。 我也无意去说什么,毕竟 Java 是编译型语言和 Python 解释型语言相比本身就不恰当。 |
50 xiaolanglang 2017-06-29 12:56:10 +08:00 你看为了兼容,Java 的泛型都成了什么样了…… |
![]() | 51 demerol 2017-06-29 13:26:45 +08:00 via Android php js 就是个很好的例子 |
![]() | 52 robertding 2017-06-29 13:30:08 +08:00 @kinghui 终于要迁移了啊。。。 |
53 VmuTargh 2017-06-29 13:55:55 +08:00 有些花就是习惯在烂泥里面生活了,给它个好环境反倒枯萎了。 |
![]() | 54 zhangbohun 2017-06-29 14:24:41 +08:00 via Android 说起来因为 print 要加括号所以我一直没升级 py3,哈哈哈哈哈哈 |
![]() | 57 clino 2017-06-29 14:56:37 +08:00 我一直觉得 python 每一个大的版本只做一个大的不兼容的更改,我看升级就妥妥的没问题 就是步子跨太大,大跃进了以后成本就高了 |
![]() | 58 mimzy 2017-06-29 14:58:56 +08:00 @zhangbohun #54 估计你知道 不过可以这样嘛 from __future__ import print_function |
![]() | 59 mimzy 2017-06-29 15:00:07 +08:00 @zhangbohun #54 对了反应过来你的意思是不想加括号…啊那就不是我表达的意思了… |
60 lxy 2017-06-29 15:16:22 +08:00 @gouchaoer print(2, 3) 在 py2 输出的是 tuple:"(2, 3)",py3 是"2 3"。你的兼容方式并不能兼容。 |
![]() | 61 visonme 2017-06-29 15:23:10 +08:00 因为 py3 的设计者门,一开始就是把 py3 作为一个新的东西打造,而不是单纯作为 PY2 的升级版 |
![]() | 62 fy 2017-06-29 15:28:11 +08:00 ![]() 简单,移除不支持 python3 的库。 因为它们多半是三年以上不更新的过时库,换社区里更好的替代品。 |
![]() | 63 gouchaoer 2017-06-29 15:37:22 +08:00 @lxy py 的 tuple 的(2, 3)是写成(2, 3,)的,而且这个和我的兼容方式无关,这个 tuple 也很蛋疼啊,过度设计 |
![]() | 64 Chrisplus 2017-06-29 15:58:03 +08:00 python 3 最大的原罪,就是他的名字叫 python 3 吧…… 如果叫 snake1 估计都没这么多口水 |
![]() | 65 ipwx 2017-06-29 16:08:24 +08:00 ![]() @gouchaoer 首先,(2,3) 是没有问题的,和 (2,3,) 同义。(2,) 才是强制要写的。你肯定记错了。要不就是 f((2,3)) 的用法。但是 f((2,3)) 也可以不加最后那个逗号呀。 其次,我实在是不懂你为什么这么仇视 Python。我从学习 Python 以来已经六年了,学会写 2&3 兼容性代码、setup.py 以及完善的单元测试也已经两年了。我用 Python 写过很多东西,从脚本到网站( Flask + Webpack + Vue.js ),再到深度学习的模型( TensorFlow ),体验一直都不错。 我现在写 Python 的代表性作品可以参考 https://github.com/korepwx/mlcomp/tree/dev 和 https://github.com/korepwx/tfsnippet/tree/dev。另外我还给 https://github.com/thu-ml/zhusuan 贡献了点代码。 (事实上 TFSnippet 就是我在用 ZhuSuan 的过程中感觉有些东西写不出来,所以仿写并改写的一个轮子)。 |
![]() | 66 northisland 2017-06-29 16:12:05 +08:00 via iPhone 优雅的 python 生了两个婊子,一个叫 2,一个叫 3 |
![]() | 67 gouchaoer 2017-06-29 16:19:50 +08:00 @ipwx 那的确是我记错了,我其实大学本科的时候还蛮喜欢 py 的,后来语言接触多了发现 py 的很多设计很糟,但是还是一堆人跪舔,如果我当初要选一门脚本语言入门的话绝不会选 py ;你要说我仇视 py 那就仇视吧,我指出的问题那是实实在在,就事论事 |
68 bytelee 2017-06-29 16:24:29 +08:00 如果让你用了 Swift 你还不去 apple 总部自焚 |
![]() | 69 ipwx 2017-06-29 16:40:41 +08:00 @gouchaoer 我的意见是这样的:我比较喜欢 Python,不是因为它语言有多好,而是因为它能很快完成我要做的一切事情。你看我要做的事情从 Web 开发(“写博客”遗留下来的爱好)到运维脚本(管实验室的服务器要用)到写深度学习的模型和在集群上调度实验脚本( PhD 的本职),样样都有。 我是不想开发个博客或者类似的 Web 应用就要去熟悉一下 C#、Java 或者 PHP 的程序栈,毕竟这只是我的爱好而不符合我的职业规划;我也不想学习 Bash 那种反人类的语法;至于深度学习就更别提了,靠谱的库全是 Python 的。 所以我喜欢用 Python,因为只有它能让我只熟悉一门语言就搞定所有事情。要不然,我还得同时维护好几个语言自己经常用的轮子代码吗? |
![]() | 70 ipwx 2017-06-29 16:43:35 +08:00 @gouchaoer 从我这样的需求出发看问题,你会觉得网上热捧那么多语言的人真是吃饱了撑着的。对我说的就是 OCaml、Haskell、Scala ……等各种语言的狂热爱好者,语法再好,功能再多,你能让我快快乐乐地写个 Deep Generative Model 吗? |
![]() | 72 ShindouHIkaru 2017-06-29 18:20:01 +08:00 @gouchaoer 为了埋这个伏笔,你也是蛮拼的。。。 |
73 l00t 2017-06-29 18:51:41 +08:00 所谓向下兼容的意思就是你得保留所有错误。 |
74 lrxiao 2017-06-29 18:53:39 +08:00 建议这楼里的人都好好看看 https://docs.python.org/3/whatsnew/3.0.html 并且看看里面提案的 PEP 是怎么写的... 举几个优点黑点 优点:unicode 新式类 新的字符串格式化方法 各种各样更优雅的语法 缺点: 性能慢了 与旧库难兼容 就指着个 print 瞎喷...233333 |
75 lrxiao 2017-06-29 18:57:20 +08:00 像 Py2 这种 True/False 都不是关键字 while(1)和 while(True)因为这个 VM 没法优化...这不是屎设计吗 |
79 mingyun 2017-06-30 00:19:34 +08:00 可能需要这个 pip install 3to2 |
![]() | 80 zjlin1984 2017-06-30 08:42:31 +08:00 看了很多评论 |
![]() | 81 Septembers 2017-06-30 11:05:18 +08:00 via iPhone @justtery 还有一种选择翻修这个库 |
![]() | 82 assad 2017-06-30 16:05:42 +08:00 我是来看评论的 |
83 RaymondLiu 2017-06-30 20:45:28 +08:00 via iPhone @ipwx 赞 我初学 python 一年 向你学习 |
![]() | 84 mathgl 2017-07-01 00:40:45 +08:00 壮士断腕 py2 是没料到有这么成功,想填坑发现已经太迟,于是开个新的...你要不要跟进就不好说了。 |
![]() | 85 Huozic 2017-07-01 17:01:18 +08:00 比较好奇楼主用的什么模块?已经用了 PY3 几年了,日常没遇过什么包不支持 PY3 了。 |