源码地址:https://github.com/yicaifenchen8/learning.git
1.类,方法相关
class A():
def __init__(self):
self.__str__()
def test(self):
self.__str__()
2.拦截属性和方法调用
# set
def __setattr__(self, key, value):
print('set', key, value)
self.fields[key] = value
super.__setattr__(self, key, value)
# get-找不到的属性会调用--实现万能对象不定义属性--调用时全走这个方法
def __getattr__(self, item):
if (not self.fields.__contains__(item)):
self.fields[item] = {}
print('get', item)
return self.fields[item]
# invoke
def __call__(self, *args):
print('call', args)
3.lambda 表达式
def test(a: bool, b: str) -> bool: print(a, b)
def test2(a: bool, b: str) -> bool:
print(a, b)
t = lambda a, b: print(a, b)
a = lambda: 1 if 0 else 0
b = lambda a, b: a + b
4.装饰器
# 装饰器-装饰class和方法---类似万能代理
def singleton(cls):
instances = {}
def inner():
if cls not in instances:
instances[cls] = cls()
return cls
return inner
@singleton
class TestSingletonClass(object):
pass
5.动态编译
str = '''
def p(*args):
print(args)
'''
exec(str)
p(1, 2, 3)
6.替换系统函数
oldPrint = print
print = lambda *args: oldPrint('-', *args)
7.数据结构
# list 合并
x=[1]+[2,3]
print(x)
# map合并
x = {'1':1}
y = {'2':2}
z = dict(x, **y)
print(z)
x = numpy.array([[1,2,3], [4,5,6], [7,8,9]])
print(x)
y = x[1:, :1]
print(y)
x = [1, 2, 3]
print(x[0:1])
# 元组合并
x = 1, 2, 3
print(x)
x += 4,5,6
print(x)
print(x[3:])
8.动态修复方法
class A:
def f(self):
print(1)
def ff(self):
print(2)
A.f = ff
a = A()
a.f()
9.动态代理
class Proxy(object):
def __init__(self, target):
self.target = target
def __getattribute__(self, name):
target = object.__getattribute__(self, "target")
attr = object.__getattribute__(target, name)
def newAttr(*args, **kwargs): # 包装
print("before ", name)
res = attr(*args, **kwargs)
print("after ", name)
return res
return newAttr
10.正则表达式
print('\n-----------------regular--------------')
line = "Cats are smarter than dogs"
matchObj = re.match(r'(.*) are (.*?) .*', line, re.M | re.I)
if matchObj:
print("matchObj.group() : ", matchObj.group())
print("matchObj.group(1) : ", matchObj.group(1))
print("matchObj.group(2) : ", matchObj.group(2))
else:
print("No match!!")
11.流编程
print('\n-----------------stream--------------')
l = [i * i for i in range(10) if i % 2 == 0]
print(l)
l.sort(key=lambda e: e, reverse=True)
print(l)
ret = filter(lambda e: e > 10, l)
print(list(ret))
ret = map(lambda e: e - 2, l)
print(list(ret))
ret = reduce(lambda a, b: a + b, [1, 3, 4], 0)
print(ret)
12.线程
thread = _thread
newThread = thread.start_new_thread
# 为线程定义一个函数
def print_time(threadName, delay):
count = 0
while count < 5:
time.sleep(delay)
count += 1
print("%s: %s" % (threadName, time.ctime(time.time())))
# 创建两个线程
try:
newThread(print_time, ("Thread-1", 2,))
newThread(print_time, ("Thread-2", 4,))
except:
print("Error: 无法启动线程")
while 1:
pass
13.json 操作
a = {'a': 1}
print(a)
d = [{'d': a}]
ds = json.dumps(d)
print('dumps-', ds)
print('loads-', json.loads(ds))
d = [a, a, {'aa': a}]
print('d', d)