Python的字符串反射机制
区分两个概念,f1,"f1",前者是一个函数名,后者是一个字符串,是不同的东西..我们可以用f(1) 调用一个函数"f(1)"不可以去调用.就是不可以去调用看起来一样的函数.不能用字符串去调用看起来一样的函数.
这里实现了一个简单的WEB路由器
根据不同的url,执行不同的函数
但是写几百个函数,也是写这么多吗?
也不是
这是结果
反射机制就是在这种情况下被提出来的.
拿个最简单的函数看一下
就是str和下面的调用的函数是一致的
那么我们可以这样想,能不能就是让我们输入字符串就能调用函数
一定可以的,需求都出来了,必满足你
看接下来的操作
python内置了这样的 函数
这个函数有两个参数
前面是一个模块或者方法,后面是一个字符串
大致原理就是这样的
这个函数让get这个函数让程序在commons这个模块里面寻找一个叫inp的成员
这个是一个动态的过程
这就是python的反射,一种基于字符串的驱动模式.但是还是没有做的很完善就是老生常谈的问题/如果用户传入的str是匹配不到的怎么办呢?
这个是完善后的代码
通过hasattr函数,用于判断函数里面到底有没有这个对应的字符串
那么这个例子是在同一个目录里面的互相导包,要是全局的话,怎么办?
代码重构为这个样子的
分析一下写了什么东西
首先可以看到我们没有定义任何一行import语句
inp的格式被定义为,commons/home的形式,模拟web框架里面的url地址
可以看到报错一次
看这行代码
处理了用户的输入,使我们会的了两个字符串,并分别保存在modules和func变量里面
接着让程序去导入modules这个变量保存的字符串同名的模块
后面的程序就和以前一样了.这个地方还有一点没有写全.我懒得写了
赞 (0)