python 高级 深入学习

3 篇文章 0 订阅
2 篇文章 0 订阅

源码地址: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)

源码地址:https://github.com/yicaifenchen8/learning.git

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值