python常用

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

 isinstance(n, nn.Conv2d)

更高明的链表操作:

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]

list、string等的for循环迭代生成:

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)
原文地址:https://www.cnblogs.com/zhengmeisong/p/9279437.html