在python源代码/脚本中查找依赖项
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在python源代码/脚本中查找依赖项,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1545字,纯文字阅读大概需要3分钟。
内容图文
![在python源代码/脚本中查找依赖项](/upload/InfoBanner/zyjiaocheng/785/6eaa8483782c4bad9a18ec7ad5fad011.jpg)
我在Python中有一堆简单的脚本,带有简单的表达式[1],如:
C = A+B
D = C * 4
我需要执行它们,但最重要的是我需要知道我依赖的对象是什么;在前一种情况下,对象A和B是外部依赖关系.例如.鉴于我有一个名为source的var中的前代码,我希望能够:
deps = { "A" : 1 , "B": 2}
exec source in deps
因此,必须知道如何建立dict deps.
我潜伏在ast Python模块中,但我不知道.
[1]简单的数学聚合,在一定程度上为周期,仅此而已.
解决方法:
您可以使用标准库中的tokenize模块来标记Python源代码.这将允许您查找脚本中使用的所有变量名称.
现在假设我们将“非依赖”定义为紧跟在=符号之前的任何变量名称.然后,根据脚本代码的简单程度(参见下面的注意事项),您可以通过这种方式确定非依赖项的变量名称:
import tokenize
import io
import token
import collections
import keyword
kwset = set(keyword.kwlist)
class Token(collections.namedtuple('Token', 'num val start end line')):
@property
def name(self):
return token.tok_name[self.num]
source = '''
C = A+B
D = C * 4
'''
lastname = None
names = set()
not_dep = set()
for tok in tokenize.generate_tokens(io.BytesIO(source).readline):
tok = Token(*tok)
print(tok.name, tok.val)
if tok.name == 'NAME':
names.add(tok.val)
lastname = tok.val
if tok.name == 'OP' and tok.val == '=':
not_dep.add(lastname)
print(names)
# set(['A', 'C', 'B', 'D'])
print(not_dep)
# set(['C', 'D'])
deps = dict.fromkeys(names - not_dep - kwset, 1)
print(deps)
# {'A': 1, 'B': 1}
注意事项:
>如果您的脚本包含除简单之外的语句
分配,然后名称可能会填充不需要的
变量名.例如,
import numpy
会在设置名称中添加’import’和’numpy’.
>如果您的脚本包含使用左手的分配
侧元组拆包,如
E, F = 1, 2
那么上面的天真代码只会识别出F不是a
依赖.
内容总结
以上是互联网集市为您收集整理的在python源代码/脚本中查找依赖项全部内容,希望文章能够帮你解决在python源代码/脚本中查找依赖项所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。