目录
前言
函数名的多种用法
# 1.函数名是名字
def index():
pass
print(index) # <function index at 0x000002EDA843E040> # 函数名也是个名字 指向内存中的函数
index = 1
print(index) # 1 # index这个名字现在指向 1 啦!
# 2.函数名可以当做函数的参数
def index():
print('from index')
def func(a): # a=index 临时绑定
a() # 执行index
func(index) # from index
# 3.函数名可以作为函数的返回值
def index():
print('from index')
def func():
print('from func')
return index # 会去全局名称空间找index这个名字
res = func() # res现在是index
print(res)
res() # 相当于调用index函数
# 4.函数名可以当做容器类型的数据
def index():
print('from index')
list1 = [1, 2, 3, 4, 'miku', index] # 函数名也放里面了
list1[-1]() # 用索引取出 然后调用index函数
闭包函数
def outer(name):
def inner(): # inner是在函数内部的函数
print(name) # 内层函数用到了外部函数名称空间的名字name
return inner
back = outer('miku') # 传入miku name和miku绑定 # back是outer的返回值inner函数
back() # 调用内部的inner函数 inner函数去外层找name 找到了miku 输出miku
back2 = outer('alice')
back2() # alice
补充time模块 时间戳
# 1.基本使用
import time # 意思是导入time这个模块
time.sleep(1) # 意思是程序到这里停止1秒
# 2.时间戳
start_time = time.time() # 获取当前时间戳
print(start_time) # 1665415648.5771186 # 现在时间距离 1970年1月1日 的 秒数
time.sleep(2)
stop_time = time.time() # 再获取一次当前时间戳
print(stop_time - start_time) # 2.0005736351013184
装饰器概念
装饰器模板
# 这就是一个装饰器outer 其实就是一个函数
def outer(func):
def inner(*args, **kwargs):
# 执行被装饰对象之前可以做的额外操作
res = func(*args, **kwargs)
# 执行被装饰对象之后可以做的额外操作
return res
return inner
使用装饰器模板
def outer(func_name): # 装饰器
def inner(*args, **kwargs):
res = func_name(*args, **kwargs)
return res
return inner
def world(a): # 被装饰函数
print(a)
return 'miku'
world = outer(world) # inner狸猫换太子 这个world实际是内层的inner
back = world('hello') # 获取inner的返回值
print(back) # miku