Python總結 基礎知識 11

2021-10-02 17:39:04 字數 2668 閱讀 6471

'''

裝飾器本身就是乙個函式,主要用於為函式新增額外功能。如插入日誌、

效能測試等。

'''from functools import wraps

def log(flag):

def decorate(func):

@wraps(func)

def _wrap(*args,**kwargs):

try:

if flag:

func(*args,**kwargs)

print('name',func.__name__)

except exception as e:

print(e.args)

return _wrap

return decorate

@log(true) //true執行add函式,false不執行add函式

def add(a,b,c):

print('sum','=',a + b + c)

add(1,2,3)

'''

通過isinstance函式可以判斷呼叫的是函式還是方法,如果是函式,型別是

functiontype,如果是方法,型別是methodtype。

'''class myclass:

def process(self):

pass

def process():

pass

print(type(myclass().process).__name__ == 'method') //true

print(type(process).__name__ == 'function') //true

from types import methodtype,functiontype

print('myclass.process:',isinstance(myclass().process,functiontype)) //false

print('myclass.process:',isinstance(myclass().process,methodtype)) //true

print('process:',isinstance(process,functiontype)) //true

print('process:',isinstance(process,methodtype)) //false

'''

共同點:

用來宣告靜態方法的:類名.方法名

區別:1. @staticmethod不需要表示自身物件的self和自身類的cls引數,就像普通函式一樣定義

2. @classmethod也不需要self引數,需要1個引數表示自身的cls引數。避免硬編碼。

'''class myclass:

bar = 1 #靜態變數

def __init__(self):

self.count = 20

def process(self):

print('process:',self.count)

@staticmethod

def static_process():

print('static_process')

print(myclass.bar)

@classmethod

def class_process(cls):

print('class_process')

print(cls.bar)

print(cls) #cls().process()

print(cls().count)

print(myclass.bar) #1

myclass.static_process()

myclass.class_process()

myclass.bar = 123

myclass.static_process()

'''

metaclass:元類,類似於建立類的模板,所有的類都是通過他來建立的,可以自由控制類的建立過程

單例模式

'''class singleton(type):

def __init__(self,*args,**kwargs):

print('in __init__')

self.__instance = none

super(singleton,self).__init__(*args,**kwargs)

def __call__(self,*args,**kwargs):

print('in __call__')

if self.__instance is none:

self.__instance = super(singleton,self).__call__(*args,**kwargs)

print(type(self.__instance))

return self.__instance

class myclass(metaclass=singleton):

pass

my1 = myclass()

my2 = myclass()

print(my1 is my2) #true,相同例項

python總結–基礎知識-12

python基礎知識總結

1 算術運算子 運算子描述例項 加10 20 30 減 10 20 10 乘 10 20 200 除 10 20 0.5 取整除 返回除法的整數部分 商 9 2 輸出結果 4 取餘數 返回除法的餘數 9 2 1 冪 又稱次方 乘方,2 3 8 2 算術運算子 運算子描述 冪 最高優先順序 乘 除 取...

Python基礎知識總結

函式可變引數 可變引數允許你傳入0個或任意個引數,這些可變引數在函式呼叫時自動組裝為乙個tuple。defcalc number sum 0 for x in number sum sum x x return sum 直接呼叫 print calc 5,5,5 列表引數呼叫 num表示把num這個...

Python基礎知識總結

dir builtins 可以檢視內建函式,共68個 標準資料型別 python3 中有六個標準的資料型別,其中 資料型別 數字num 注意 1 python可以同時為多個變數賦值,如a,b 1,2。2 乙個變數可以通過賦值指向不同型別的物件。3 數值的除法包含兩個運算子 返回乙個浮點數,返回乙個整...