Python 我能';t在函数中导入模块

Python 我能';t在函数中导入模块,python,Python,输出: def imp(): import random def choi(a): random.choice(a) if __name__ == '__main__': imp() choi(['a', 'b']) 回溯(最近一次呼叫最后一次): 文件“”,第4行,在 NameError:未定义名称“random” 您已经在函数中导入了包,因此它仅在函数范围内本地导入。因此,当函数退出时,导入的包将不再可用 通常情况下,在文件顶部导入包: Traceback

输出:

def imp():
    import random
def choi(a):
    random.choice(a)
if __name__ == '__main__':
    imp()
    choi(['a', 'b'])
回溯(最近一次呼叫最后一次):
文件“”,第4行,在
NameError:未定义名称“random”

您已经在函数中导入了包,因此它仅在函数范围内本地导入。因此,当函数退出时,导入的包将不再可用

通常情况下,在文件顶部导入包:

Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
NameError: name 'random' is not defined

我认为,因为当您调用imp()时,可以导入随机库,但在关闭imp()后,主函数可以“记住”导入此库,因此会出现错误。

在脚本开头使用
import
,或者在
choi
函数中使用
choi是否有任何理由尝试在函数中导入模块?是,您可以在函数中导入模块,但它不会影响全局名称空间,只影响函数的本地名称空间。谢谢,我是新来的。我知道,但我要拿到学生证。所以,我应该用至少10分来回答这个问题。你能帮我把这个问题的投票权提高吗?另外,请确保打印/返回值,否则它没有多大用处。不要担心投票权的提高。据我所知,提问没有标准,如果你提出了好的问题,人们会自己投票。
import random

def choi(a):
    choice = random.choice(a) 
    print(choice) # use print to see the output
    return choice # use return to return the output 

if __name__ == '__main__':
    out = choi(['a', 'b'])  # capture the return value in out