如果一个函数需要导入更大的库,它是否应该放在一个单独的文件中?
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."
在第一次导入期间,如果需要会生成字节代码(.pyc 文件),并且导入的模块代码对象会缓存在 sys.modules 中。然后,当重新导入同一个模块时,即使源代码文件(.py[w]文件)同时发生变化,也会直接使用这个缓存的代码对象。
和
用户模块重新加载器 (UMR) 是 Spyder 控制台的独有功能,它强制 Python 解释器在执行 Python 脚本时完全重新加载模块。
因此,我假设模块仅在执行时重新加载一次,而不是在 Python 脚本为 运行 时重新加载。
此外,我每次都测试了几次总运行时间,两种方式平均每次执行大约需要 1.8 秒。所以似乎没有显着的性能差异。
我正在分割我的 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."
在第一次导入期间,如果需要会生成字节代码(.pyc 文件),并且导入的模块代码对象会缓存在 sys.modules 中。然后,当重新导入同一个模块时,即使源代码文件(.py[w]文件)同时发生变化,也会直接使用这个缓存的代码对象。
和
用户模块重新加载器 (UMR) 是 Spyder 控制台的独有功能,它强制 Python 解释器在执行 Python 脚本时完全重新加载模块。
因此,我假设模块仅在执行时重新加载一次,而不是在 Python 脚本为 运行 时重新加载。
此外,我每次都测试了几次总运行时间,两种方式平均每次执行大约需要 1.8 秒。所以似乎没有显着的性能差异。