• 我的python学习笔记


    (此文是在实际工程中遇到的一些小问题,给予解决和整理。解决方法大多来自网上零散的文章。有一个系统化的Python问题解决方案,来自《Python 3 学习笔记》雨痕著,其中对Python的工作细节进行了一些整理,很有参考价值。)

    1——如下代码,

    a=[1,2,3]
    b=a

    b也是[1,2,3]了,接着

    a[0]=4
    a[1]=5
    a[2]=6

    此时a变成[4,5,6]了,再看b,a变了之后没有对b进行新的引用,但b还是变了,自动的也变成[4,5,6]了。

    除非对a进行新的赋值,比如

    >>>a=[7,8,9]
    >>>a
    >>>[7,8,9]
    >>>b
    >>>[4,5,6]

     这是因为列表被定义为是可变类型,相对的是不可变类型。如Python文档所示:

    12

    3

    可以看到,不可变类型只有:数字,字符串,元组。其它的类型都是可以在名字不变的情况下,对其内容进行修改,并且会影响到其他引用它的变量。

     再比如:

     >>>a=[1]
     >>>c=[]
     >>>c.append(a)
    >>>c [[1]] >>>a.append(2) >>>c [[1,2]]

     1.1——父作用域属性不会影响到子作用域。

    >>> a = 0
    >>> a = [1]
    >>> c = (a)
    >>> type(c)
    list
    >>> c = (a, 1)
    >>> type(c)
    tuple
    >>> a.append(2)
    >>> c
    ([1, 2], 1)

    即元组不可变,但其内部的可变类型,如列表,可以随时改变

    2——当你需要引用一个数组的其中一部分,而此数组的长度是不确定的,导致你有可能引用的范围超过了它的长度,可以在引用范围中加上一个冒号:

    a_list = []            #此两行代码是正确的,不会报错
    b_list = a_list[-1:]   #比如-1后面的冒号

      此时如果使用b_list=a_list[-1],程序会报错,“IndexError: list index out of range”;再比如

      a_list 的长度随着程序的运行会变化,有可能是长3,也有可能变成5个元素,但必须保证b_list不能包含a_list的后面四个元素,

      此时可以使用

      b_list = a_list[:-4]

      这样,即使a_list==[1,2,3],b_list也能成功引用,结果是b_list==[] 。

    3——参数前加上单星号或双星号

    4——改变对象值的方法是没有返回值的。比如

    >>list_2 = list_1.reverse()
    >>print(type(list_2))
    >>NoneType
     
    
    
    >>
    >>list_2 = list_1.remove(n)
    >>print(type(list_2))
    >>NoneType
    >>
     
     

    5——

  • 相关阅读:
    PCRE
    [转]如何解决严重的拖延症
    linux系统编程:setjmp和longjmp函数用法
    AWK中几个变量
    关于fork函数
    go mod
    golang+read_file+call_shell+goroutine
    vim for galang
    Linux install go
    为Git branch 打Tag
  • 原文地址:https://www.cnblogs.com/oler/p/9528933.html
Copyright © 2020-2023  润新知