8.1 学习笔记

# 进阶作业(选做):
# 1.编写下载网页内容的函数,要求功能是:用户传入一个url,函数返回下载页面的结果
# 2.为题目1编写装饰器,实现缓存网页内容的功能:
# 具体:实现下载的页面存放于文件中,如果文件内有值(文件大小不为0),就优先从文件中读取网页内容,否则,就去下载,然后存到文件中
# import os
# from urllib.request import urlopen
# def cache(func):
# def inner(*args,**kwargs):
# if os.path.getsize('web_cache'):
# with open('web_cache','rb') as f:
# return f.read()
# ret = func(*args,**kwargs) #get()
# with open('web_cache','wb') as f:
# f.write(b'*********'+ret) #自己的标志
# return ret
# return inner
#
# @cache
# def get(url):
# code = urlopen(url).read()
# return code
#
#
# # {'网址':"文件名"}
# ret = get('http://www.baidu.com')
# print(ret)
# ret = get('http://www.baidu.com')
# print(ret)
# ret = get('http://www.baidu.com')
# print(ret)

##还有双横杠问题
# from functools import wraps
# def wrapper(func): #func = holiday
# @wraps(func)
# def inner(*args,**kwargs):
# print('在被装饰的函数执行之前做的事')
# ret = func(*args,**kwargs)
# print('在被装饰的函数执行之后做的事')
# return ret
# return inner
#
# @wrapper #holiday = wrapper(holiday)
# def holiday(day):
# '''这是一个放假通知'''
# print('全体放假%s天'%day)
# return '好开心'
#
# print(holiday.__name__)
# print(holiday.__doc__)
# # print(wahaha.__name__) #查看字符串格式的函数名
# # print(wahaha.__doc__) #document

'''
def wrapper1(func):
def inner1():
print('inner1 qian')
ret=func()
print('inner 1 hou')
return ret
return inner1
def wrapper2(func):
def inner2():
print('inner 2 qian')
ret=func()
print('innner2 hou')
return ret
return inner2
@wrapper2
@wrapper1
def f():
print('f')
pass

f()
'''
# 函数
# 函数的定义和调用
# def 函数名(形参):
#函数体
#return 返回值
#调用 函数名(实参)
# 站在形参的角度上 : 位置参数,*args,默认参数(陷阱),**kwargs
# 站在实参的角度上 : 按照位置传,按照关键字传
# 返回值:没有返回值 返回一个值 返回多个值
# 接收返回值:没有返回值不接收,返回一个值用一个变量接收,返回多个值用一个变量或者对应数目的变量接收
# 闭包函数 —— 在内部函数引用外部函数的变量
# 装饰器函数—— 装饰器一定是闭包函数
# 装饰器的作用 : 在不改变原来函数的调用方式的情况下 在这个函数的前后添加新的功能
# 完美的符合了一个开发原则 :开放封闭原则
# 对扩展是开发的
# 对修改是封闭的


# 基础的装饰器
# from functools import wraps
# def wrapper(func):
# @wraps(func)
# def inner(*args,**kwargs):
# '''在函数被调用之前添加的代码'''
# ret = func(*args,**kwargs) # func是被装饰的函数 在这里被调用
# '''在函数被调用之后添加的代码'''
# return ret
# return inner
# 使用 —— @wrapper
# @wrapper
# def func(): #inner
# pass
#
# func.__name__


# 带参数的装饰器
# @wrapper -- > @warapper(argument)
# 三层嵌套函数
# def outer(形参):
# def wrapper(func):
# def inner(*args,**kwargs):
# '''在函数被调用之前添加的代码'''
# ret = func(*args,**kwargs) # func是被装饰的函数 在这里被调用
# '''在函数被调用之后添加的代码'''
# return ret
# return inner
# return wrapper
# @outer(True)
# def func():
# pass



# 多个装饰器装饰一个函数
# 俄罗斯套娃

#def wrapper1(func):
# @wraps(func)
# def inner(*args,**kwargs):
# print('before 1')
# print('******')
# ret = func(*args,**kwargs) # func是被装饰的函数 在这里被调用
# '''在函数被调用之后添加的代码'''
# return ret
# def wrapper2(func):
# @wraps(func)
# def inner(*args,**kwargs):
# print('before 2')
# ret = func(*args,**kwargs) # func是被装饰的函数 在这里被调用
# '''在函数被调用之后添加的代码'''
# return ret
# @wrapper1
# @wrapper2
# def func():
# print('111')
#迭代器:了解好处,——int 和next--的作用
#在有yield的函数中,下一个yield被读出时,上一个yield消失在内存中
posted @ 2018-08-16 15:28  SHORI  阅读(98)  评论(0编辑  收藏  举报