zoukankan      html  css  js  c++  java
  • 原来,一直没有完全理解range()函数


    欢迎关注本人博客:云端筑梦师

    首先,先来看一下网上教程range()的用法。
    语法
    range(start, stop[, step])
    参数

    • start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
    • stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5;
    • step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1).

    实例
    示例代码:

    >>>range(10)        # 从 0 开始到 10
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> range(1, 11)     # 从 1 开始到 11
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    >>> range(0, 30, 5)  # 步长为 5
    [0, 5, 10, 15, 20, 25]
    >>> range(0, 10, 3)  # 步长为 3
    [0, 3, 6, 9]
    >>> range(0, -10, -1) # 负数
    [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
    >>> range(0)
    []
    >>> range(1, 0)
    []
    

    看到这里你是不是觉得已经掌握了range()函数呢,起初我也是这么认为的,直到今天,看到这样一段代码,我才知道事情没有那么简单,先贴代码:

    pattern='asda'
    f = lambda s: list(map({}.setdefault, s, range(len(s))))
    print(f(pattern))
    

    大家觉得这段代码会打印出什么呢?起初小编认为应该打印出[0,1,2,3],因为字符串长为4,所以应该打印出range(4),但是,控制台的结果却是这样的:
    [0, 1, 2, 0]
    和我所想的完全不一样,苦思冥想了半天,终于发现问题出在range()函数上,我们不妨先来看这样一段代码:

    def a(b,d):
        print('b=',b,'d=',d)
    
    list(map(a,'abcd',range(4)))
    

    输出:

    b= a d= 0
    b= b d= 1
    b= c d= 2
    b= d d= 3
    

    看到这里应该思路就明了了,当range()函数和map()函数嵌套使用时,range()函数里的值会一个一个迭代出来,而不是每次都是d=range(4),即map()函数每映射一次,range(4)从0开始递增一直到3,现在再来看一下上面那段代码,第一次映射,range(4)为0,字典里没有字母a,于是给字典绑定键值对{a:0},并返回键值0,第二次映射,range(4)为1,以此类推,字典没有s绑定键值对{s:1}并返回键值1......到第四次,字典里已经有a关键字了,于是不再给他绑定值,setdefault()函数就返回a的键值0,于是,setdefault()返回的值就依次是0,1,2,0,符合控制台打印的值。怎么样,是不是很神奇,小编的也是问了大佬才知道的,有兴趣的可以联系小编找到这位大佬噢!嘿嘿,新手上路,多多指教!

    初心易得,始终难守。
  • 相关阅读:
    BootStrap弹出框插件popover简单实例
    peity(jQuery 插件可以将元素内容转换为一个小的 <svg> 饼图,圆环图,条形图和折线图)
    java生成API文档
    搭建eova开发环境
    搭建jfinal+maven框架
    注解Annotation
    【转】hive时间函数
    [hive][转]hive修改 表/分区语句
    【java findbugs集锦】【转】May expose internal representation by incorporating reference to mutable object
    [java学习笔记]继承和组合
  • 原文地址:https://www.cnblogs.com/Aurora-Twinkle/p/8666769.html
Copyright © 2011-2022 走看看