1.局部变量
在函数内部,可以用Global,显式的声明为全局变量。这种方式永远不要这么用。
Ctrl+?多行注释i
2.高级函数
把函数名当做参数,传给函数
def add(a,b,f):
return f(a)+f(b)
res = add(3,-6,abs)
abs是内置函数
def bar():
print("in the bar")
def test1(func):
首先看第一个例子:def bar(): print("in the bar") def test1(func): print(func) func() test1(bar)
<function bar at 0x0000019A43BC2E18>
in the bar
其次看第二个例子:
def bar(): time.sleep(3) print("in the bar") def test1(func): start_time = time.time() func() stop_time = time.time() print("the func run time is: %s" %(stop_time-start_time)) test1(bar)
in the bar
the func run time is: 3.000192880630493
可以看出不修改bar()的源代码下,为其增加功能
最后看第三个例子:
def bar(): print("in the bar") def test1(func): print(func) return func print(test1(bar))test1(bar)() bar = test1(bar)bar()
<function bar at 0x000002347ACE2E18>
<function bar at 0x000002347ACE2E18>
<function bar at 0x000002347ACE2E18>
in the bar
<function bar at 0x000002347ACE2E18>
in the bar
2.匿名函数:
lambda x:x*3
calc = lambda x:x*3
calc(3)
3.引用计数
python通过引用计数,回收内存
4.嵌套函数
在一个函数体内def另外一个函数
def foo(): print("in the foo") def bar(): print("int the bar") def love(): print("int the love") love() bar()foo()
5.装饰器本质是函数,装饰其它函数,为其他函数添加附加功能。语法糖。
1.不能修改被装饰的函数的源代码
2.不能修改被装饰的函数的调用方式
成为透明性
实现:
1函数即“变量”,先定义再使用
2.高级函数
3.嵌套函数
import timedef timer(func): def deco(): start_time = time.time() func() stop_time = time.time() print("the func run time is: %s" % (stop_time - start_time)) return deco def test1(): time.sleep(3) print("in teh tes1") def test2(): time.sleep(3) print("in teh tes2") test1=timer(test1)test1()
in teh tes1
the func run time is: 3.0001118183135986
最终为:
import timedef timer(func): def deco(): start_time = time.time() func() stop_time = time.time() print("the func run time is: %s" % (stop_time - start_time)) return deco@timer #test1=timer(test1)
def test1(): time.sleep(3) print("in teh tes1")@timerdef test2(): time.sleep(3) print("in teh tes2") test1() 最最终为:import time
def timer(func): def deco(*args,**kvargs): start_time = time.time() func(*args,**kvargs) stop_time = time.time() print("the func run time is: %s" % (stop_time - start_time)) return deco@timerdef test1(): time.sleep(3) print("in the test1")@timerdef test2(name,age): time.sleep(3) print("in the test",name,age) test1()test2("roger",22) 补充: username,password = "roger","abc123"
def auth(func): def wrapper(*args,**kvargs): username = input("Username:") password = input("Password:") if username == "roger" and password =="abc123": print("User has passed authenticated") func(*args,**kvargs) else: print("invalid username or password") exit() return wrapperdef index(): print("welcome to index page") @authdef home(): print("welcome to home page")@authdef bbs(): print("welcome to bbs page") index()home()bbs() 继续:
username,password = "roger","abc123"def auth(func): def wrapper(*args,**kvargs): username = input("Username:") password = input("Password:") if username == "roger" and password =="abc123": print("User has passed authenticated") resu = func(*args,**kvargs) print("after authentication") return resu else: print("invalid username or password") exit() return wrapperdef index(): print("welcome to index page") @authdef home(): print("welcome to home page") return "from home"@authdef bbs(): print("welcome to bbs page") index()print(home())bbs() 再继续:
username,password = "roger","abc123"def auth(auth_type): print("auth function args",auth_type) def out_wrapper(func): def wrapper(*args, **kvargs): print("wrapper function args:", *args,*kvargs) if auth_type == "local": username = input("Username:") password = input("Password:") if username == "roger" and password == "abc123": print("User has passed authenticated") resu = func(*args, **kvargs) print("after authentication") return resu else: print("invalid username or password") exit() elif auth_type == "ldap": print("执行ldap的验证") return wrapper return out_wrapperdef index(): print("welcome to index page") @auth(auth_type="local")def home(): print("welcome to home page") return "from home"@auth(auth_type="ldap")def bbs(): print("welcome to bbs page") index()print(home())bbs()
原文地址:https://www.cnblogs.com/wherewhenwho/p/9031195.html