生成器与反射
1. 生成器
def f(): #生成器函数
print(11)
yield 1
print(22)
yield 2
print(33)
yield 3
print(44)
yield 4
r = f() # 这里只获取了一个生成器
ret = r.__next__() #11,进入生成器函数f(),直到返回第一个yield的值
print(ret) #1
ret = r.__next__() #22,根据上一次的位置接着执行,直到返回第二个yield的值
print(ret) #2
2. 反射
反射就是根据字符串的形式去对象(某个模块)中操作其成员。
#index.py
inp = input("输入模块:")
print(inp, type(inp)) #inp是字符串类型
dd = __import__(inp)
inp2 = input("输入函数:")
func = getattr(dd,inp2)
ret = func()
print(ret)
#commens.py
def f1():
return "F1"
当模块与当前文件不在同一目录下的时候,需要添加fromlist=True,否则python就找不到commens模块:
dd = __import__('lib.test.commens',fromlist=True)
(1) getattr
以字符串的形式,获取模块中的某函数
import commens
target_func = getattr(commens, 'f1111', None) # 加上None之后,如果模块中的函数不存在则直接返回None
print(target_func)
(2) hasattr
以字符串的形式,判断模块中是否存在某函数
import commens
r = hasattr(commens, 'f22')
print(r) #False
(3) setattr
在内存中创建一个函数或全局变量,不会影响文件
import commens
r = hasattr(commens, 'ABC')
print(r) #False
setattr(commens,'ABC',18) 在内存中创建一个全局变量
#setattr(commens,'ABC',lambda a : a+1),也可以使用lambda创建函数
r = hasattr(commens, 'ABC')
print(r) #True
(4) delattr
删除
r = hasattr(commens, 'ABC')
print(r) #True
delattr(commens,'ABC')
r = hasattr(commens, 'ABC')
print(r) #False
(5) web访问的简单模拟
#index.py
from lib import account
url = input("输入url:")
inp = url.split('/')[-1] #获取url最后面的值
if hasattr(account, inp):
target_func = getattr(account, inp)
r = target_func()
print(r)
else:
print("404")
#account.py
def login():
return "login"
def logout():
return "logout"
#简单的web框架逻辑
url = input('请输入"模块/函数":')
target_model,target_func = url.split('/')
m = __import__("lib."+ target_model,fromlist=True)
if hasattr(m,target_func):
func = getattr(m,target_func)
r = func()
print(r)
else:
print("404")
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!