python导入语句的位置是否影响性能
我想知道导入语句在python程序中的位置是否对性能有任何影响。例如,如果我有这个python导入语句的位置是否影响性能,python,Python,我想知道导入语句在python程序中的位置是否对性能有任何影响。例如,如果我有这个 #!/usr/bin/env python # -*- coding: utf-8 -*- import urllib2 import json import requests from flask import render_template, request, Flask, session, Markup, jsonify, send_from_directory from wit import Wit f
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import urllib2
import json
import requests
from flask import render_template, request, Flask, session, Markup, jsonify, send_from_directory
from wit import Wit
from os import urandom
from datetime import datetime
from uuid import uuid1
from random import choice
from FAAWrapper import FAA_API
from bs4 import BeautifulSoup
def function1():
from OpenSSL import SSL
from fuzzywuzzy import process
continue
def function2():
continue
如果function1包含导入语句,那么调用function1()会对性能产生不利影响吗?我的所有导入都应该放在顶部,还是只在第一次调用函数时才进行导入 导入有两件事:
sys.modules
条目,则查找并加载该模块;如果是Python代码,执行顶级代码将生成该模块的名称空间。如果模块已加载,则跳过此步骤import foo
设置名称foo
<代码>来自foo导入栏绑定名称栏
,等等sys.modules
中的哈希查找会抵消此值,因此只有在循环中使用该名称时,您才会注意到这一点
但是,只有在关键路径上使用了大量执行的代码时,才应该进行这种优化。通过在函数中隐藏导入,您需要付出维护成本,并且需要根据(边际)速度效益权衡该成本。导入有两个作用:
sys.modules
条目,则查找并加载该模块;如果是Python代码,执行顶级代码将生成该模块的名称空间。如果模块已加载,则跳过此步骤import foo
设置名称foo
<代码>来自foo导入栏绑定名称栏
,等等sys.modules
中的哈希查找会抵消此值,因此只有在循环中使用该名称时,您才会注意到这一点
但是,只有在关键路径上使用了大量执行的代码时,才应该进行这种优化。通过将导入隐藏在函数中,您付出了维护代价,需要将该成本与(边际)速度效益进行权衡。为了可读性,最好将所有导入放在顶部,但如果您有一个需要导入的函数,并且该函数可能不会被调用,把它放在函数中不会有什么坏处你的示例代码中没有
function1
。@Padraiccanningham不管它是否会成为瓶颈,我仍然想知道这可以提供一个答案:--这可以提供一个解释:他们回答你的可读性问题,最好将所有导入放在首位,但是如果您有一个需要导入的函数,并且该函数可能不会被调用,把它放在函数中不会有什么坏处您的示例代码中没有function1
。@Padraiccanningham不管它是否会成为瓶颈,我仍然想知道这可以提供一个答案:--这可以提供一个解释:他们回答了您的问题