1
lhx2008 2019-02-21 23:19:36 +08:00 via Android
python 完全可以写 callback,js 是不得不写 callback,本质的原因是 js 的调度模型是事件驱动的,必须把事件行为提前注册
|
2
ysc3839 2019-02-21 23:20:27 +08:00 via Android
JavaScript 是配合网页使用的时候回调才多吧? Python 程序的架构一般是从头执行到尾结束的。而网页中 JavaScript 不是这样,是根据事件来执行的,所以需要回调。
|
3
1762628386 2019-02-21 23:20:31 +08:00
js 事件驱动 必须写 callback
|
4
murmur 2019-02-21 23:27:52 +08:00
python 如果是事件驱动也要 callback 的
|
5
ipwx 2019-02-21 23:43:35 +08:00
https://www.tornadoweb.org/en/stable/iostream.html#tornado.iostream.BaseIOStream.write
Python 当年著名的库,同样回调地狱。 当然,Python 3.5+ 拥抱 async 了,就没有回调地狱了。 |
6
dearxe2v 2019-02-21 23:46:49 +08:00
能把函数赋值给变量,都可以产生这种现象
|
7
misaka19000 2019-02-22 00:16:05 +08:00 via Android
因为 python 有多线程和协程可以用
|
8
terence4444 2019-02-22 00:19:24 +08:00
不是特别了解,不过 callback 不是异步的时候才用的么?
Python 的异步处理不是强项,所以用得少么? |
9
40huo 2019-02-22 00:56:13 +08:00 via Android
twisted 就是回调
|
11
so1n 2019-02-22 01:12:51 +08:00 via Android
看你用啥异步类型
|
12
icylogic 2019-02-22 01:14:10 +08:00 via iPhone 7
Python 当然有 callback,任何事件驱动的框架都或多或少需要。但为什么很少有”长得像 callback hell 的代码”,有一点很实际的:python 的匿名函数故意设计成不支持多行的,闭包捕获也设计成受限的形式, 所以要求你每次想传一个不方便在一行内表达的函数,就得起个名字。python 程序员或许称之为 pythonic,进一步可以参考下 GvR 为什么要这样设计。
即使是 java 这样的语言,遇到大量复杂的事件场景,依然会出现 Handler.OnEvent(event e) 这样的设计,这种形式与提供轻量级的 callback 相比是各有优劣的。 从语言本身来说,越是依赖于把一块有名字的内存改来改去的语言 /范式,可能越适用于前者,因为这种语言的捕获往往是 bugprone ( by ref,需要解决生命周期或者作用域) / poor perfomance ( by copy ),一般需要专门有个框架来给你处理这种事。当然有的语言和平台直接把框架做进基础库了。 而对 closure,pure function 等概念有精良设计的语言,就可以鼓励程序员多用 callback。括号就可以叠很多层。 还有一些觉得程序员很聪明的语言,会把这两种方式都拿出来给你用,你自己去管理到底怎么用 closure,到底用哪种方式。所以这些语言的程序员就可以把它们搅和在一起,写出彼此都看不懂的代码。 现在我们发现大部分程序员其实没有那么聪明,只能写好同步的代码,于是现代语言纷纷加上了 async 关键字,这样你就可以用同步的方式写异步的代码了(理想)。这件事的一个积极意义在于,大家终于发现自己一直在用扭曲的方式实现本来就应该由编译器 /runtime 干的事。 |
13
iyangyuan 2019-02-22 10:21:26 +08:00
人家这叫“高阶函数”
|
14
Qzier 2019-02-25 15:45:23 +08:00 via iPhone
你如果用 python 写 gui,也是事件驱动型,一样要写回调,不过在 qt 中不这么叫,叫信号和槽。
|