前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python的字符串反射机制

Python的字符串反射机制

作者头像
云深无际
发布2020-09-30 06:49:01
4110
发布2020-09-30 06:49:01
举报
文章被收录于专栏:云深之无迹

区分两个概念,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这个变量保存的字符串同名的模块

后面的程序就和以前一样了.

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档