【问题标题】:Listing source dependencies [closed]列出源依赖项[关闭]
【发布时间】:2023-03-12 12:08:01
【问题描述】:

通过检查以下编程语言(Java、Python 和 Lisp)的源代码可以解决的源代码依赖程度如何。

例如,我是否可以通过查看一组 Python 文件来确定检查每个文件中的所有“导入”语句是唯一的依赖项(源依赖项)?

在 Lisp 中,我知道 (load "filename") 命令允许包含在其他文件中定义的函数。

【问题讨论】:

  • 这就是我的目标。我已经指定了我期望得到答案的语言,而且问题本身似乎很容易解释。
  • 首先,我并没有说这是一个很好的 SO 问题。我也不期待一个“好”的答案。我只是想了解如何轻松解决源代码依赖关系。自然,不同的编程语言可能有不同的方式。

标签: java python lisp


【解决方案1】:
  1. 即使您找到任何类型的“导入”语句,也不保证代码会使用它。

  2. 在 Java 中,您可以导入名称空间,但也可以使用类的完整限定名而不需要任何导入语句

    javax.swing.JButton but = new javax.swing.JButton("MyButton");

  3. 最后但并非最不重要的是,它们都支持某种符号编程。您可以使用纯字符串来加载或执行代码:

    对象 x = Class.forName("javax.swing."+compName); 返回 x.toString();

【讨论】:

    【解决方案2】:

    在 Python 中有更多的导入方式

    例如

    somemodule = __import__("somemodulename")
    

    也可以在运行时更改路径,例如

    import os
    

    可能不会导入您期望的 os 模块。

    您还可以通过其他方式包含代码

    execfile(...)
    execfile(filename[, globals[, locals]])
    
    Read and execute a Python script from a file.
    The globals and locals are dictionaries, defaulting to the current
    globals and locals.  If only globals is given, locals defaults to it.
    

    您甚至可以包含存储在数据库中或从 url 下载的代码片段

    所以你不能肯定地说不

    【讨论】:

    • 很好的答案啃!您能解释一下“..可能无法导入您期望的 os 模块...”是什么意思吗?
    • @user866098,如果你查看sys.path,你会发现python库通常就在当前目录之后。所以如果你在当前目录中有os.py,它会找到那个而不是python库。由于可以修改sys.path,您甚至可以在标准python 库之前拥有更多目录,其中任何一个都可以有一个名为os.py的文件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    相关资源
    最近更新 更多