1.对于python这种语言,遇到问题的第一瞬间,应该是查找现有方法,而不是自己编写。
比如字符串的strip,replace方法等
2.pprint或者print( ,sep='\t',)更好的输出
3.可选形参
def a(b,c=200) c为可选参数,200是默认
4.寻找在d1中出现而d2没有出现的key,创建一个新的dict,然后 for 和 if 旧的两个的比较
def subtract(d1,d2):
res =dict()
for key in d1:
if key not in d2:
res[key] = None
return res
5.os下常用函数总结
for root,dirs,files in os.walk(path):
比如: root: /home/ygx/Faster_RCNN_for_DOTA-master
dirs: ['lib', 'faster_rcnn', 'experiments']
files: ['init.bat', 'LICENSE', 'init.sh', '.gitignore', 'README.md', 'setup.py']
访问文件的时候,需要加入 os.path.join(root,files)
path
) 检查文件夹是否存在os.makedirs(path)
path
) 检查是否是路径os.path.splitext('
/home/ygx/Faster_RCNN_for_DOTA-master/init.bat')
>>> 返回尾缀名 /home/ygx/Faster_RCNN_for_DOTA-master/init + .bat
os.path.basename("/usr/local/python3/bin/python3/3.txt")
>>> '3.txt'
os.path.dirname("/usr/local/python3/bin/python3/3.txt")
>>> '/usr/local/python3/bin/python3'
6.异常处理
try except finally raise 和 assert
一般用except Exception as e 其中,Exception表示常规错误的基类,类似下面的直接替代ZeroDivision是一样的。
a=10
b=0
try:
c=a/b
print c
except ZeroDivision as e:
print str(e)
else: #没有发生异常时输出
print "no error"
finally: #无论程序是否发生异常,在结束前都要执行,没有except,else,也经常单独与try使用
print "always excute"
print "done"
经常用于逻辑判断,等同于if 判断加一个 raise 提示,比如深度学习中,短边必须小于长边,某些参数必须是2的倍数,这种的,他可以让你更快地找到最开始出错的地方。如果不满足assert中条件直接打断在此处。
import sys
reload(sys) # Python2.5 初始化后删除了 sys.setdefaultencoding 方法,我们需要重新载入
sys.setdefaultencoding('utf-8')
short_size = 600
long_size =500
assert short_size
7.self,other, 接受两个对象作为实参
def is_after(self,other):
return self.time_to_int() > other.time_to_int()
>>>end.is_after(start)
True
8.__int__ __str__
__init__(self,...) | 初始化对象,在创建新对象时调用 |
__str__(self) | 在使用print语句时被调用 |
def __int__(self): #一般的做法是初始化对象所有属性 self.minute=minute
def __str__(self):
return '%.2d:%.2d%.2d' %(self.hour,self.minute,self.second)
>>>time =Time(9,45)
>>>print time 09:45:00
9.操作符重载与多态
isinstance判断是不是这个对象的实例,然后做选择,更好的制作接口,满足更多的属性要求
def __add__(self,other):
if isinstance(other,Time):
return self.add_time(other)
else:
return self.increment(other)
def add_time(self,other):
seconds = self.time_to_int()+other.time_to_int()
return seconds
def increment(self,other):
seconds+=self.time_to_int()
return int_to_time(seconds)
多态:可处理多类型的函数 sum([t1,t2,t3])也是可以的,因为time类里有自定义的__add__方法。