zoukankan      html  css  js  c++  java
  • python学习笔记- 补遗

    1、extend 和 append区别

    extend 和 append区别
    #extend接受list参数,添加每个元素至原list尾端
    >>> l=[1,2,3]
    >>> id(l)
    63475272
    >>> l.extend(['a','b','c'])
    >>> l
    [1, 2, 3, 'a', 'b', 'c']
    >>> id(l)
    63475272
    
    #append接受任何参数,独立追加至list尾端
    >>> l=[1,2,3]
    >>> id(l)
    63473544
    >>> l.append(['a','b','c'])
    >>> l
    [1, 2, 3, ['a', 'b', 'c']]
    >>> id(l)
    63473544
    两函数过程不更改内存地址

     

    2、关于range()的几点

    函数原型:range(start, end, scan)
    参数含义:start:计数从start开始。默认是从0开始。例如range(5)等价于range(0, 5);
    
            end:技术到end结束,但不包括end.例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
     
            scan:每次跳跃的间距,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
    >>> list(range(10))
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> list(range(1,10))
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> list(range(1,10,3))
    [1, 4, 7]
    >>> list(range(-4,4))
    [-4, -3, -2, -1, 0, 1, 2, 3]
    >>> list(range(4,-4)) #start→ end(默认)一定是数轴正向迭代,4正向无法到达-4,空集list。
    []
    >>> list(range(4,-4,-1)) #scan负数表示反向迭代,于是可以实现。
    [4, 3, 2, 1, 0, -1, -2, -3]
    >>> list(range(4,-4,-2))
    [4, 2, 0, -2]

    3、关于for循环

      i、基本规则

    for...in适用于任意 可迭代序列:list、tuple、str、range()..
    
    <list>
    for i in[1,2,3]:
        print(i)
    1
    2
    3

    for programminglanguage in['c','java','python','PHP']:
       print(programminglanguage)
    c
    java
    python
    PHP
    <tuple> for i in(1,2,3): print(i) 1 2 3 <str> for i in'abc': print(i) a b c <range> for i in range(5): print(i) 0 1 2 3 4

      有一种通过 “序列索引迭代”

    1 seq=['c','java','python','PHP']
    2 for i in range(len(seq)):  #通过len函数获取seq元素数量,带入range()函数就得到一个seq内元素数量的序列,它等同seq的索引
    3     print(seq[i])
    4   
    #试着写个范式 list=['obj1','obj2','obj3']  
    for index in range(len(list)):
      print(list[index])

      ii 易错

    for i in range(5):  
        print i  
        i += 2  
        print i  
        print '一轮结束'  
    #每次循环 i 都被从新赋值,而不是继承上轮 i 值。
    while i < 5:  #while不会像for一样对i 重新赋值
        print i 
        i += 2 
        print i 
        print '一轮结束'

    4、关于‘无返回’与‘原地址’不变的错误辨析。

     曾经在某博客上看过一段分析‘add函数给set添加元素,原set不变’的文字,虽然论述是对的,代码却很诡异(我不敢说它是错的,但我的理解和它不一样),由此也想起一个小问题。

    1 a={'a','b','c','d'}
    2 b=a.add('e')
    3 c=a.add('a')
    4 print(a,type(a))
    5 print(b,type(b))
    6 
    7 #运行结果
    8 {'a', 'b', 'c', 'e', 'd'} <class 'set'>   #在集合里添加一个元素,不生成新的集合。
    9 None <class 'NoneType'>

    以上是它给的证明add不会生成新集合的代码。对此我怎么看都觉的诡异,于是自己试下

    1 >>> a={'a','b','c','d'}
    2 >>> a.add('e') 
     >>> #此行应得a.add('e')这个操作的返回值,但add和append、pop、get等函数一样是没有返回值的,或者说它返回一个none. 你强行给它赋值给一个变量b,然后输出b,只能得到none. b并不是a的引用!我想此处原文作者犯了一个逻辑上的错误
    3 >>> a 4 {'d', 'c', 'b', 'a', 'e'}

    如果想证明原作者的论述,应该这样写

    1 >>> a={'a','b','c','d'}
    2 >>> id(a)
    3 36603944
    4 >>> a.add('e')
    5 >>> a
    6 {'d', 'c', 'b', 'a', 'e'}
    7 >>> id(a)    #通过验证add操作前后的a的地址来证明
    8 36603944

    我想原作者本意论述是没错的,但写的代码不能证明论点。

  • 相关阅读:
    rsync文件备份同步
    程序员的家!我终于拥有自己的blog了!!!
    使用APMServ服务配置如何进行Wordpress本地伪静态设置
    清理Windows.edb文件释放C盘空间(原创)
    不知道按到什么键了,代码前面出现了省略号,使用Ctrl+E+S恢复
    (转)c/c++资源(源码,开发工具)
    EditPlus自动换行
    不用外部软件,直接对文件批量重命名(转)
    C# 实现自定义处理窗体按键(整理)
    C# 控件名称缩写介绍(转)
  • 原文地址:https://www.cnblogs.com/deepblue775737449/p/7709571.html
Copyright © 2011-2022 走看看