V2EX 首页   注册   登录
 NoAnyLove 最近的时间轴更新

NoAnyLove

  •   V2EX 第 207963 号会员,加入于 2016-12-28 06:36:26 +08:00,今日活跃度排名 5564
    NoAnyLove 最近回复了
    1 天前
    回复了 csdreamdong 创建的主题 Python Python list 根据百分比切成若干个。
    直接用方括号切片,如果我没记错的话,是一定会产生一个新的 copy 的。。。。。。
    1 天前
    回复了 Kakarrot 创建的主题 Python Python 如何控制 windows 系统服务?
    当年学 Ruby On Rails 的时候,不记得是教材里面讲的,还是老师说的:“ Ruby On Rails 和 Ruby 可以算作两个东西,所以即使你不会 Ruby,学习 Ruby On Rails 也不会有难度”。。。。。大概是这么的一段话,反正总体意思和#2 楼差不多
    @keakon 非常干感谢你的回复,我反复读了很多遍,感觉明白了很多。我本来纠结的是功能上为啥需要 generator-based coroutine,不过你从逻辑上说明了为啥需要 generator-based coroutine,让我也有种豁然开朗的感觉。

    《 How the heck does async/await work in Python 3.5?》也提到如果只是和事件循环打交道,其实不用关心这些细节,因为框架 API 会帮助我们处理这些细节。不过我刚好对为啥不能通过 async 定义的协程来实现 asyncio.sleep()比较好奇,所以想研究一下。

    我的感觉上是,最底层的协程,必须要通过`yield`或者`yield from`语句,将执行流程转交给处于调用最顶层的事件循环。从调试 step in 跟进的结果来看,await 语句不会捕获`yield`或者`yield from`返回的值,这个值会被传递给事件循环,也就是调用`coro.send(None)`的地方。如果最底层的函数也是通过`async def`定义的,那么将没有办法把执行流程转移给事件循环。

    考虑到“暂停并强制性返回给事件循环”,我想到其实还可以抛出异常,因为异常如果没有捕获就会向上传递,可以被事件循环捕获到。结果试了一下不行,才想起异常抛出后,虽然会向`yield`或者`yield from`一样暂停当前执行,但是不会从抛出异常的地方继续自行,Orz
    3 天前
    回复了 justou 创建的主题 Python 踩了个陷阱: Python bitwise ~ vs. C bitwise ~
    因为 Python 的 int 是无限长度的,如果对一个正整数取反,会变成负数,你可以认为符号位是无限长度的 1:

    ```
    >>> mask = 0xFF
    >>> bin(mask)
    '0b11111111'
    >>> ~mask
    -256
    >>> bin(~mask)
    '-0b100000000'
    ```

    `bin(~mask)`返回结果'-0b100000000',前面的`-0`就是相当于无限长度的符号位,如果用 Two ‘ s Complement 来表示就全是 1.

    解决这个问题也很简单,将结果按位与 0xFFFFFFFF (刚好 32 位 bit )运算,就可以消除掉超过 32 位的无限长度的符号位。

    ```
    >>> ~mask & 0xFFFFFFFF
    4294967040
    >>> hex(_)
    '0xffffff00'
    ```
    @shyling accepted 的那个答案,投票为 0,明显是错误的,两者并不是完全没有区别。另一个比较可靠一点的说明在这里<https://stackoverflow.com/questions/40571786/asyncio-coroutine-vs-async-def>

    @gnaggnoyil `asyncio.Future`可以用于`await`语句,它有实现`__await__()`方法。

    我用 pudb 调试《 How the heck does async/await work in Python 3.5?》中最后给出的那个 Example。从代码的运行流程来看,Example 中 sleep 协程的`actual = yield wait_until`语句有点像 Exception 的感觉,step in 会跳回到`waited = await sleep(1)`,再一次 step in,就会像 Exception 没有被处理继续 propagate 一样,跳到了事件循环`run_until_complete`函数中。

    感觉还有点混乱。
    @shyling 以`async def`声明的函数算作 native coroutine,不算 generator-based 的协程
    对比一下,美亚好到什么程度(我道听途说的)。听说有个学姐本来想在美亚订两袋方便面,结果下错了单订成了两箱。收货的时候收到了两大箱整个人都惊呆了,然后联系客服问能不能退货。客服说:你不用退货了,我直接给你全额退款,那两箱你就留着吃吧。美亚客服就是这么任性。。。。。
    5 天前
    回复了 SimbaPeng 创建的主题 Python 谁能确切的解释一下这是为什么?
    我一定是遇到了一个假 Python ( 2.7.10 和 3.5.1 ):

    ```
    >>> def test():
    2 a = []
    3 print(id(a))

    >>> test()
    990348293256

    >>> test()
    990355193096

    >>> test()
    990352013960
    ```
    DigitalOcean
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   2196 人在线   最高记录 2607   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.7.5 · 25ms · UTC 08:40 · PVG 16:40 · LAX 01:40 · JFK 04:40
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1