<blockquote>
<p>Does it re-import every time the function is run?</p>
</blockquote>
<p>不;或者更确切地说,Python模块在每次导入时基本上都是缓存的,因此导入第二个(或第三个或第四个…)时间实际上并不强迫它们再次经历整个导入过程。<a href="https://docs.python.org/3.6/reference/import.html#the-import-system" rel="noreferrer" title="Second to last paragraph, "When a module is first imported, Python searches for the module and if found, it creates a module object [1], initializing it."">1</a></p>
<blockquote>
<p>Does it import once at the beginning whether or not the function is run?</p>
</blockquote>
<p>不,它只在函数执行时导入。<a href="https://docs.python.org/3.6/reference/executionmodel.html?highlight=local%20scope#binding-of-names" rel="noreferrer" title="Fourth paragraph, "Each assignment or import statement occurs within a block defined by a class or function definition or at the module level (the top-level code block)."">2</a>,<a href="https://docs.python.org/3.6/tutorial/classes.html#python-scopes-and-namespaces" rel="noreferrer" title="Paragraph seven, "The local namespace for a function is created when the function is called, and deleted when the function returns or raises an exception that is not handled within the function."">3</a></p>
<p>至于好处:我想这要看情况了。如果您可能只很少运行一个函数,并且不需要在其他任何地方导入模块,那么<em>可能有利于只在该函数中导入它。或者,如果存在名称冲突或其他原因,您不希望模块中的一个或多个符号在任何地方都可用,您可能只希望将其导入到特定函数中。(当然,对于那些情况,总是有<code>from my_module import my_function as f</code>。)</p>
<p>一般来说,这可能没什么好处。实际上,大多数Python风格的指南鼓励程序员将所有导入放在模块文件的开头。</p>