如果一个函数需要导入更大的库,它是否应该放在一个单独的文件中?

Should a function be put in a separate file if it requires importing larger libraries?

我正在分割我的 python 程序,为每个函数创建单独的 python 文件。然后将在需要时导入这些功能。

一些函数需要导入库。我想知道在单个文件中重复调用这些函数是否会降低代码的速度。即每次调用都必须再次导入库。

函数需要的库包括 bs4、requests 和 re.

这是我在函数中使用的代码。

from bs4 import BeautifulSoup
import requests
import re

# Add User-Agent parameter
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'}

# Retrieve all links from a given webpage
# Separate links into internal and external links
def get_links(url, siteurl):

    # Retrieve content from url
    page_link = url
    page_response = requests.get(page_link, headers=headers, timeout=5)
    page_content = BeautifulSoup(page_response.content, "html.parser",
                                 from_encoding="iso-8859-1")

    # Create sets for internal and external links
    internal = set([])
    external = set([])

    # Retrieve links and sorts them into internal and external links
    for unsorted_link in page_content.findAll(
        'a', attrs={'href': re.compile("^http")}):
        link = unsorted_link.get('href')
        if link.startswith(siteurl):
            internal.add(link)
        else:
            external.add(link)

    return internal, external

刚刚在查看控制台和摆弄代码时发现了一些信息。我用的是 Spyder IDE.

"User Module Reloader (UMR): UMR forces Python to reload modules which were imported when executing a file in a Python or IPython console with the runfile function."

来自, http://www.psych.mcgill.ca/labs/mogillab/anaconda2/lib/python2.7/site-packages/spyder/doc/ipythonconsole.html

在第一次导入期间,如果需要会生成字节代码(.pyc 文件),并且导入的模块代码对象会缓存在 sys.modules 中。然后,当重新导入同一个模块时,即使源代码文件(.py[w]文件)同时发生变化,也会直接使用这个缓存的代码对象。

用户模块重新加载器 (UMR) 是 Spyder 控制台的独有功能,它强制 Python 解释器在执行 Python 脚本时完全重新加载模块。

因此,我假设模块仅在执行时重新加载一次,而不是在 Python 脚本为 运行 时重新加载。

此外,我每次都测试了几次总运行时间,两种方式平均每次执行大约需要 1.8 秒。所以似乎没有显着的性能差异。