• * 和** 的使用及关于赋值


    1. * 和 ** 的用法

    • 函数定义时接收不定长参数

        def foo(*args, **kwargs):
            pass
       
    • 参数传递

        def foo(x, y, z, a, b):
            print(x)
            print(y)
            print(z)
            print(a)
            print(b)
        lst = [1, 2, 3]
        dic = {'a': 22, 'b': 77}
        foo(*lst, **dic)
       
    • import * 语法

      • 文件 xyz.py

          __all__ = ('a', 'e', '_d')
          a = 123
          _b = 456
          c = 'asdfghjkl'
          _d = [1,2,3,4,5,6]
          e = (9,8,7,6,5,4)
         
      • 文件 abc.py

          from xyz import *
          print(a)
          print(_b)
          print(c)
          print(_d)
          print(e)
         

    2. Python 的赋值和引用

    • ==, is: == 判断的是值, is 判断的是内存地址 (即对象的id)

    • 小整数对象: [-5, 256]

    • copy, deepcopy 的区别

      • copy: 只拷贝表层元素

      • deepcopy: 在内存中重新创建所有子元素

    • 练习1: 说出执行结果

        def extendList(val, lst=[]):
            lst.append(val)
            return lst
        list1 = extendList(10)
        list2 = extendList(123, [])
        list3 = extendList('a')
       
    • 练习2: 说出下面执行结果

        from copy import copy, deepcopy
        from pickle import dumps, loads
        a = ['x', 'y', 'z']
        b = [a] * 3
        c = copy(b)
        d = deepcopy(b)
        e = loads(dumps(b, 4))
        b[1].append(999)
        b.append(777)
        c[1].append(999)
        c.append(555)
        d[1].append(999)
        d.append(333)
        e[1].append(999)
        e.append(111)
       
    • 自定义 deepcopy:   my_deepcopy = lambda item: loads(dumps(item, 4))

  • 相关阅读:
    java的内部编码
    visual studio 快捷键
    C# ref和out总结
    C#函数3递归
    链表操作 两个链表间的相交性问题
    链表操作 有环链表问题
    链表操作 模拟问题
    链表操作 未排序链表的处理问题
    jjQuery 源码分析1: 整体结构
    jQuery 源码分析3: jQuery.fn/ jQuery.prototype
  • 原文地址:https://www.cnblogs.com/gugubeng/p/9755191.html
Copyright © 2020-2023  润新知