zoukankan      html  css  js  c++  java
  • 有趣的赋值,了解一下

    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 循环进行遍历,不会抛出异常。

    小记

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

  • 相关阅读:
    宝塔面板连接数据库失败
    fastadmin上线部署中遇到访问路径问题
    宝塔部署时,出现“open_basedir restriction in effect”错误
    layui hint:upload is not a valid module
    thinkphp--控制器怎么分配变量到公共模板
    jquey click事件无效
    1.31 SVN代码版本控制
    8.1 性能优化简介
    5.31 Nginx最全面知识
    4.115 Spring的事务管理
  • 原文地址:https://www.cnblogs.com/nimo97/p/9704765.html
Copyright © 2011-2022 走看看