[英]Does the position of python import statements affect performance
我想知道python程序中import语句的位置是否对性能有影响。 例如,如果我有这个
#!/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包含import语句,调用function1()会对性能产生不利影响吗? 应该将我所有的导入放置在顶部,还是仅在第一次调用该函数时才进行导入?
导入有两件事:
如果还没有sys.modules
条目,请查找并加载该模块; 如果是Python代码,则执行顶级代码将为该模块生成名称空间。 如果模块已经加载,则跳过此步骤。
将当前名称空间中的名称绑定到导入的对象。 import foo
设置名称foo
。 from foo import bar
绑定名称bar
等。
现在, 本地名称(在函数中)具有速度优势,因为Python将它们存储在C数组中,并使用字节码中的索引来引用它们。 全局名称存储在字典中,并且每次进行查找时哈希开销很小。
因此,将某些内容导入到函数中会导致局部访问比引用全局更快。 每次运行函数时,都会通过sys.modules
的哈希查找来抵消此偏移,因此只有在循环中使用该名称时,您才会注意到这一点。
但是,仅应在经常执行的代码中的关键路径上使用该代码时,才应进行此类优化。 您通过隐藏函数中的导入来支付维护成本,并且需要权衡成本(边际)的速度优势。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.