一点笔记
format 数字处理
-
d,digit f, float 突破6位浮点小数点的限制
-
-
'{:d}'.format(111)
-
-
'{:f}'.format(3.14159)
-
-
'{:12f}'format(3.141592123123)
-
-
'{:.^16d}'.format(123123123213) #居中对齐, . 填充
-
-
‘..123123123213..'
-
-
#. 截断长度 15位小数
-
-
'{:^.15f}'.format(1.23123123213)
-
-
'1.231231232130000'
-
-
# 6表示总长度,4表示小数位置
-
-
'{:6.4f}'.format(1.23123123213)
-
-
'1.2312'
-
-
#6表示总长度,6表示小数位置,总长度小于实际位数时,总长度失效
-
-
'{:6.6f}'.format(1.23123123213)'1.231231'
-
-
#修改填充符
-
-
_ 为填充符,> 右对齐,不够12为,以 _ 填充
-
-
'{:_>12.6f}'.format(1.23123123213)
-
-
'1.231231'
-
-
#空格解决正负数对齐的问题
-
-
'{: d}'.format(+6)
-
-
' 6'
-
-
'{: d}'.format(-6)
-
-
'-6'
-
-
format格式化
-
-
-
-
'{:_>15.2f}'.format(121213.12312121212)
-
'______121213.12'
-
-
函数式编程
lambda表达式 匿名函数
-
-
f = lambda x,y,z:x+y+z
#lambda x,y,z为传入三个参数,以冒号分隔,执行x+y+z
print(f(3,4,5))
print f(3,4,5)
12
-
reduce*
-
lis = range(1,6)
-
[1,2,3,4,5]
-
print reduce((lambda x,y:x*y), range(1,6))
-
#reduce是对元素进行累加操作,比如每个数做同样的操作
-
120
filter #对序列进行过滤,最终获得符合自己要求的序列
map #遍历序列,对每一个元素进行操作,最终获取一个新的序列
yield #对序列中的元素进行累积操作,直到最后一个元素结束,从而得到最终的结果
zip
-
#有两个列表,
-
list1 = ['key1','key2','key3']
-
list2 = ['1','2','3']
-
#把他们转为这样的字典:{'key1':'1','key2':'2','key3':'3'}
-
dict(zip(list1,list2))
-
-
{'key1':'1','key2':'2','key3':'3'}
装饰器
内置装饰器:
-
staticmethod 是类静态方法,其跟成员方法的区别是没有 self 参数,并且可以在类不进行实例化的情况下调用
-
classmethod 与成员方法的区别在于所接收的第一个参数不是 self (类实例的指针),而是cls(当前类的具体类型)
-
property 是属性的意思,表示可以通过通过类实例直接访问的信息
-
class Rabbit(object):
-
@staticmethod #把类中定义的实例方法变成静态方法
-
def newRabbit(name):
-
return Rabbit(name)
-
@classmethod #把类中定义的实例方法变成 类方法
-
def newRabbit2(cls):
-
return Rabbit('')
-
-
@property #把类中定义的实例方法变成 类属性,只读属性
-
def name(self):
-
return self._name
-
@name.setter #把类中定义的实例方法变成 类属性,可读可写
-
def name(self, name):
-
self._name = name
-
#-*-coding:utf-8 -*-
-
-
import math
-
import time
-
from functools import wraps
-
-
-
-
def deco(func):
-
print "Enter deco"
-
#@wraps(func)
-
# def wrapper(*args, **kwargs):
-
# print "Enter deco wrapper"
-
# start = time.time()
-
# func(*args, **kwargs)
-
# end = time.time()
-
# msecs = (end - start)*1000
-
# print "-->:%s ms" % msecs
-
def wrapper(*args, **kwargs):
-
print "Enter deco wrapper"
-
start = time.time()
-
func(*args, **kwargs)
-
end = time.time()
-
msecs = (end - start)*1000
-
print "-->:%s ms" % msecs
-
return wrapper
-
-
-
class MathFuc:
-
-
__X = 1
-
-
def jia(self,x,y):
-
return x + y
-
-
def cheng(self,x ,y):
-
return x * y
-
-
def testFuc(self,x, o ,y):
-
operate = {'+':self.jia,'*':self.cheng}
-
-
print operate.get(o)(x, y)
-
print 'operate[o](x, y):',operate[o](x, y)
-
print '__X is old', self.__X
-
-
-
@deco
-
def myfunc(self,a,b):
-
print "start func"
-
time.sleep(0.8)
-
print "end func"
-
print "rest is %s"%(a+b)
-
-
-
@classmethod
-
def tearDownClass(self):
-
MathFuc.__X = 10
-
print 'MathFuc Down X is ', MathFuc.__X
-
-
@staticmethod
-
def staticClass():
-
MathFuc.__X = 20
-
print 'static MathFuc X is ', MathFuc.__X
-
-
-
if __name__ =='__main__':
-
-
fun = MathFuc()
-
-
fun.myfunc(6, 7)
-
-
print fun.myfunc.__name__
functools 模块 2.5以上版本支持
wraps(wrapped, assigned):
函数是有几个特殊属性比如函数名,在被装饰后,上例中的函数名foo会变成包装函数的名字wrapper,如果你希望使用反射,可能会导致意外的结果。这个装饰器可以解决这个问题,它能将装饰过的函数的特殊属性保留。
-
import time
-
import functools
-
-
def timeit(func):
-
@functools.wraps(func)
-
def wrapper():
-
start = time.clock()
-
func()
-
end =time.clock()
-
print 'used:', end - start
-
return wrapper
-
-
@timeit
-
def foo():
-
print 'in foo()'
-
-
foo()
-
print foo.__name__
首先注意第5行,如果注释这一行,foo.name将是'wrapper'。另外相信你也注意到了,这个装饰器竟然带有一个参数。实际上,他还有另外两个可选的参数,assigned中的属性名将使用赋值的方式替换,而updated中的属性名将使用update的方式合并,你可以通过查看functools的源代码获得它们的默认值。对于这个装饰器,相当于wrapper = functools.wraps(func)(wrapper)。
total_ordering(cls):
它是在Python 2.7后新增的。它的作用是为实现了至少lt、le、gt、ge其中一个的类加上其他的比较方法,这是一个类装饰器
旧版取字符
-
字符串格式化
-
-
旧版
-
-
左对齐,截取+填充空格
-
-
'%-17.8s' % ('Hangyuan Python')
-
-
'Hangyuan '
-
右对齐,截取+填充空格
-
'%+10.8s' % ('Hangyuan Python:192.128.12.1|21.22.22.22|23.23.22.22')
' Hangyuan'
阅读(676) | 评论(0) | 转发(0) |