本文共 5044 字,大约阅读时间需要 16 分钟。
在同一行里,同时给两个变量赋同一值时,解释器知道这个对象已经生成,那么它就会引用同一个对象。如果分成两行的话,解释器并不知道这个对象已经存在,就会重新申请内存存放这个对象。
intern机制用于优化Python程序的性能。这一机制通过将小块的代码或常量存储在内存中,使得在相同行内的多个变量引用同一个内存地址,避免重复分配内存。
dist-packages是Debian系的Linux系统(如Ubuntu)使用的目录,用于存储通过apt安装的Python包。而site-packages则是通过pip或easy_install安装的Python包的默认目录。
#!/usr/bin/python,用于指定使用哪个Python解释器执行脚本。如果执行python,解释器会从文件系统中查找名为python的可执行文件。env python时,解释器会依次查找/usr/bin/env路径下的python可执行文件。如果找不到,继续查找下一个路径。在Python中,{}的生成速度比dict()快。这是因为{}是通过Python内置的字典生成器实现的,而dict()需要初始化一个空字典并进行内存分配。
return语句用于从函数中返回一个值,而try…finally语句用于确保代码块执行后无论是否发生异常都能执行 cleanup代码。
IDE(Integrated Development Environment,集成开发环境)和CMD(Command-line Interface,命令行界面)在运行结果上可能存在差异。IDE通常提供更友好的调试和错误处理功能,而CMD则更适合批量处理和脚本执行。
在Python中,切片操作可能会抛出切片异常(SliceError),这通常发生在切片范围超出序列长度时。
可以使用importlib.sys.modules或pkgutil.get_path等方法查看Python包的搜索路径。
安装Python包的常用方法是使用pip命令:
python3.6 -m pip install package_name
连接列表的常用方法包括:
list1 + list2
from itertools import chainlist(chain(list1, list2))
[*list1, *list2]
list1.extend(list2)
[x for x in list1 + list2]
import heapqcombined = list(heapq.merge(list1, list2))
##魔法方法
在Python中,魔法方法(如__add__)定义了对象的行为,直接使用+运算符会调用对应的魔法方法。
yield from语句用于在生成器中逐步生成值,适用于处理嵌套结构或大量数据。
合并字典的常用方法包括:
dict.update(other_dict)
{**other_dict} from itertools import chaindict(chain(other_dict.items()))
from collections import ChainMapChainMap(other_dict).dict()
dict_a.update(dict_b.items())
判断字符串是否包含子串的方法包括:
'abcd'.find('bc') → 1 'abcd'.find('bc') → 1 'abcd'.index('bc') → 1 '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/