os 篇
os.listdir(path)
以下代码在 windows 和 linux 上跑结果会不一样:
import os
path = 'wuliytTaotao'
if not os.path.exists(path):
os.mkdir(path)
# 创建22个文件
for i in range(22):
f = open(os.path.join(path, 'file_%02d.txt' % i), 'w')
f.write(str(i))
f.close()
print(os.listdir(path)) # 在 windows 和 linux 上结果不一样,windows 上有序,而 linux 上无序
print(sorted(os.listdir(path))) # 在 windows 和 linux 上排序后的结果一样
linux上的结果:
运算符篇
is vs. ==
is 判断两个对象是不是同一个 id,而 == 判断两个对象的内容是否相等。判断两个对象(int、str 等)的内容是否相等,用 == 更加保险。
实例 1:判断两个整数相等
判断两个整数是否分别相等,用 is 可能会产生一些问题。python3 的整数常量池的范围是 [-5, 256]。用解释器一行一行执行如下程序 is 会有问题,用脚本执行就没问题:
a = 1
b = 1
a == b # True
a is b # True
c = 1234
d = 1234
c == d # True
c is d # False
实例 2:argparse 传参
运行如下程序,is 的行为在执行脚本时是否传入参数也有区别。(将如下程序保存到 tmp.py 文件中,python tmp.py
和 python tmp.py -b handsome
分别执行,结果不一样)
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-b", "--boy",
dest="boy", type=str, default="handsome")
args = parser.parse_args()
print(args)
boy = args.boy
print(boy is 'handsome')
print(boy == 'handsome')
实例 3:np.where
在使用 np.where 判断时,一定不能使用 is。
import numpy as np
a = np.array([True, False, False, True])
print(np.where(a == True)) # (array([0, 3]),)
print(np.where(a is True)) # (array([], dtype=int64),)
命令行参数篇
argparse 在解析 bool 参数时,如果按照 parser.add_argument('-a', dest='a', type=bool, default=True)
解析参数 a,那么命令行中 -a False
和 -a True
返回都是 True,而取不到 False。
详情请见:【python3基础】命令行参数及 argparse - wuliytTaotao