偏函数
功能 :
将已有函数的某些参数写成固定值,并返回一个新的函数,这个函数就是叫偏函数。
目的: 简便调用,将通用的参数写死,没必要输入过多固定的参数
语法:
import functools
func2 = functool.partial(func1,固定参数)
练习:需求:求任意数与77的最大公约数,与最下公倍数
使用偏函数实现
def func1(m,n):
ji = m*n
r = None
while r != 0:
r = m%n
m = n
n = r
return m,ji/m
#偏函数
fun2 = functools.partial(func1,77)
print(fun2(11))
11,77
变量作用域
说明:就是变量起作用的范围。程序中变量并不是在任意的地方都能访问,访问范围取决于它在赋值的位置【定义的位置】
-
局部作用域:在函数中定义的变量,每当函数被调用的时候它都会产生一个新的作用域,这个新的作用域我们称之为局部作用域,在局部作用域中定义的变量,我们称之为局部变量
(局部变量起作用的范围就是当前所在的这个函数。) -
嵌套作用域:又称函数作用域(函数中有函数,局部作用域的一种)
-
全局作用域:在模块中定义的变量,并且在函数体之外定义的变量,他们产生的作用域叫做全局作用域,这个变量我们称之为全局变量。
全局变量作用的范围是当前的整个.py文件。 -
内置作用域:
系统内部定义的变量产生的作用域,叫做内置作用域。
起作用的范围,所有的.py文件。
搜索变量的优先级:
局部作用域 > 嵌套作用域 > 全局作用域 > 内置作用域,
当这几个作用域中都不存在的时候则报错。
如果需要在局部作用域中使用全局变量,需要使用关键字global
e.g.
num1 = 10
def func():
global num1
num1 = 30
print(num1)
注意:在python中,只有模块,类以及函数【def,lambda】这些才会引入新的作用域,
if/else,while/for,try/except这些语句块不会引入新的作用域
回调函数
百度百科上对回调函数的解释:
“回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应”
将函数作为参数传递到另外一个函数中,这个被传递进去,后来又被调用的函数,我们称之为回调函数。
- 偏函数就是回调函数的一种
。
def wake1(time):
print("在%s点,使用揪耳朵的方式叫醒。。。"%time)
def wake2(time):
print("在%s点,使用泼冷水的方式叫醒..."%time)
def wake_server(func,time):
return func(time)
wake_server(wake1,"下午一点五十")
返回函数
函数不仅可以作为函数参数传入,还可以作为函数返回结果
闭包
在外函数的内部定义了一个内函数,内函数使用了外函数的临时变量,
外函数的返回值是内函数的引用【内函数的函数名】,这时候就构成了一个闭包。
装饰器是闭包的一种。