1. 易重构本节对一些Python重整的操作进行对比 。
1.1 有放回随机样本和无放回随机样本
【技巧大集合,熬夜总结53个Python使用技巧和攻击方法】私信小编01即可获取大量python学习资源
随机导入random.choices(seq, k= 1 )#长度为k的列表 , 有放回采样random.sample(seq, k)#长度为k的列表 , 无放回采样
1.2 lambda 函数的参数func = lambda y: x + y # x 的值在函数运行时被绑定func = lambda y, x=x: x + y # x 的值在函数定义时被绑定
1.3 拷贝与深拷贝import copy y = copy.copy(x)# 只复制最速y = copy . deepcopy(x)# 复制所有隐藏部分
复制和变量结合时 , 容易重新组合:a = [ 1 , 2 , [ 3 , 4 ]]#别名 。b_alias = a断言b_alias == a并且b_alias是一个# 浅拷贝 。b_shallow_copy = a[:]断言b_shallow_copy ==一个和b_shallow_copy就是 不一个和b_shallow_copy [ 2 ]是一个[ 2 ]# 深拷贝 。导入副本b_deep_copy = copy.deepcopy(a)断言b_deep_copy ==一个和b_deep_copy就是 不一个和b_deep_copy [ 2 ]是 不一个[ 2 ]
对异名的修改影响原变量 , (浅)复制中的元素是列表中的元素 , 而原变量是还原的进行复制 , 对还原的修改不影响原变量 。1.4 == 和是
x == y# 两引用对象是否有相同的值x 是 y# 两引用是否关联对象
1.5 判断类型type(a) == int# 忽略面向对象设计中的多态特征isinstance(a, int)# 考虑了面向对象设计中的多态特征
1.6 字符串搜索str.find(sub, start=None, end=None); str.rfind(...)# 如果找不到返回-1str.index(sub, start=None, end=None); str.rindex(...)# 如果找不到抛出ValueError异常
1.7 List 后向索引这个只是习惯问题 , 前向索引时下标从0开始 , 如果反向索引也想从0开始可以使用~ 。print(a[-1], a[-2], a[-3])print(a[~0], a[~1], a[~2])
2. C/C++ 用户使用指南不少 Python 的用户是从以前 C/C++ 迁移过来的 , 这两种语言在语法、代码风格等方面有些不同 , 本节简要进行介绍 。2.1 很大的数和很小的数C/C++ 的习惯是定义一个很大的数字 , Python 中有 inf 和 -inf:
a = float('inf')b = float('-inf')
2.2 布尔值C/C++ 的习惯是使用 0 和非 0 值表示 True 和 False , Python 建议直接使用 True 和 False 表示布尔值 。a = Trueb = False
2.3 判断为空C/C++ 对空指针判断的习惯是 if (a) 和 if (!a) 。Python 对于 None 的判断是:if x is None:pass
如果使用 if not x , 则会将其他的对象(比如长度为 0 的字符串、列表、元组、字典等)都会被当做 False 。2.4 交换值C/C++ 的习惯是定义一个临时变量 , 用来交换值 。利用 Python 的 Tuple 操作 , 可以一步到位 。
a, b = b, a
2.5 比较C/C++ 的习惯是用两个条件 。利用 Python 可以一步到位 。if 0 < a < 5:pass
2.6 类成员的 Set 和 GetC/C++ 的习惯是把类成员设为 private , 通过一系列的 Set 和 Get 函数存取其中的值 。在 Python 中虽然也可以通过 @property、@setter、@deleter 设置对应的 Set 和 Get 函数 , 我们应避免不必要的抽象 , 这会比直接访问慢 4 - 5 倍 。2.7 函数的输入输出参数C/C++ 的习惯是把输入输出参数都列为函数的参数 , 通过指针改变输出参数的值 , 函数的返回值是执行状态 , 函数调用方对返回值进行检查 , 判断是否成功执行 。在 Python 中 , 不需要函数调用方进行返回值检查 , 函数中遇到特殊情况 , 直接抛出一个异常 。
2.8 读文件相比 C/C++ , Python 读文件要简单很多 , 打开后的文件是一个可迭代对象 , 每次返回一行内容 。
with open(file_path, 'rt', encoding='utf-8') as f:for line in f:print(line)# 末尾的n会保留
2.9 文件路径拼接C/C++ 的习惯通常直接用 + 将路径拼接 , 这很容易出错 , Python 中的 os.path.join 会自动根据操作系统不同补充路径之间的 / 或分隔符:import osos.path.join('usr', 'lib', 'local')
2.10 解析命令行选项虽然 Python 中也可以像 C/C++ 一样使用 sys.argv 直接解析命令行选择 , 但是使用 argparse 下的 ArgumentParser 工具更加方便 , 功能更加强大 。2.11 调用外部命令虽然 Python 中也可以像 C/C++ 一样使用 os.system 直接调用外部命令 , 但是使用 subprocess.check_output 可以自由选择是否执行 Shell , 也可以获得外部命令执行结果 。
推荐阅读
- Go 语言 channel 的阻塞问题
- 风牌功夫红茶,功夫红茶历史
- 贾森·理查德森|盘点NBA5大理查德森
- 活页本介绍及选购技巧
- 综合橱柜品牌推荐十大排名
- 印度立普登红茶,印度大吉岭红茶的历史
- 天心茗茶大叶功夫红茶,功夫红茶历史
- 十年红茶,红茶的发展历史和状况
- 茉莉红茶历史,茉莉红茶功效与作用
- 6寸的蛋糕多大?