python day12

一. 昨日内容回顾
1.函数名的应用
1. 当成变量来用.可以赋值
2. 作为参数传递
3. 作为返回值
4. 可以作为容器中的元素
2.闭包
内层函数访问外层变量. 闭包
作用: 让一个变量常驻内存
3.装饰器
def wrapper(fn):
def inner(*args, **kwargs):
'''在目标函数之前'''
ret = fn(*args, **kwargs)
'''目标函数之后'''
return ret
return inner
@wrapper # func = wrapper(func)
def func():
pass
func() # inner()
作用: 在不改变原来函数的基础上, 增加新的功能
开闭原则: 对功能的扩展开放的. 对代码的修改是封闭的.
二. 今日主要内容
1. 函数的相关名称
1. 函数的注释
2. 查看函数的名称 __name__ __doc__
from functools import wraps
@wrap(fn) 把你的函数的名字和doc换成你的目标函数

# def eat(food):
# """
# 吃函数: 把传递进来的内容吃掉
# :param food: 食物
# :return: None
# """
# print("我要吃", food)
# eat("烤肉")

# print(eat.__doc__) # document
# print(int.__doc__)
# print(eat.__name__)

from functools import wraps
def wrapper(fn):
@wraps(fn) # 这个代码的作用. 把inner的__name__ __doc__ 替换成fn的__name__
def inner(*args, **kwargs):
print("我是前面")
ret = fn(*args, **kwargs)
print("我是后面")
return ret
return inner

@wrapper # func = wrapper(func)
def func():
print("我是func")
func()
print(func.__name__)

2. 回顾装饰器
def wrapper(fn):
def inner(*args, **kwargs):
'''之前'''
ret = fn(*args, **kwargs)
'''之后'''
return ret
return inner
@wrapper
def func():
pass

3. 带参数的装饰器
def wrapper_out(参数):
def wrapper(fn):
def inner(*args, **kwargs):
'''之前'''
ret = fn(*args, **kwargs)
'''之后'''
return ret
return inner
return wrapper
@wrapper_out(实参) # 先执行wrapper_out(实参), 得到一个装饰器, 和前面的@组装成一个语法糖
def func():
pass

def wrapper_out(flag):
def wrapper(fn): # fn: 被装饰的函数
def inner(*args, **kwargs): # inner => 最终执行的
if flag == True:
print("打电话问问金老板.安全不安全啊")
ret = fn(*args, **kwargs) # fn 被装饰的函数
print("金老板骗我")
return ret
else:
ret = fn(*args, **kwargs) # 没金老板什么事儿了
return ret
return inner
return wrapper


@wrapper_out(True) # 带参数的装饰器的执行流程: 先执行@后面的函数. 然后再@加上组装成语法糖
def yue(): # inner
print("约一约")
yue()

@wrapper_out(False)
def yue2():
print("继续约")
yue2()

4. 多个装饰器同时装饰一个函数
@wrapper1
@wrapper2
@wrapper3
def func():
pass
{([目标])}

def wrapper1(fn):
def inner(*args, **kwargs):
print("我要烧香")
ret = fn(*args, **kwargs)
print("熊猫烧香")
return ret
return inner

def wrapper2(fn):
def inner(*args, **kwargs):
print("大阳哥烧香")
ret = fn(*args, **kwargs)
print("徐阳烧香")
return ret
return inner

@wrapper2
@wrapper1
def func():
print("我是func")
func()
# [( 目标 ) ]
小知识点补充:
lst = ["彭于晏", "詹姆斯", "奥特曼", "唐僧"]

# for e in lst:
# print(e)
# for i in range(0, len(lst)):
# print(i)

# for index, element in enumerate(lst): # enumerate 可以直接获取到索引和元素
# print(index, element)

# for e in enumerate(lst):
# print(e)

# s = "提前祝大家生日快乐"
# bys = s.encode("UTF-8") # 编码
# print(bys)
# s1 = bys.decode("UTF-8") # 解码
# print(s1)

# 把utf-8 转换成GBK的bytes
# bys = b'\xe6\x8f\x90'
# s = bys.decode("utf-8")
# gbk_bys = s.encode("gbk")
# print(gbk_bys)


import time
struct_time = time.localtime()
print(time.strftime("%Y-%m-%d %H:%M:%S",struct_time))

猜你喜欢

转载自www.cnblogs.com/zm419914/p/9198367.html