博客
关于我
Python黑魔法—学习笔记
阅读量:232 次
发布时间:2019-02-28

本文共 4951 字,大约阅读时间需要 16 分钟。

王炳明的学习笔记

小整数池

在同一行里,同时给两个变量赋同一值时,解释器知道这个对象已经生成,那么它就会引用同一个对象。如果分成两行的话,解释器并不知道这个对象已经存在,就会重新申请内存存放这个对象。


intern机制

intern机制用于优化Python程序的性能。这一机制通过将小块的代码或常量存储在内存中,使得在相同行内的多个变量引用同一个内存地址,避免重复分配内存。


site-packages和dist-packages

dist-packages是Debian系的Linux系统(如Ubuntu)使用的目录,用于存储通过apt安装的Python包。而site-packages则是通过pip或easy_install安装的Python包的默认目录。


argument和parameter

  • parameter:在函数定义时使用的变量名,属于函数的局部作用域。
  • argument:在函数调用时传递的实际参数,属于函数调用时的临时变量。

/usr/bin/python 和 /usr/bin/env python

  • /usr/bin/python:脚本或项目的入口文件的第一行通常包含#!/usr/bin/python,用于指定使用哪个Python解释器执行脚本。如果执行python,解释器会从文件系统中查找名为python的可执行文件。
  • /usr/bin/env python:执行env python时,解释器会依次查找/usr/bin/env路径下的python可执行文件。如果找不到,继续查找下一个路径。

空字典生成方法

在Python中,{}的生成速度比dict()快。这是因为{}是通过Python内置的字典生成器实现的,而dict()需要初始化一个空字典并进行内存分配。


return和try…finally

return语句用于从函数中返回一个值,而try…finally语句用于确保代码块执行后无论是否发生异常都能执行 cleanup代码。


IDE环境和CMD环境的区别

IDE(Integrated Development Environment,集成开发环境)和CMD(Command-line Interface,命令行界面)在运行结果上可能存在差异。IDE通常提供更友好的调试和错误处理功能,而CMD则更适合批量处理和脚本执行。


切片异常

在Python中,切片操作可能会抛出切片异常(SliceError),这通常发生在切片范围超出序列长度时。


查看包搜索路径的方法

可以使用importlib.sys.modulespkgutil.get_path等方法查看Python包的搜索路径。


安装包方法

安装Python包的常用方法是使用pip命令:

python3.6 -m pip install package_name

连接列表的方法

连接列表的常用方法包括:

  • 直接相加
    list1 + list2
  • 使用itertools.chain
    from itertools import chainlist(chain(list1, list2))
  • 使用∗∗解包
    [*list1, *list2]
  • 使用extend
    list1.extend(list2)
  • 使用列表推导式
    [x for x in list1 + list2]
  • 使用heapq.merge
    import heapqcombined = list(heapq.merge(list1, list2))

  • ##魔法方法

    在Python中,魔法方法(如__add__)定义了对象的行为,直接使用+运算符会调用对应的魔法方法。


    yield from方法

    yield from语句用于在生成器中逐步生成值,适用于处理嵌套结构或大量数据。


    合并字典的方法

    合并字典的常用方法包括:

  • 原地更新
    dict.update(other_dict)
  • 先解包再合并
    {**other_dict}
  • 使用itertools
    from itertools import chaindict(chain(other_dict.items()))
  • 使用ChainMap
    from collections import ChainMapChainMap(other_dict).dict()
  • 使用dict.items()
    dict_a.update(dict_b.items())

  • 判断是否包含子串的方法

    判断字符串是否包含子串的方法包括:

  • 使用in和not in
    'abcd'.find('bc') → 1
  • 使用find方法
    'abcd'.find('bc') → 1
  • 使用index方法
    'abcd'.index('bc') → 1
  • 使用count方法
    'abcd'.count('bc') → 1
  • 使用正则匹配
    import rere.search('bc', 'abcd').span() → (1, 2)

  • 装饰器入门

    装饰器是一种用于增强函数或类功能的机制,常用于日志记录、性能计时等场景。使用装饰器的步骤包括:

  • 定义一个装饰器函数。
  • 定义一个被装饰的函数或类。
  • 将装饰器应用到函数或类上。

  • 装饰器实例:日志打印器

    def logger(func):    def wrapper(*args, **kwargs):        print(f'开始执行:{func.__name__}')        func(*args, **kwargs)        print(f'函数执行完了。')    return wrapper@loggerdef add(x, y):    print(f'{x} + {y} = {x + y}')add(20, 30)

    装饰器实例:时间计时器

    import timedef timer(func):    def wrapper(*args, **kwargs):        t1 = time.time()        func(*args, **kwargs)        t2 = time.time()        print(f'花费时间:{t2 - t1}')    return wrapper@timerdef want_sleep(sleep_time):    time.sleep(sleep_time)want_sleep(10)

    类装饰器入门

    类装饰器通常实现__call____init__方法,常用于对函数或类进行增强。

    class Logger:    def __init__(self, level='INFO'):        self.level = level    def __call__(self, func):        def wrapper(*args, **kwargs):            print(f'[{self.level}]: {func.__name__}()是运行...')            func(*args, **kwargs)        return wrapper@Logger(level='WARNING')def say(something):    print(f'say {something}!')say('hello')

    描述符入门

    描述符用于控制属性的访问、设置和删除,常用于保护属性不被修改。

    class Student:    def __init__(self, name):        self.name = name    @property    def math(self):        return self._math    @math.setter    def math(self, value):        if 0 <= value <= 100:            self._math = value        else:            raise ValueError('值必须在0到100之间')

    上下文管理器入门

    上下文管理器通过__enter____exit__方法实现资源的管理,确保资源在异常发生时也能被妥善处理。

    class Resource:    def __enter__(self):        print('连接到资源...')        return self    def __exit__(self, exc_type, exc_val, exc_tb):        print('关闭资源连接...')        return Truewith Resource() as res:    res.operate()

    缓存机制

    使用functools.lru_cache实现函数缓存,可以显著提升函数调用的性能。

    from functools import lru_cache@lru_cache(maxsize=None)def add(x, y):    print(f'计算:{x} + {y}')    return x + yprint(add(1, 2))print(add(1, 2))print(add(2, 3))

    流式读取超大文件

    使用read方法时,可以通过指定块大小实现流式读取。

    def read_from_file(filename, block_size=1024 * 8):    with open(filename, 'r') as fp:        for chunk in iter(partial(fp.read, block_size), ''):            yield chunk

    自带的缓存机制

    Python的functools.lru_cache提供了一种简单的缓存机制,适用于函数调用的性能优化。


    延迟调用

    使用上下文管理器实现延迟调用。

    import contextlibdef callback():    print('B')with contextlib.ExitStack() as stack:    stack.callback(callback)    print('A')

    快速计算函数运行时间

    通过timeit库可以快速测试函数运行时间。

    import timeitdef run_sleep(seconds):    print(seconds)    time.sleep(seconds)print(timeit.timeit(lambda: run_sleep(2), number=5))

    标准错误输出到日志文件中

    可以使用上下文管理器将标准错误输出到日志文件。

    import sysimport contextliblog_file = 'test.log'def close_stdout():    raw_stdout = sys.stdout    file = open(log_file, 'a')    sys.stdout = file    yield    sys.stdout = raw_stdout    file.close()with close_stdout():    task()

    反转字符串/列表

    可以使用切片操作来反转字符串或列表。

    mstr = 'abcd'ml = [1, 2, 3, 4]mstr[::-1]ml[::-1]

    函数参数

    函数参数的默认值可以通过赋值语句来实现。

    def func(item, item_list=[]):    item_list.append(item)    print(item_list)func('iphone')func('xiaomi', item_list=['oppo', 'vivo'])func('huawei')

    转载地址:http://mpqs.baihongyu.com/

    你可能感兴趣的文章
    NFS安装配置
    查看>>
    NFS的安装以及windows/linux挂载linux网络文件系统NFS
    查看>>
    NFS的常用挂载参数
    查看>>
    NFS网络文件系统
    查看>>
    nft文件传输_利用remoting实现文件传输-.NET教程,远程及网络应用
    查看>>
    NFV商用可行新华三vBRAS方案实践验证
    查看>>
    ng build --aot --prod生成文件报错
    查看>>
    ng 指令的自定义、使用
    查看>>
    nghttp3使用指南
    查看>>
    Nginx
    查看>>
    nginx + etcd 动态负载均衡实践(三)—— 基于nginx-upsync-module实现
    查看>>
    nginx + etcd 动态负载均衡实践(二)—— 组件安装
    查看>>
    nginx + etcd 动态负载均衡实践(四)—— 基于confd实现
    查看>>
    Nginx + Spring Boot 实现负载均衡
    查看>>
    Nginx + uWSGI + Flask + Vhost
    查看>>
    Nginx - Header详解
    查看>>
    Nginx - 反向代理、负载均衡、动静分离、底层原理(案例实战分析)
    查看>>
    nginx 1.24.0 安装nginx最新稳定版
    查看>>
    nginx 301 永久重定向
    查看>>
    nginx css,js合并插件,淘宝nginx合并js,css插件
    查看>>