Python的高级用法
2023-4-28
| 2024-2-22
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password

*args 和 **kwargs

  • *是必要的, 后面的变量可以变换
  • *args 是用来发送一个非键值对的可变数量的参数列表给一个函数.
    • **kwargs允许你将不定长度的键值对, 作为参数传递给一个函数.
      • 如果你想在函数里同时使用所有这三种参数

        生成器(Generators)

        • yield
          • 生成器也是一种迭代器,但是你只能对其迭代一次。这是因为它们并没有把所有的值存在内存中,而是在运行时生成值。
          • 你通过遍历来使用它们,要么用一个“for”循环,要么将它们传递给任意可以进行迭代的函数和结构。
        • 许多Python 2里的标准库函数都会返回列表,而Python 3都修改成了返回生成器,因为生成器占用更少的资源。

        Map, Filter, Reduce

        • Map: 会将一个函数映射到一个输入列表的所有元素上。
          • Filter: 过滤列表中的元素,并且返回一个由所有符合要求的元素所构成的列表
            • Reduce: 当需要对一个列表进行一些计算并返回结果时使用

              Set数据结构

              • set与列表(list)的行为类似,区别在于set不能包含重复的值.
              • 检查列表中是否包含重复的元素
                • 交集(intersection): 你对比两个集合的交集(两个集合中都有的数据)
                  • 差集(difference): 找出无效的数据,相当于用一个集合减去另一个集合的数据
                    • 创建集合可以用{}, 不用set()

                    三元运算符

                    装饰器

                    • 原始版本
                      • 装饰器版本
                        • 存在问题, 不显示原函数名
                          • 添加 @wraps(a_func) (@wraps接受一个函数来进行装饰,并加入了复制函数名称、注释文档、参数列表等等的功能。)
                        • wrap 日志: 日志是装饰器运用的另一个亮点
                          • 还有详细logit构建, 发邮件啥的

                      对象变动 Mutation

                      • 不可变(immutable)对象
                        • int, string, float, tuple
                      • 可变(mutation)对象
                        • dict, list, set

                      slots

                      • 默认情况下Python用一个字典来保存一个对象的实例属性。这非常有用,因为它允许我们在运行时去设置任意的新属性。
                      • 然而,对于有着已知属性的小类来说,它可能是个瓶颈。这个字典浪费了很多内存。
                      • 使用__slots__来告诉Python不要使用字典,而且只给一个固定集合的属性分配空间。

                      虚拟环境(virtualenv)

                      • 如果你想让你的virtualenv使用系统全局模块
                        • 退出虚拟环境

                          容器 Collections

                          1. defaultdict
                              • 与dict不同, 你不需要检查key是否存在.
                              • 当你在一个字典中对一个键进行嵌套赋值时,如果这个键不存在,会触发keyError异常。 defaultdict允许我们用一个聪明的方式绕过这个问题。
                          1. counter
                              • Counter是一个计数器,它可以帮助我们针对某项数据进行计数。
                                • 统计文件
                                  • deque
                                    • deque提供了一个双端队列,你可以从头/尾两端添加或删除元素.
                                    • 可以像list一样用
                                      • 你还可以从任一端扩展这个队列中的数据:
                                      • 命名元组 (namedtuple)

                                    枚举 Enumerate

                                    对象自省

                                    • dir: 返回一个列表,列出了一个对象所拥有的属性和方法。
                                      • type: 返回一个对象的类型
                                      • id: 返回任意不同种类对象的唯一ID, 内存地址.
                                      • inspect: 获取活跃对象的信息

                                        列表推导式, 字典推导式, 集合推导式

                                        • list
                                          • dict
                                            • squared

                                              异常

                                              • try except
                                                • finally从句: 包裹到finally从句中的代码不管异常是否触发都将会被执行.
                                                  • try/else从句: 没有触发异常时运行

                                                    lambda表达式

                                                    for-else

                                                    • else从句会在循环正常结束时执行

                                                    使用C扩展

                                                    Open函数

                                                    • 读取一个文件,检测它是否是JPG(提示:这些文件头部以字节FF D8开始)

                                                    函数缓存

                                                    • 设置最多缓存最近多少个返回值
                                                    • 缓存多的话, 可重复调用的值, 节省运行时间
                                                    • cache_info() 用于查看缓存信息

                                                    上下文管理器

                                                    • 当异常发生时,with语句会采取哪些步骤。
                                                        1. 它把异常的type,value和traceback传递给__exit__方法
                                                        1. 它让__exit__方法来处理异常
                                                        1. 如果__exit__返回的是True,那么这个异常就被优雅地处理了。
                                                        1. 如果__exit__返回的是True以外的任何东西,那么这个异常将被with语句抛出。

                                                    bisect 数组二分查找算法

                                                    这个模块对有序列表提供了支持,使得他们可以在插入新数据仍然保持有序。对于长列表,如果其包含元素的比较操作十分昂贵的话,这可以是对更常见方法的改进。
                                                    bisect.bisect_left(axlo=0hi=len(a)*key=None)
                                                    在 a 中找到 x 合适的插入点以维持有序。参数 lo 和 hi 可以被用于确定需要考虑的子集;默认情况下整个列表都会被使用。如果 x 已经在 a 里存在,那么插入点会在已存在元素之前(也就是左边)。如果 a 是列表(list)的话,返回值是可以被放在 list.insert() 的第一个参数的。 返回的插入点 i 将数组 a 分成两半,使得 all(val < x for val in a[lo : i]) 在左半边而 all(val >= x for val in a[i : hi]) 在右半边。 key 指定带有单个参数的 key function 用来从数组的每个元素中提取比较键。 为了支持搜索复杂记录,键函数不会被应用到 x 值。 如果 key 为 None,则将直接进行元素比较而不需要中间的函数调用。 在 3.10 版更改: 增加了 key 形参。

                                                    python中的特殊方法

                                                    python中的特殊方法被python解释器调用, 我们一般不会亲自调用.
                                                    我们可以使用内置函数来使用. eg: __len()__实现后, 使用len()即可.
                                                    也有特殊方法的调用是隐式的. eg: for i in x, 使用的是内置函数iter(x).
                                                    详细见:
                                                    特殊(魔术)方法汇总一览表
                                                    notion image
                                                  • Python
                                                  • 神经网络介绍小米盒子 4c/4s 精简去广告
                                                    • Giscus
                                                    目录