Ein Dekorator ist im Wesentlichen eine Python-Funktion, die es anderen Funktionen ermöglicht, zusätzliche Funktionen hinzuzufügen, ohne Codeänderungen vorzunehmen. Der Rückgabewert des Dekorators ist ebenfalls ein Funktionsobjekt.
Schauen wir uns zunächst ein einfaches Beispiel an:
def run(): time.sleep(1)print('run....')
Es gibt eine neue Anforderung, die Laufzeit der Funktion und den benötigten Code aufzuzeichnen Um die Zeit im Code zu berechnen:
def run(): start_time = time.time() time.sleep(1)print('run....') end_time = time.time()print('run time', end_time - start_time)
login() und andere Funktionen haben auch Typanforderungen. Wenn Sie in jede Funktion eine Start- und Endzeit schreiben und dann die Differenz berechnen, ist der Code überflüssig. Sie können eine Funktion definieren, um die Ausführungszeit speziell zu berechnen, und dann den tatsächlichen Geschäftscode wie folgt ausführen:
def timer(func): #计算时间start_time = time.time() func() end_time = time.time()print('run time', end_time - start_time) def run(): #业务代码time.sleep(1)print('run....') timer(run)
Die obige Codelogik kann nicht verstanden werden, aber in diesem Fall wird jedes Mal eine Funktion als Parameter an die Funktion timer() übergeben, und diese Methode hat die ursprüngliche Codelogik zerstört Bei der vorherigen Ausführung der Geschäftslogik wurde run() ausgeführt, jetzt muss jedoch timer() ausgeführt werden. Der Einsatz von Dekorateuren kann die oben genannten Probleme lösen.
def timer(func): #计算时间def deco(*args, **kwargs): #可以传参start_time = time.time() func(*args, **kwargs) #函数调用end_time = time.time()print('run time', end_time - start_time)return deco #return 函数名,函数即变量def run(): #业务代码time.sleep(1)print('run....') run = timer(run) #run相当于decorun() #run调用相当于deco()
Funktion ist eine Variable. Der Funktionsname ist eine Variable Adresse der Funktion, die den Funktionskörper im Speicher ablegt. Suchen Sie beim Aufruf den Funktionskörper anhand der Speicheradresse im Funktionsnamen und führen Sie die Funktion aus. Das Hinzufügen von Klammern nach dem Funktionsnamen bedeutet, dass die Funktion aufgerufen wird. Wenn Sie nur den Funktionsnamen schreiben, geben Sie die Speicheradresse der Funktion aus.
Der Funktionstimer ist ein Dekorator. Er umschließt die Funktion, die die eigentliche Geschäftsmethode ausführt. Es sieht so aus, als ob der Lauf vom Timer dekoriert wird. Entwickeln Sie sich wie folgt weiter:
timer(func): deco(*args, **kwargs): start_time =*args, **kwargs) end_time =(, end_time - deco @timer run(): time.sleep(1() run()
Der aktualisierte Code der run()-Funktion lautet wie folgt: Tatsächlich wurde der Ausführungscode nicht direkt geändert, aber Wenn der Dekorator aufgerufen wird, wird der Ausführungscode aktualisiert.
def run(): start_time = time.time() time.sleep(1)print('run....') end_time = time.time()print('run time', end_time - start_time)
print(all([1, 2, 3, 0, 11, -1])) #判断可迭代对象里面的值是否都为真,有一个为假即为False,非空即真非0即真print(any([0, 1, 2])) #判断可迭代对象里面的值是否有一个为真,即为Trueprint(bin(10)) #将十进制转换为二进制print(bool('sdf')) #将一个对象转换为布尔类型func = ''print(callable(func)) #判断传入的对象是否可调用,func为变量不可调用,即返回Falsedef adf():passprint(callable(adf)) #判断传入的对象是否可调用,adf为方法即可调用,即返回Trueprint(chr(98)) #打印数字对应的ASCII码,98=bprint(ord('a')) #打印字符串对应的ASCII码, a=97print(dict(a=1, b=2)) #转换成字典,{'b': 2, 'a': 1}#print(eval('[a=1]'))print(exec('def a():pass')) #执行python代码,只能执行简单的,定义数据类型和运算def func(num): name = '88'print(locals())print(globals())return numprint(list(filter(func, [0, 1, 2, 3, 4]))) #在python3里面这么用是没问题filter(func, [1, 2, 3, 4]) #根据前面的函数处理逻辑,依次处理后面可迭代对象里面的每个元素,返回true保存print(list(map(func, [0, 1, 2, 3, 4]))) #根据前面的函数处理逻辑,依次处理后面可迭代对象里面的每个元素,保存前面函数返回的所有结果 </span>print(globals()) #返回程序内所有的变量,返回的是一个字典,函数里面的局部变量不会返回print(locals()) #返回局部变量print(hex(111)) #数字转成16进制print(max(111, 12, 13, 14, 16, 19)) #取最大值print(oct(111)) #把数字转换成8进制print(round(11.1198, 2)) #取几位小数,会四舍五入print(sorted([2, 31, 34, 6, 1, 23, 4], reverse=False))#排序
dic={1:2,3:4,5:6,7:8}print(sorted(dic.items())) #按照字典的key排序,[(1, 2), (3, 4), (5, 6), (7, 8)]print(sorted(dic.items(), key=lambda x:x[1])) #按照字典的value排序import time #导入一个模块import sysprint(sys.path) #查看系统环境变量有哪些目录sys.path.append(r'E:\python_workspace\base-code') #将base-code下的代码添加到环境变量,允许python xxx.py就不报错from day4.day5_test import hhh hhh() #直接右键允许不报错,使用python model2.py允许时报错,找不到day4模块No module named 'day4'
import randomprint(random.randint(1, 20)) #在1-19之间随机生成一个整数,随机print(random.choice('abs123')) #随机取一个元素,随机可迭代对象:字符串、字典、list、元组print(random.sample('abcdfgrtw12', 3)) #随机取几个元素,3是长度,['2', 'a', 'b'],返回结果是list类型print(random.uniform(1, 9)) #随机浮点数,随机取1-9之间的浮点数,可指定范围,5.8791750348305625print(random.random()) #随机0-1的浮点数,0.9465901444615425random.shuffle([1, 2, 3, 4, 5, 6]) #随机打乱list的值,只能是list
Die Verwendung der JSON-Funktion erfordert den Import der JSON-Bibliothek: JSON importieren.
函数 | 描述 |
json.dumps | 将字典转换为json串 |
json.dump | 将字典转换的json串写入文件 |
json.loads | 将json串转换为字典 |
json.load | 从文件中读取json数据,然后转换为字典 |
a.json-Inhaltsformat:
{"car":{"price":1100,"color":"red"},"mac":{"price":7999,"color":"black"},"abc":{"price":122,"color":"green"}}
json.load()
import json with open('a.json') as fp: shop_dic = json.load(fp) #从a.json文件内读取数据,返回结果为字典:{'abc': {'price': 122, 'color': 'green'}, 'mac': {'price': 7999, 'color': 'black'}, 'car': {'price': 1100, 'color': 'red'}}print(shop_dic)
json. lädt ()
s_json = '{"name":"niuniu","age":20,"status":true}'print(json.loads(s_json)) #将json串转换为字典:{'age': 20, 'status': True, 'name': 'niuniu'}
json.dump()
import json with open('a.json', 'a+') as fp: dic = {'name': 'niuniu', 'age': 18} fp.seek(0) fp.truncate() json.dump(dic, fp) #将字典转换为json串写入文件
Das geschriebene a.json lautet wie folgt:
{"age": 18, "name": "niuniu"}
json.dumps()
import json dic = {'name': 'niuniu', 'age': 18}print(json.dumps(dic)) #将字典转换为json串:{"name": "niuniu", "age"
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung von Dekoratoren, integrierten Funktionen und JSON in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!