Python 为什么可以';我声明了一个函数,用于导入所有包

Python 为什么可以';我声明了一个函数,用于导入所有包,python,Python,返回名称的原因错误:名称“pd”未定义,如何修复 def all_package(): import numpy as np import pandas as pd import matplotlib.pyplot as plt 标准化导入的最简洁的方法是创建一个新文件,可能standard\u imports.py包含以下内容: import numpy as np import pandas as pd import matplotlib.pyplot as plt 然后,在

返回名称的原因错误:名称“pd”未定义,如何修复

def all_package():
  import numpy as np
  import pandas as pd
  import matplotlib.pyplot as plt

标准化导入的最简洁的方法是创建一个新文件,可能
standard\u imports.py
包含以下内容:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
然后,在主脚本中,您可以使用以下方法轻松导入所有内容:

from standard_imports import *

其他一些不太整洁的选项:

def all_package():
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    return np, pd, plt
np, pd, plt = all_package()
这仍然使函数在全局范围内没有副作用,但假设目标是在许多模块中使用此函数,则意味着添加包将涉及更改每个模块

最简单的方法是使用
global
关键字,但在函数中更改全局范围通常是不好的做法。
global
关键字通常被视为代码气味:

def all_package():
    global np, pd, plt
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt

all_package()

那么…
global
呢…?!为什么要为此使用函数?为什么不像通常那样将导入放在文件的顶部呢?可以使用@deceze建议的
global
,但这不会产生pythonic代码。如果您真的需要,请添加注释,解释未来读者/维护人员的理由。您真的只是想问为什么会发生这种情况,还是想知道如何解决它?中的讨论可能也会让您感兴趣,@Wallikalol。这仍然不能回答OP的问题。他们没有要求解决,他们问的是原因。@BlackThunder我认为原因隐含在回答中,即为导入的包名创建的“变量”仅在该范围内function@lucidbrot我知道。我说的是mousetail发布的答案。
def all_package():
    global np, pd, plt
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt

all_package()