• 有趣的赋值,了解一下


    python 随笔

    业余 python 爱好者又上线了,离上次发博过去几个月了,真的是懒!
    期间完成了一段目前为止最完整、效果良好、800 多行的小游戏代码,由于运维工作忙,抽时间再将其详尽的分享出来。
    此次更博,是想把之前的笔记在此做一个简略的记录,还是因为懒。

    笔记内容

    1. 不是想象中的赋值
    2. 生成器 与 列表生成式

    1. 不是想象中的赋值
      废话少说,先看代码
    # 请看第一段代码
    def fibs(n=10):
        a, b = 0, 1
        result = []
        for i in range(n):
            a, b = b, a+b
            result.append(a)
        return result
    # 直接调用,验看结果
    fibs()
    [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]  # 结果
    # 再看第二段代码
    def fibs(n=10):
        a, b = 0, 1
        result = []
        for i in range(n):
            a = b
            b = a + b
            result.append(a)
        return result
    # 直接调用,验看结果
    fibs()
    [1, 2, 4, 8, 16, 32, 64, 128, 256, 512] # 结果

    原来我以为 python 迭代的那种赋值方式是为了便捷、美观,看来是和惯性思维是有出入的。

    a, b = b, a+b

    这种方式是先计算完 “=” 右边的值,再赋给左边的参数,比如这里 a = 0 b = 1 a+b=1 ,赋值后 a = 1 b = 1,所以第一段函数出现正确的斐波那契数列。

    a = b
    b = a + b

    这更简单,其实就是 b 反复和自己相加,最后赋值给 a .不明白自己原来为什么以为这两种赋值方式是一样的,傻~

    2 生成器 generator 与 列表生成式
    列表生成式对于 Python 患者应该很熟悉了,简约大方又聪明。

    [demo ** 2 for demo in range(1, 10) if demo % 2 == 0]
    求 10 以内的偶数的平方
    [4, 16, 36, 64]

    生成器 (generator),引自廖雪峰 Python 生成器 的描述,它可以和列表生成式一样,用一个简单的带 “()” 的式子生成,然后用 next() 来取值,直到超出索引范围,抛出一个停止迭代的报错 StopIteration。

    temp = (x ** x for x in range(1, 5))
    temp 保存的是个算法,如下:
    temp
    <generator object <genexpr> at 0x0000000005616AF0>
    next(temp)
    1
    4
    27
    256
    Boom……(此时炸了,不复制了)

    另一个重要的语句 yield,常会用这个工具制作生成器。yield 的作用就是把一个函数变成一个 generator,调用函数时返回的是一个可迭代的对象。生成器用 for 循环进行遍历,不会抛出异常。

    小记

    断断续续学了这么久,还是能看到好多新鲜的知识点,应该保持一个学习并记录的习惯!

  • 相关阅读:
    Android 一步步实现TCP客户端
    Docker 到底是什么?
    Java中的包机制
    一张图理解github
    Git 提交代码流程理解
    STM32+OV7670(带FIFO)+上位机
    | + logger
    使用 TCP 实现 HTTP
    高阶函数与函数的柯里化
    Python装饰器
  • 原文地址:https://www.cnblogs.com/nimo97/p/9704765.html
Copyright © 2020-2023  润新知