Zuerst Dekorateur
1.1 Übersicht
Eine dynamische Hinzufügen des Codes während des Betriebsmodus, der „Decorator“ (der Decorator) genannt
Decorator ist eigentlich ein Verschluss, dann gibt die Funktion eine Funktion als Ersatz-Version der Funktion, ist im Wesentlichen eine Funktion, dass die Renditen Funktionen höherer Ordnung
1.2 einfacher Dekorateur
Die Funktion kann auch ein Objekt sein, und die Objektfunktion können Variablen zugewiesen werden, so dass von Variablen können die Funktion auch aufrufen
def now():
ptint("2018-3-18")
f = now
f()
Es gibt eine Funktion Objekt _NAME_ Eigenschaft können Sie den Namen der Funktion erhalten:
def now():
print("2018-4-3")
f = now
f()
print(now.__name__)
print(f.__name__)
#结果
'now'
'now'
Jetzt müssen wir die Funktion now () Funktionen, wie zum Beispiel das Drucken für eine Weile verbessern, bevor die Funktion Trennzeichen aufgerufen wird.
def log(func):
def wrapper():
print("**********")
return func()
return wrapper
def now():
print("2018-3-18")
#装饰器的调用
f = log(now)
f()
1.3 kompliziert Dekorateure
Voraussetzungen: Geben Sie das Alter, und drucken Sie es aus
def getAge(age):
print("Tom age is %d"%age)
getAge(10)
#调用getAge方法得到年龄,但是如果输入的是负数就会得到不符合常理的结果
getAge(-10)
def wrapper(func):
def inner(num):
if num < 0:
num = 0
return func(num)
return inner
newGetAge = wrapper(getAge)
newGetAge(-10)
Auf diese Weise wird unser Code einfacher, logische Grenze Kontrollen in separate Prozesse isoliert und das Anwendungspaket durch Dekorateure Ausführungsform, wo wir geprüft werden müssen.
Eine weitere Aufgabe der Art und Weise durch den Beginn der Berechnungsmethode und der Methodenaufruf zurückkehrt, bevor der Grenzwert für den gleichen Zweck überprüft wird, ist aber nicht negiert, der Dekorateur ermöglicht es uns, die geringste Menge an Codes Koordinaten Grenzen Prüfung zu erreichen .
1.4 decorator @ Identifikator
Verwendung @ Identifikator wird auf die Dekorfunktion angewendet
python2.4 und über Unterstützung der Verwendung von Identifikatoren @ dekorativen Anwendungen auf der Funktion, kurz vor der Definition von Funktionen durch den @ Namen und Dekorateure erforderlich
def logger(func):
def inner(*args,**kwargs):
print("***********")
return func(*args, **kwargs)
return inner
@logger
def myPrint():
print("you are very good")
myPrint()
Hinweis: Zum Beispiel in dem eigentlichen Entwicklungsprozess des Unternehmens, wenn es jemand anderes, eine Funktion zu schreiben, dass Sie bestimmen Funktionen hinzufügen oder ändern mögen, die bestimmte Funktionen, während andere Sie benötigen nicht willkürlich die Funktion des anderen zu verändern, zu dieser Zeit, können Sie mit Dekorateur, ohne den Quellcode anderer Menschen zu modifizieren können auch eigene Funktionen hinzuzufügen.
Zweitens ist die Teilfunktion
Das Python functools Modul bietet viele nützliche Funktionen, von denen eine der Teilfunktion (Partial-Funktion).
Einfach ausgedrückt Teilfunktion der Rolle ist es, einige Parameter an die Funktion von festen setzen (die den Standardwert festgelegt ist), eine neue Funktion zurückgibt, wird diese neue Funktion aufrufen einfacher sein.
#functools 模块
import functools
#int()函数将字符串转换为整数,默认按十进制转换
#可以设置进制
print(int("100",base = 2))
#结果为4,100是二进制中4的表示
#类似于偏函数的功能
def int2(str, base=2):
return int(str, base)
print(int2("10"))
#functools.partical可以帮助创建偏函数,不用自己定义int2函数
#作用:把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新的函数会更简单。
int3 = functools.partial(int, base=2)
print(int3("100"))
#在创建偏函数的时候,实际上固定了关键字参数base
#结果
4
Beispiel 2
import functools
max2 = functools.partical(max, 10)
#实际上会把10作为*args的一部分自动加到左边
max2(5, 6, 7)
相当于
args =(10, 5, 6, 7)
max(args)
Übung:
Design der Zugabe einer Teilfunktion, add () verwendet, wenn die Betreiber Bedürfnisse Importmodul erfordert Teilfunktion die Funktion ist, finden eine beliebige Anzahl von 100 und hinzugefügt.
Drei variable Umfang
3.1 Übersicht
Laufendes Programm in Python, erstellen, ändert Zeit die Variablennamen, Variablennamen zu finden sind in einem Raum gespeichert, die wir den Namespace nennen, die auch als Rahmen bekannt.
Vereinfacht ausgedrückt, bezieht sich variable Umfang auf den Bereich von Variablen, die verwendet werden können,
Variablen nicht das Programm an einem beliebigen Ort zugreifen kann, hängt davon ab, den Zugang in dem das Variable zugeordnet ist.
3.2 Umfang der Teilung
L (local) lokaler Bereich
Lokale Variablen: def Schlüsselwort in einem Block von Anweisungen enthalten, wie in der Definition der Variablen, die in der Funktion definiert ist, wird jedes Mal die Funktion aufgerufen erstellt einen neuen lokalen Bereich.
Hinweis: Wenn Sie globale Variablen innerhalb einer Funktion zuweisen müssen, erklärt die Variable als globale Variablen innerhalb der Funktion durch die globale Aussage
E (einschließende) Verschachtelungsebenen
Auch bekannt Funktionsumfang, die äußere Verschlussfunktion in der Funktion
G (global) globale Reichweite
Variablen in der Modulebene definiert ist, ist jedes Modul ein globaler Bereich
Hinweis: Der Umfang des globalen Geltungsbereich wird in einem einzigen Dateimodul begrenzt
B (eingebaut) gebaut Umfang
Befestigung des Moduls innerhalb des Systems definierten Variablen, wie beispielsweise innerhalb eines vordefinierten eingebauten Moduls.
#查看所有的内置变量
print(vars())
3.3 Variable Namensauflösung LEGB Gesetz
Priorität Suche Variablennamen: lokale Variable> verschachtelte Tive> global scope> Built-Scope
LEGB Regel :
Wenn Sie einen Variablennamen in unbestimmter Funktion verwendet, wird Python von vier Such folgt Scopes nach Priorität und so die Bedeutung der Variablennamen zu bestimmen.
Zunächst suchen lokalen Bereich (L), die durch die verschachtelten Bereiche gefolgt def oder Lambda-Funktionen in einer verschachtelten Struktur Schicht (E), die von globalem Bereich (G) gefolgt und schließlich gebaut Bereiche (B) .
Nach diesem Prinzip zu finden, fand in erster Linie an der Haltestelle, und wenn keine gefunden werden, Nameerror Fehler treten auf
def func():
var = 300
print("var",var)
var = 100
func()
print("var", var)
#结果
300
100
3.4 Schlüsselwort global
#声明全局变量
global var
var = 200
def func():
# var = 200
print("var_", var)
def fun():
var = 100
print("var", var)
fun()
func()
Hinweis: Python nur Modul (Module1), Klasse (Klasse) und eine Funktion (def, lambda), bevor Sie einen neuen Bereichs, der anderen Codeblöcke Einführung wie if / else, versuchen Sie / ausgenommen, für / while wie nicht die Einführung neuer Rahmen, dass variable Definitionen dieser Aussagen können auch extern genutzt werden.
if 1:
num = 10
print(num)