函数名是一个变量
import time
import datetime
def now():
print('现在的时间是:%s'%datetime.datetime.now())
now()
函数输出当前时间,函数名叫now,实际上now是一个指向函数的变量。
调用函数:
由于now是一个变量,那么我可以让这个变量指向其他的对象。
现在,再次调用now()就会出错,因为now是一个变量,现在指向了一个整数对象,不在指向函数了。
所以函数就是一个变量,可以让他指向其他的任何对象。
既然函数名now是一个变量,指向一个函数,可不可以把now赋值给其他变量,让其他变量也指向这个函数呢?比如像这样:
当然是可以的:
把now
赋值给变量f
,f
也指向了now
指向的那个函数对象,所以f
就是一个指向函数的变量,使用f()
一样是在调用函数
函数参数传入 函数变量
定义一个函数,函数可以接受参数,参数可以在函数内部使用:
#time变量,存储了日期
time = datetime.datetime.now().strftime('%Y-%m-%d')
def now(time):
print(time)
#参数传递到函数中
now(time)
既然函数名也是一个变量,能不能把函数名这个变量也传入到另一个函数中呢?当然可以。
#f()函数返回的是一个数的平方
def f(x):
return x**2
#这个函数接受两个参数,同时接受一个函数作为参数,使用这个函数计算x,y的平方和
def multi(x,y,func):
return func(x) + func(y)
multi(x,y,func)------>multi(2,3,f)
func
是一个变量,f
是一个指向函数的变量,
func = f
,则func
也指向了f
指向的那个函数,所以func(x) + func(y)
计算了两个数的平方和。
小结:
编写高阶函数,就是让函数的参数能够接收别的函数。
把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式。
参考:
廖雪峰