zoukankan      html  css  js  c++  java
  • 关于python一切皆对象的理解

    关于python一切皆对象的理解

    1. 关于python传递参数的方式(值传递和引用传递):

    	python是一些皆对象的,关于传参,就是python的对象传进去,就是对象引用传递,但是python有可变类型和不可变类型,这是在其他语言没有的概念,当传递对象是不可变类型,就像其他语言的值传递,当对象是可变类型,就相当于其他语言的引用传递
    

    2. python装饰器

    1.装饰器的本质就是闭包,只要编程语言中函数可以当值来传递,都可以实现闭包(函数是一等公民),然而python一切皆对象,自然可以实现闭包,装饰器有有和无参装饰器
    2.无参:
        def dec(func):
            def inner(*args,**kwargs):
                res = func(*args,**kwargs)
                return res
            return inner
    3.运用场景,登录装饰器,我要你根据用户身份的不同,最后打印不同的字  
            def out(X):X你穿的参数
                    def dec(func):
                        def inner(*args,**kwargs):
                            if X = '学生'
                                res = func(*args,**kwargs)
                                print(‘去写作业’)
                                return res
                            if X = ‘老师’:
                            	res = func(*args,**kwargs)
                                print(‘去上课’)
                                return res
                        return inner
                    return dec
                使用:
                    @out(X)   
                    def login():
                        pass
        
    

    3.猴子补丁

    核心思想 -------- 模块运行时替换的功能!!!
    猴子补丁运用的是python的一切皆对象
    体会1:class Dog():
        	def eat(self):
            	print('我在吃骨头')
          class Cat():
            def eat(self):
                print('我在吃鱼')
           cat = Cat()
    	   cat.eat = Dog.eat
           以后调用cat.eat()的时候,猫被换成了吃骨头
    
    体会2:很多代码用到 import json,后来发现ujson性能更高,如果觉得把每个文件的import json 改成 import ujson as json成本较高,或者说想测试一下用ujson替换json是否符合预期,只需要在入口加上:
        import json
        import ujson
        def monkey_patch_json():
            json.__name__ = 'ujson'
            json.dumps = ujson.dumps
            json.loads = ujson.loads
        monkey_patch_json()
    
    体会3:
        from gevent import monkey 
        monkey.patch_all() ;打补丁
        import gevent 
        import time  
        def play():
            print('1号玩')
            time.sleep(2)
            print('2号在玩')
    
        def eat():
            print('1号在吃')
            time.sleep(2)
            print('2在吃')
        a = gevent.spawn(eat)
        b = gevent.spawn(play)
        gevent.joinall([a,b])    
    
    永远不要高估自己
  • 相关阅读:
    使用Python通过docker api控制docker容器
    windows 编译 google v8
    Kali下Metasploit自动连接postgresql
    更新Kali中的metasploit
    spring + mybatis 注解式事务不回滚的原因分析 @Transactional
    ListView中使用type需要注意的东西 java.lang.ArrayIndexOutOfBoundsException: length=2; index=2 addScrapView
    Missing artifact com.sun:tools:jar:1.5.0的解决方案
    0919-The Standard of Code Review
    重定向URL乱码问题
    hive学习_01
  • 原文地址:https://www.cnblogs.com/liqiangwei/p/14396832.html
Copyright © 2011-2022 走看看