關於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])    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM