阅读背景:

2019.8.12学习内容及笔记

来源:互联网 

小结

# 8.12
# 闭包函数

# 函数传参的方法一
# def inner(x):
#     print(x)
# inner(1) # 1

# 函数传参方法二(闭包函数,把变量和函数一起包起来,下次要用直接调用)
# def outter(x):
# #     def inner():
# #         print(x)
# #     return inner
# # inner = outter(2)  # inner # f = inner
# # inner() # 2
# # f = outter(2)
# # f() # 2

# 爬虫爬网页
# import requests

# def get_res(url):
#     res = requests.get(url)
#     print(res.txt)
# get_res("https://www.baidu.com/")
# get.res("https://www.baidu.com/")

# 用闭包思想
# def func(url):
#     def get_res():
#         res = requests.get(url)
#         print(res.text)
#     return get_res
# baidu_spider = func("https://www.baidu.com") # baidu_spider = get_res()


# 装潢器
## 装潢器:装潢的工具(函数),这个函数有装潢的作用

# 装潢器实质就是一个函数(A),装潢的对象也是一个函数(B),用函数A去装潢函数B

# 装潢原则:以下
# 1.不转变函数B的调用方法
# 2.不转变函数B的源代码

# def A():
#     """装潢器"""
#     pass
# def B():
#     """被装潢的对象"""
#     pass
# B()


# def index():
#     """被装潢的函数"""
#     print("hello,index")
#
# index()

# 1.打印函数运行的时光
# 1.1 转变了函数体代码,没转变调用方法

# import time
#
# def index():
#     start = time.time()
#     print("hello index")
#     time.sleep(1)
#     end = time.time()
#     print(end - start)
# index()

# 1.1 没转变调用方法,也没有转变源代码,但是不同用

# import time
# def index():
#     """被装潢的函数"""
#     print("hello,index")
#
# def index1():
#     print("hello,index1")
#
# start = time.time()
# index()
# time.sleep(1)
# end = time.time()
# print(end - start)
#
# start = time.time()
# index1()
# time.sleep(1)
# end = time.time()
# print(end - start)

# 装潢器方法
# import time
# def deco(func): # func = index
#     """装潢器函数"""
#     def inner():
#         start = time.time()
#         func()
#         time.sleep(1)
#         end = time.time()
#         print(end-start)
#     return inner
#
# def index():
#     """被装潢的函数"""
#     print("hello,index")
#
# index = deco(index) # index = inner
# index()


import time

def index():
    print("hello,index")
    time.sleep(1)
# 检测index的运行的时光,但是不能转变index的调用方法,一级源代码

#首先写一个装潢器函数

# def deco(func): # func是真实的index
#     """装潢器函数"""
#     def f1():
#         start = time.time()
#         func() # 真实的index
#         end = time.time()
#         print(end - start)
#     return f1
# index(重新创立的index) = deco(index)#(真实的index)
# aaa = deco(index) # index = f1 = aaa
# index() #f1 / aaa

# import time
# # # def deco(func):
# # #     def f1(*args,**kwargs):
# # #         print(args)
# # #         print(kwargs)
# # #         start = time.time()
# # #         #*args = *(10) 10
# # #         res = func(*args,**kwargs) # 真实的index()
# # #         end = time.time()
# # #         print(end - start)
# # #         return res
# # #     return f1
# # # @deco # 语法糖(更精简的代码) index = deco(index)
# # # def index(x,a = 1):
# # #     print(x)
# # #     print(a)
# # #     print("hello,index")
# # #     time.sieep(1)
# # #     return 123
# # # # 重新创立的index = deco(index真实的index)
# # # index = deco(index) # index= f1
# # # index(10)

# 装潢器模板
# def login(func):
#     def inner(*args,**kwargs):
#         # 登录功效
#         username = input("username")
#         pwd = input("pwd")
#         if username == "nick" and pwd == "123":
#             print("登录胜利")
#             res = func(*args,**kwargs)
#             return res
#         else:
#             print("登录失败")
#     return inner
#
# def time_count(func):
#     def inner(*args,**kwargs):
#         start = time.time()
#         res = func(*args,**kwargs)
#         end = time.time()
#         print(end-start)
#         return res
#     return inner
#
# def outter(func):
#     def inner(*args,**kwargs):
#         # 加功效
#         res = func(*args,**kwargs)
#         return inner
#
# @time_count
# @login
# @outter
# def shopping():
#     print("shopping")
# shopping()
# 三层装潢器:给双层装潢器加参数

# 断定账号密码来自于哪一个处所
# def auth(engine):
#     def login(func):
#         def inner(*args, **kwargs):
#             # 登录功效
#             if engine == "file":
#                 username = input("usrename:")
#                 pwd = input("pwd:")
#                 if username == "nick" and pwd == "123":
#                     print("登录胜利")
#                     res = func(*args, **kwargs)  # shopping()
#                     return res
#                 else:
#                     print("登录失败")
#
#             elif engine == "db":
#                 print("账号密码来自于数据库,非法要求")
#
#         return inner
#     return login
#
# @auth("db")
# def shopping():
#     print("shopping")

# login = auth("db")  # login = login
# shopping = login(shopping)  # shopping = inner
# shopping() # inner()

# 装潢器模板
## 双层装潢器模板
# def outter(func):
#     def wrapper(*args,**kwargs): # wrapper是未来要运行的函数
#         # 加功效
#         res = func(*args,**kwargs) # func是被装潢的函数
#         return res
#     return wrapper
# @outter
# def shopping():
#     print("shopping")
#
# #三层装潢器:给双层装潢器加参数
# def sanceng(engine):
#     def outtr(func):
#         def wrapper(*args,**kwargs): # wrapper是未来要运行的函数
#             # 加功效
#             print(engine)
#             res = func(*args,**kwargs) #func是被装潢的函数
#             return res
#         return wrapper
#     return outter
# @sanceng("file")
# def shopping():
#     print("shopping")


# 迭代器对象
#迭代就是更新换代,反复,基于上一次成果推出下一次的成果

# 怎样表现能迭代
#可迭代(具有__iter__办法)

# x = 1  # 不可迭代对象
#
# s = "nick"  # 可迭代对象
# s.__iter__()
# lt = [1, 2, 3]  # 可迭代对象
# dic = {"a": 1, "b": 2}  # 可迭代对象
# tup = (1,)  # 元组只有一个元素必需得加逗号# 可迭代对象
# se = {1, 2, 3}  # 可迭代对象
# f = open("time.py")  # 可迭代对象

#小结: 字符串、列表、字典、元组(元组只有一个元素必需得加逗号表现)、聚集、文件等都是可迭代对象,数字类型和函数不是可迭代对象

# s = "nick"
# s_iter = s.__iter__()
# print(s_iter.__next__())
# print(s_iter.__next__())
# print(s_iter.__next__())
# print(s_iter.__next__())
# 基于索引(基于上一次成果)通过__next__进行迭代

# dic = {"a":1,"b":2} # 可迭代对象
# dic["a"]
# dic_iter = dic.__iter__() #不依附索引取值#迭代器对象
# print(dic_iter.__next__())
# print(dic_iter.__next__())
# print(dic_iter.__next__())

#s = "nick"  # 可迭代对象,不属于迭代器对象
# s.__iter__()
# lt = [1, 2, 3]  # 可迭代对象,不属于迭代器对象
# dic = {"a": 1, "b": 2}  # 可迭代对象,不属于迭代器对象
# tup = (1,)  # 元组只有一个元素必需得加逗号# 可迭代对象,不属于迭代器对象
# se = {1, 2, 3}  # 可迭代对象,不属于迭代器对象
# f = open("time.py")  # 可迭代对象,迭代器对象 迭代器对象:具有__iter__和__next__办法的叫做迭代器对象

# 只有文件是迭代器对象

# for重复原理 迭代重复

# lt = [1,2,3]
# lt_iter = lt.__iter__()
# while 1:
#     try:
#         print(lt_iter.__next__())
#     except StopIteration:
#         break # for重复原理
# 可迭代对象;迭代器对象 # 不依附索引取值,而是迭代取值
# for重复
# 1.首先应用iter把lt变成迭代器对象;对文件也要应用iter办法把文件再一次iter下
# 2.然后应用next办法进行迭代取值
# 3. 断定StopIteration异常,遇到异常终止

# f = open("time.py")
# f_iter = f.__iter__()
# print(id(f_iter))
# f_iter_iter = f_iter.__iter__()
# print(id(f_iter_iter))

#小结
# 可迭代对象:具有__iter__办法的对象就是可迭代对象,除数字类型和函数外都是可迭代对象
# 迭代器对象:具有__iter__和__next__办法的都是迭代器对象,只有文件

# for重复 == 迭代重复

dic ={"a":1,"b":2}
for i in dic:
    print(i)

# 1. 把lt(可迭代对象/迭代器对象)用__iter__办法转换成迭代器对象
# 2. 应用__next__取出迭代器里的所有值
# 3. 应用__next__办法取尽迭代器中的所有值,必定会报错,通过异常捕捉退出while重复

# 解决了不依附索引取值# 8.12
# 闭包函数

# 函数传参的方法一
# def inner(x):
#   



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: