局部变量
函数就是变量的作用域,仅在当前函数起作用。
def name():
x=1 #局部变量
全局变量
在函数内是不能修改全局变量的值。
x=1 #全局变量
def name():
在global之后,全局变量也是可以在函数内修改的。
变量内存的回收机制
python解释器当变量名不存在时,变量内存会被回收。
递归函数
在函数内部,可以调运其他函数。如果一个函数在内部调运自身,这个函数就是递归函数。
特性:
-
必须要有一个明确的结束条件。
-
每次进入更深的一层递归时,问题规模相比上次都应有所减少。
-
递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调运是通过栈(stack)这种数据结构实现的,每当进入一个函数调运,栈就会加一层栈帧。每当函数返回,栈就会减少一层栈帧。由于栈的大小不是无限的,所以,递归调运的次数过多,会导致栈溢出)
def calc(n): print(n) if int(n/2) > 0: return calc(int(n/2)) print("-->",n) calc(10)
高阶函数
变量可以指向函数,函数的参数支持能接受变量,那么一个函数就可以接受另一个函数作为参数,这种函数就称之为高阶函数。
-
把一个函数名当做实参传递给另一个函数。
-
返回值中包含函数名。
def add(a,b,f):
return f(a) + f(b)
x = add(1,-6,abs)
print(x)
匿名函数
没有函数名的函数calc = lambda x:x*3
print(calc(2))
嵌套函数
在一个函数体内定义另一个函数。def foo(): print("in the foo ") def bar(): print("in the bar") bar() foo()
装饰器
装饰器:装饰器本质是函数,(函数是有特定的能),装饰器的功能就是装饰其他函数,就是为其他函数添加附加功能。
原则:-
不能修改被装饰函数的源代码。
-
不能修改被装饰的函数的调运方式。
(装饰器对被装饰函数来说是透明的)
实现装饰器知识储备
1.函数即“变量”
2.高阶函数
(1)把一个函数名当做实参传递给另一个函数。
(2)返回值中包含函数名。
3嵌套函数
装饰器=高阶函数+嵌套函数
例如:import time def timer(func): def logges(*args,**kwargs): func(*args,**kwargs) format_time = "%Y-%m-%d %X" tim_current = time.strftime(format_time) print(tim_current) return logges @timer def test1(): print("in the test1") test1()
-