python参数的传递:默认参数、可变参数、关键字参数:
参考这里,可变参数前面1个*;关键字参数前面2个*
classmethod修饰符:
参考这里,使用时不需要再实例化该类
Import失败问题:
从github拉一段代码作为自己程序的一部分,单独跑都是好的,在主程序里调用就一直报No module named 'xxx'的错误,主要是import路径问题:
from proto import tensor_pb2 #git代码 from lmdbdata.proto import tensor_pb2 #放到自己工程里新建了目录叫lmdbdata
指定使用某块GPU:
1 import os 2 os.environ["CUDA_VISIBLE_DEVICES"] = "2" # 使用卡2
random:
import random random.random() #随机一个0-1之间的浮点数
import numpy as np import numpy.random as npr npr.randint(a,b) #随机一个a,b之间的整数,a,b需为整数
格式化输出:
sys.stdout.write('.') #这一句换成print '.',也是可以的。print后边加逗号就可以实现输出不换行 sys.stdout.flush() #不管用sys.stdout还是print,这一行都很有必要。不加会隔很久显示一次
打印大数组时不省略:
import numpy as np np.set_printoptions(threshold = 1e6)
1 image = cv2.imread(os.path.join(im_dir, im_path)) 2 try: 3 image.shape 4 except: 5 print "fail to read: ", im_path 6 continue
字典:
for key in sorted(distriDictO, reverse = true) #倒叙遍历字典
numpy:
for multi in np.arange(1.0, 5.3, 0.1): #按小数增长
可以用np.NaN表示不是一个数字,但类型是浮点的
list=[1,2,3,4,5,6,7,8] l = np.array(list) #l[2]=np.NaN #会报错,因为l是整形类型, ValueError: cannot convert float NaN to integer lf = l.astype(np.float32) lf[5] = np.NaN np.where(lf>5) #输出(array([5,7]),)
最大值可用float('inf')表示:
float('inf') > 1 #返回True -float('inf') > 1 #返回False
更高明的链表操作:
a = [i for i in xrange(10)] #a=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] aa = [i for i in xrange(10) if i%2] #aa=[1, 3, 5, 7, 9]
print [aa for aa in addlist if not aa == 'null'] #这是对的,输出一个列表 print aa for aa in addlist if not aa == 'null' #这是错的,因为不是可迭代对象
打开文件比较好的方式:
with open(filename) as f: f.write("xxxx")
计时函数:
import time start = time.time() #以秒为单位的浮点数,123.456789 xxx end = time.time() print("time used: %.3f ms"((end-start)*1000)