V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  fy  ›  全部回复第 52 页 / 共 69 页
回复总数  1376
1 ... 48  49  50  51  52  53  54  55  56  57 ... 69  
2016-05-08 15:27:18 +08:00
回复了 terence4444 创建的主题 Python i = i +1 写成 i += 1 有什么好处?
首先是看看字节码,好像区别不大

>>> import dis
>>> dis.dis('a += 1')
1 0 LOAD_NAME 0 (a)
3 LOAD_CONST 0 (1)
6 INPLACE_ADD
7 STORE_NAME 0 (a)
10 LOAD_CONST 1 (None)
13 RETURN_VALUE
>>>
>>> dis.dis('a = a + 1')
1 0 LOAD_NAME 0 (a)
3 LOAD_CONST 0 (1)
6 BINARY_ADD
7 STORE_NAME 0 (a)
10 LOAD_CONST 1 (None)
13 RETURN_VALUE
>>>

然后去看字节码解析,貌似一毛一样

ceval.c

TARGET(BINARY_ADD) {
PyObject *right = POP();
PyObject *left = TOP();
PyObject *sum;
if (PyUnicode_CheckExact(left) &&
PyUnicode_CheckExact(right)) {
sum = unicode_concatenate(left, right, f, next_instr);
/* unicode_concatenate consumed the ref to v */
}
else {
sum = PyNumber_Add(left, right);
Py_DECREF(left);
}
Py_DECREF(right);
SET_TOP(sum);
if (sum == NULL)
goto error;
DISPATCH();
}

TARGET(INPLACE_ADD) {
PyObject *right = POP();
PyObject *left = TOP();
PyObject *sum;
if (PyUnicode_CheckExact(left) && PyUnicode_CheckExact(right)) {
sum = unicode_concatenate(left, right, f, next_instr);
/* unicode_concatenate consumed the ref to v */
}
else {
sum = PyNumber_InPlaceAdd(left, right);
Py_DECREF(left);
}
Py_DECREF(right);
SET_TOP(sum);
if (sum == NULL)
goto error;
DISPATCH();
}

然后观察实现:

abstract.c

PyObject *
PyNumber_Add(PyObject *v, PyObject *w)
{
PyObject *result = binary_op1(v, w, NB_SLOT(nb_add));
if (result == Py_NotImplemented) {
PySequenceMethods *m = v->ob_type->tp_as_sequence;
Py_DECREF(result);
if (m && m->sq_concat) {
return (*m->sq_concat)(v, w);
}
result = binop_type_error(v, w, "+");
}
return result;
}


PyObject *
PyNumber_InPlaceAdd(PyObject *v, PyObject *w)
{
PyObject *result = binary_iop1(v, w, NB_SLOT(nb_inplace_add),
NB_SLOT(nb_add));
if (result == Py_NotImplemented) {
PySequenceMethods *m = v->ob_type->tp_as_sequence;
Py_DECREF(result);
if (m != NULL) {
binaryfunc f = NULL;
f = m->sq_inplace_concat;
if (f == NULL)
f = m->sq_concat;
if (f != NULL)
return (*f)(v, w);
}
result = binop_type_error(v, w, "+=");
}
return result;
}

于是我思考之后得出了结论:
他们有什么不同呢?最终调用的槽不同。

但是 python 代码来测试的结果,确实是 += 比 = + 快一点
2016-05-06 18:10:54 +08:00
回复了 xiaoshangmin 创建的主题 Python 看来要转行
缺库啊年轻人!那不是有-lxml2 的提示吗?明显是少 xml2 的开发库。

再说 lxml 这种东西, pip 里的装不上包管理器里也不会缺啊

传图懵逼个啥 新浪好用就新浪啊,多省时间。
2016-05-05 18:05:17 +08:00
回复了 chy373180 创建的主题 Vim 请教一下 什么让你放弃 vim 改用 neovim
@chy373180 - - 说起来 ycm 卡的要死……我用来写 python ,在自己辣鸡 vps 上试了一下 报警了
后端狗表示观察到 2015 年前端技术发生了非常大的变化,但是对于未来的发展我是相对中立的,我希望看到我用的技术发生一些符合我习惯的、简单好用的变化,但总体上说实用第一。
单独说 angular ,我是不太喜欢的。
2016-05-04 11:10:06 +08:00
回复了 yuankui 创建的主题 程序员 看到简历中称,熟悉 html, css, js 等语言的,有何感受。。
这种在后端程序员中很常见吧,我觉得算上是描述事实罢了,又不是“精通 XXX ”
2016-05-04 11:07:26 +08:00
回复了 est 创建的主题 Python uvloop: Make Python Networking Great Again 能对标 golang 的网络库
卧草 牛逼啊
2016-05-02 22:04:55 +08:00
回复了 Kaiyuan 创建的主题 分享创造 做了一个 Donate Page
nice 支持楼主。以后做开源项目摆碗收到钱了给楼主分一份 233
2016-05-02 22:02:08 +08:00
回复了 explist 创建的主题 Python 对网站源码使用正则式的疑问?
@aliipay 还好吧,其实也不怎么丑, css 选择器也可以用
2016-05-02 15:59:48 +08:00
回复了 explist 创建的主题 Python 对网站源码使用正则式的疑问?
@jarlyyn 我觉得没有必要假设网站的作者整天改 html ,以我的经验基本上一改就是全改, xpath 也好 css 选择器也好全都救不回来,老老实实重写。

正则当然是非常简单粗暴了,胜在方便熟练无依赖(lxml 需要二进制或者编译安装)。我觉得根据场景灵活选择吧,没有必要上纲上线。

@explist 匹配的时候,最后一个参数后面加上 re.DOTALL ,点就能匹配换行了
2016-05-02 00:41:19 +08:00
回复了 explist 创建的主题 Python 对网站源码使用正则式的疑问?
比较复杂的 html 就使用 lxml
而且说实话这种东西没什么复杂不复杂的,挂了就修,忘记了就重写,一个正则能顶个十天半个月的,你管他好不好看
2016-05-02 00:17:18 +08:00
回复了 onice 创建的主题 Linux 想换发行版了,经不起折腾了。大家给点建议
@Cu635 但是问题就在于,找开发者然后开发者跟我说爱用用不用滚怎么办,我能够不怎么折腾的装一个独立的特定版本编译器用来编译?
换个 Ubuntu 什么破事都没了
2016-05-01 21:27:21 +08:00
回复了 onice 创建的主题 Linux 想换发行版了,经不起折腾了。大家给点建议
@Cu635 那我要装软件被官方源卡版本怪我不会用吗?编译插件过不去,不得已把 GCC 单独切成新版结果不仅 GCC 成了 5.X ,一大坨系统库也跟着刷到了最新版,这也是不会用吗?
不好用就是不好用,没什么借口。
2016-05-01 21:05:30 +08:00
回复了 onice 创建的主题 Linux 想换发行版了,经不起折腾了。大家给点建议
@b0x 讲道理。。 xfce 那玩意曾经说最大优势是轻量级,如今还轻量吗?我曾经也是 xfce4 用户,后来偶然换桌面发现效率提升了一大截。
2016-05-01 14:42:59 +08:00
回复了 kofj 创建的主题 分享创造 逃离,亦或是在废土之探寻救赎。
右转朋友圈
2016-05-01 14:36:34 +08:00
回复了 onice 创建的主题 Linux 想换发行版了,经不起折腾了。大家给点建议
别用 Gentoo ,装软件恼火,慢不说,经常还得动手改配置。
别用 Debian ,版本库旧的一笔,开 testing 源的话干嘛不去用 Ubuntu ?
也别用 Centos ,同样是旧。
Arch 的话,确实不用考虑重装问题了,但安装配置起来确实挺麻烦的。

……所以最好用的反而是 Ubuntu 及其衍生版本了吗?新的 LTS 可以挺 5 年不重装了。
唯一的缺陷就是 Unity 窗口不好用,个人推荐 Gnome3 ,几通乱点掌握了奥义之后爽的飞起,而且 Ubuntu 换桌面也不折腾。

@onice
2016-05-01 00:19:57 +08:00
回复了 wruoxin 创建的主题 Python 仿 V2EX 模式用 Django 搭了一个英雄联盟社区,但是陷入迷茫
@pimin 时代变了!
2016-05-01 00:03:45 +08:00
回复了 wruoxin 创建的主题 Python 仿 V2EX 模式用 Django 搭了一个英雄联盟社区,但是陷入迷茫
@pimin 当年有人分析为什么中国 LOL 打不上去,抗压又背锅还是各种心理素质不行,分析到最后恍然大悟: LOL 没有 SG 呀!
2016-04-30 22:36:11 +08:00
回复了 467347544 创建的主题 游戏开发 egret 这款引擎前景如何,值得深入学习吗
我觉得很多功能缺失,但是官方都吹上天了
2016-04-30 15:12:23 +08:00
回复了 nladuo 创建的主题 问与答 有人用过移动硬盘装操作系统吗?
小时候装过,不过也只是玩 不正经用
1 ... 48  49  50  51  52  53  54  55  56  57 ... 69  
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2602 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 35ms · UTC 15:18 · PVG 23:18 · LAX 07:18 · JFK 10:18
♥ Do have faith in what you're doing.