Python Tips

Python使用小技巧,不定期更新。

iterable对象相关

Python中很多操作对象都可以是iterable对象,iterable对象是能被内建函数iter()接收作为参数的对象,包括常用的listtupledictstr等。

使用列表表达式

别再反复写for ... in ...:从旧list生成新list了!由iterable对象生成新iterable对象时,请使用列表解析式!形式:

1
2
# 更简单生成一个新iterable对象
new_list = [foo(item) for item in old_list if cond_exp] # if条件可加可不加

for遍历带序号

可以配合内建函数enumerate()可以带序号的for遍历:

1
2
for i, item in enumerate(item_list, start=0): # 默认start=0,从第一个元素开始
print(i, item)

lambda表达式的应用

lambda表达式只应该用来写非常简单的函数,作为表达式而非代码块!

对list按照指定元素排序

使用内建函数sorted()对list进行排序,返回排序后的新list。

1
2
3
lst = ['abc3', 'def1', 'ghi9', 'jkl2', 'mno5']
sorted_lst = sorted(lst, key=lambda x: x[-1]) # key决定排序使用的对象,与lambda表达式合用
print(sorted_list) # 输出['def1', 'jkl2', 'abc3', 'mno5', 'ghi9']

argparse模块的基本用法

使用argparse进行python命令行参数解析:

1
2
3
4
5
6
import argparse
import sys
parser = argparse.ArgumentParser() # 新建parser对象
parser.add_argument() # 增加新的parse flag
parser.print_help() # 显示help menu
args = parser.parse_args(sys.argv[1:]) # 忽略文件名,从第二个参数开始以list形式读入参数

常用参数说明

这里列出几个常用参数说明,更多查阅官方文档。

  1. argparse.ArgumentParser()
    • usage:显示在help menu中的用法,如下面的字符串:
      python demo.py [-h] --input <input_path>
    • description:字符串,程序的介绍
  2. parser.add_argument()
    • 第一个参数:flag字符串,如'--input'
    • type:字符串,flag对应参数的类型
    • help:字符串,在help menu里显示的flag说明
    • required:布尔值,是否为必要参数
    • dest:字符串,进行解析后返回args对象中对应flag参数的属性名

定位参数与可选参数

parser.add_argument()创建新flag时,使用'-''--'开头对应可选参数,分别为短名称与场名称,实际没有输入可选参数时flag对应参数为None;不使用上述两种符号开头的flag为定位参数,按照输入顺序进行解析。

比如sum.py有两个定位参数xy,将两数相加,此外有一个可选参数--save_to决定将输出保存到某处。

使用方式可以写成:python sum.py [-h] x y [--save_to <save_path>]

有可选参数时:

1
python sum.py 1 2 --save_to ./result/

命令行输出答案,并将输出保存到./result/

不加可选参数:

1
python sum.py 1 2

只在命令行输出结果。