V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
V2EX  ›  keakon  ›  全部回复第 16 页 / 共 60 页
回复总数  1199
1 ... 12  13  14  15  16  17  18  19  20  21 ... 60  
2018 年 11 月 23 日
回复了 xbdsky 创建的主题 程序员 mysql10 分钟采集一百万条?要如何实现?
我 5 年前的笔记本电脑都能每秒插 1 万条到 innodb,不知道你们给这么多优化建议干啥…

楼主合并一下需要提交的记录,然后一起插入就行了。
2018 年 11 月 23 日
回复了 zynlp 创建的主题 全球工单系统 感觉网易云音乐的推荐质量越来越差了
目前觉得虾米音乐的「听见不同」频道比较好
2018 年 10 月 23 日
回复了 helloworld12 创建的主题 Go 编程语言 如何 检测 golang 协成的连续执行时间?
协程的三种写法。。
2018 年 10 月 15 日
回复了 zcsnbb 创建的主题 Python Python 如何实现 a = 10 或 20
a == 10 and a == 20 ?
实现 __eq__
2018 年 9 月 25 日
回复了 mengdodo 创建的主题 Redis 求大神解答 redis 还原计数的方式
https://redis.io/commands/incr
看官方文档的 Rate limiter
一个 ac68u,一个 r7000,刷的改版梅林,不过 ss、迅雷和百度网盘下载都不好用了,正考虑要不要换个固件
当然是让女朋友找 bug
2017 年 9 月 16 日
回复了 cevincheung 创建的主题 Python pycharm 怎么去掉这提示
文档字符串是放在函数名下面的。。
2017 年 9 月 6 日
回复了 asuka321 创建的主题 程序员 发现微博图片可以链接找到发图的人
@YORYOR 你对图片分库时,可以按 hash(url_token[:8]) 来分库,因为头 8 个字节是用户的 uid,所以单个用户的所有图片肯定在一个库里。
2017 年 9 月 5 日
回复了 asuka321 创建的主题 程序员 发现微博图片可以链接找到发图的人
这样实现应该是为了分库时,可以满足查询某个用户的所有图片,而不需要遍历所有库=。=
2017 年 9 月 4 日
回复了 cevincheung 创建的主题 Python Python 怎么优雅的做个 queue worker
想错了,又不是服务端,SO_REUSEPORT 都不用设置,直接多进程消费即可。
2017 年 9 月 4 日
回复了 cevincheung 创建的主题 Python Python 怎么优雅的做个 queue worker
理论上性能最好的方式是设置 SO_REUSEPORT,每个进程都去监听 beanstalk 的端口即可。不过需要手动改下客户端源码。
2017 年 9 月 2 日
回复了 f12998765 创建的主题 Python 为什么描述符不能定义为实例属性
先想想对象和类调用时,为什么传给 __get__ 的参数要不一样。再想想类也是对象,如果要满足你的设定,__get__ 的参数就得一样了。
2017 年 8 月 31 日
回复了 f12998765 创建的主题 Python 为什么描述符不能定义为实例属性
https://docs.python.org/3/howto/descriptor.html#invoking-descriptors

For objects, the machinery is in object.__getattribute__() which transforms b.x into type(b).__dict__['x'].__get__(b, type(b)). The implementation works through a precedence chain that gives data descriptors priority over instance variables, instance variables priority over non-data descriptors, and assigns lowest priority to __getattr__() if provided. The full C implementation can be found in PyObject_GenericGetAttr() in Objects/object.c.

For classes, the machinery is in type.__getattribute__() which transforms B.x into B.__dict__['x'].__get__(None, B).
2017 年 8 月 27 日
回复了 saximi 创建的主题 Python 请教一个关于元类的问题
1. callable 的检查是查看它的类型是否有 tp_call: x->ob_type->tp_call != NULL。
而 type 在它的 C 实现里,将 tp_call 设为了之前我提到的 type_call 函数。
而且 type 的类型也是 type,所以 type 的类型实现了 tp_call,因此它是 callable 的。

3. 生成的那个 Meta1 实例就是 Meta2。接着 type.__call__ 调用了 Meta1 定义里的 __new__ 和 __init__ 对 Meta2 进行初始化。

4. 定义 Spam 类时,不会再调用 Meta1(),因为你传入的是 metaclass=Meta2,而不是 metaclass=Meta1(...)。
不是因为 Meta2 已经生成了,所以不需要重新生成,而是你传入的就是 Meta2 这个对象,而不是再传入一个新的 Meta1 类的实例。

5. 同上。
2017 年 8 月 27 日
回复了 saximi 创建的主题 Python 请教一个关于元类的问题
类在声明时定义了 __call__ 方法后,它的实例才是 callable 的。
元类都继承自 type,type 定义了 __call__ 方法。类是元类的实例,所以类都是 callable 的。元类也是 type 的实例,也是类,所以也是 callable。
2017 年 8 月 27 日
回复了 saximi 创建的主题 Python 请教一个关于元类的问题
2017 年 8 月 27 日
回复了 saximi 创建的主题 Python 请教一个关于元类的问题
其实不需要理解,只是 Python 是这样实现的。
你去看它的 C 实现,调用时会先用 __new__ 方法去生成一个对象,如果这个对象是目标类的实例,就再调用 __init__ 方法,否则直接返回。其他面向对象的语言也需要某种机制去调用父类的构造函数,至于是 runtime 或编译器自动做的,还是手写,就看语言的设计者了。
实际使用中你根本不会有 override type.__call__ 的需求,元类的 __new__ 已经能干任何事了,它连签名都和 __call__ 一样,只是不会自动调用 __init__ 而已。
另外,type.__call__() 等效于 type()。
2017 年 8 月 27 日
回复了 saximi 创建的主题 Python 请教一个关于元类的问题
1. Meta2 是 callable,不是因为它定义了 __call__ 方法,而是它的父类( Meta1 )定义了 __call__ 方法。
另外,__new__ 和 __init__ 是由 type.__call__() 负责调用的。
2. 假设 obj 是 Cls 类的实例,obj() 等效于 obj.__call__(),等效于 Cls.__call__(obj)。
或者更通用点,obj.f(1) 等效于 Cls.f(obj, 1)。
这个语法实现在 Python 文档里有描述(搜「 Instance methods 」): https://docs.python.org/3/reference/datamodel.html
实现原理是用 descriptor,详细实现可以参考: https://www.keakon.net/2009/12/08/%E7%94%A8Descriptor%E5%AE%9E%E7%8E%B0%E5%8F%A6%E4%B8%80%E7%A7%8D%E9%A3%8E%E6%A0%BC%E7%9A%84Decorator
2017 年 8 月 26 日
回复了 saximi 创建的主题 Python 请教一个关于元类的问题
你先理解元类是类的类,元类的实例是类。

所以在定义 Meta2 时( class Meta2(type, metaclass=Meta1)),实际上是生成了一个 Meta1 的实例,就需要调用 Meta1 的 __new__ 和 __init__。
而在定义 Spam 时( class Spam(Eggs, metaclass=Meta2)),需要生成一个 Meta2 的实例作为 Spam 类,也就是执行
Meta2()。Meta2 是个 callable 的对象,调用它实际上是调用 Meta2.__call__(...),这个调用又会被转变成 Meta1.__call__(Meta2, ...)。而你在这个方法里调用了 type.__call__(),这个方法会负责去调用 Meta2.__new__() 和 Meta2.__init__()。

最后,Meta1.__call__() 是负责创建 Meta2 的对象的,Meta2.__call__() 是负责创建 Spam 的对象的。在执行 Spam() 时,Meta2 已经在定义 Spam 类时就被创建过了,创建 Spam 的对象时不需要再调用 Meta1.__call__() 创建新的 Meta2,而是直接使用已有的 Meta2 创建 Spam 的对象。
1 ... 12  13  14  15  16  17  18  19  20  21 ... 60  
About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   909 Online   Highest 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 24ms · UTC 21:39 · PVG 05:39 · LAX 14:39 · JFK 17:39
♥ Do have faith in what you're doing.