最近我大量使用math
模块。我不想一直写math.sqrt(x)
和math.sin(x)
。我想缩短它并写入sqrt(x)
和sin(x)
。 如何?如何避免在python中导入模块时一直写模块的名称?
回答
对于更长的模块名称是很常见的缩短它们,例如
import numpy as np
然后您可以使用短名称。或者你可以导入具体的东西,你需要,如在其他anwsers:
from math import sin, sqrt
这通常被用来包装内,对于更加紧密耦合的代码。对于图书馆来说,缩短名称的第一个选项通常是首选方式。
你应该怎么做从来没有做的是使用from math import *
的形式。它会污染名称空间,可能会导致名称冲突并使调试更加困难。最重要的是它使代码很难阅读,因为不清楚某个特定功能的来源。
交互式解释程序可能会出现异常。但是,一旦你习惯使用缩短的名字,那么可能不值得在那里与另一个大会一起去。
可以导入这样的:
>>> from math import sqrt, sin
>>> sqrt(100)
10.0
有从一个模块直接进口的名字进入进口模块的符号表import语句的一个变体。例如:
>>> from fibo import fib, fib2 >>> fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
甚至还有一个变种导入模块定义了可以在交互式解释有用的所有名称:
>>> from fibo import * >>> fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
注意,在进口*从一般的做法模块或软件包是不赞成的,因为它经常会导致代码难读。但是,可以使用它来保存交互式会话中的输入。
from math import sin, sqrt
# Then you can just do
sqrt(4)
让我补充一点,我认为不仅from math import *
命名空间污染的情况下,而且还from math import cos
。这是因为当您在模块foo
的顶部执行此操作时,然后您使用import foo; print(dir(foo))
查看该模块的命名空间,那么您将在该列表中拥有一个项目cos
。通常情况下,这不是你想要的。
所以大多数时候我所有的进口产品看起来都像from math import cos as _cos
,这个领先的下划线是传统的印记,用来表示一个私人名字。这个想法是,从另一个模块和打印输出import foo; print(name for name in dir(foo) if not name.startswith('_'))
将导入那些在该模块中定义为公共名称的名称。
有一点需要注意:from math import cos as _cos; f = lambda x: _cos(x)
在功能上与import math; g = lambda x: math.cos(x)
不完全相同。不同之处在于,在python中,名称解析发生在运行时,每次调用代码。第一次导入时,名称cos
只能解析一次;对math
模块的任何后续更改都不会影响f()
。对于第二次导入,cos
将在每次调用时针对math
进行解析,因此对数学模块的cos
方法的更改将传播到g()
。当然,math
模块既不会在运行时发生变化,也不会在运行时更改模块的方法,这是一种特别值得推荐的编程技术。另一方面,一个模块就像Python中的其他所有东西一样,所以它总是能够意识到引擎盖下发生了什么。
通常,from math import cos as _cos; f = lambda x: _cos(x)
是你想要的,它也比第二种形式快一点。
- 1. Python(2.7):如何避免导入的模块出现在我的模块中?
- 2. 如何将Python模块导入与导入模块名称相同的包中?
- 3. 如何避免在Python模块系统中命名冲突?
- 4. Python:导入一个模块,但避免执行它?
- 5. 在Python中导入模块
- 6. 仅在Python中不存在模块时才导入模块
- 7. Python指定从哪个模块导入,如果有重复的模块名称?
- 8. 导入模块名称冲突在Django
- 9. 如何使用Javascript ES6 ES2015模块将常量直接导出/导入到导入模块名称空间?
- 10. 如何导入名称与包装中的模块冲突的模块?
- 11. Python模块导入*
- 12. Python模块导入
- 13. 覆盖进口,模块的显示名称导入模块
- 14. Python动态导入 - 如何从变量的模块名称中导入*
- 15. 在python中,如何通过模块名称的用户输入字符串导入模块
- 16. 在导入模块和方法的名称在Python
- 17. 。导入[模块] - >导入错误:无法导入名[模块]
- 18. Python 3的导入模块错误:没有模块名为request
- 19. 导轨和模块名称加入
- 20. 如何导入dateutil.rrule模块在Python
- 21. Python模块名称冲突
- 22. 在Python中,如何从导入的模块访问主模块的名称空间?
- 23. python会在多次导入模块时优化模块吗?
- 24. 如何导入已导入相同文件名的python模块?
- 25. 如何在单个android应用程序中正确导入多个统一模块,避免android studio中不同统一模块之间的名称冲突?
- 26. 保留导入的模块不在Python包名称空间
- 27. 如何在Python 3.6中导入名为[userinput]的模块?
- 28. Python的同一模块名称公约
- 29. 如何获取python模块导入的模块列表
- 30. 如何更改Python模块名称?