我试图找到一个关于是否最好使用的综合指南import module
或from module import
?我刚刚开始使用Python,我试图从最初的实践开始.
基本上,我希望如果有人能分享他们的经验,有什么喜好其他开发商,什么是避免任何的最好办法陷阱的道路?
当我尝试使用我创建的包heirarchy时,我得到一个'模块对象没有属性...'错误.错误是当你有一个循环导入时得到的错误(即模块a导入b和模块b)进口a),但我在这里看不到这个问题.我经历过很多类似错误的帖子,但我看到的解释都不合适.
这可以在python 2.7.1和python 2.4.3中看到.
我把它浇灌到下面的例子中:
考虑下面的heirarchy(见下面的代码):
alpha
alpha/__init__.py
alpha/bravo
alpha/bravo/__init__.py
alpha/bravo/charlie.py
alpha/bravo/delta.py
alpha/bravo/echo.py
Run Code Online (Sandbox Code Playgroud)
模块charlie导入echo,而echo又导入delta.如果alpha/bravo/__ init__.py(如alpha/__ init__.py)基本上是空白的,则脚本可以执行以下操作:
import alpha.bravo.charlie
Run Code Online (Sandbox Code Playgroud)
如果我尝试在alpha/bravo/__ init__.py中导入alpha.bravo.charlie(我认为我可以在那里展示相关的类/方法,并且脚本会执行'import alpha.bravo'),问题就会出现.
码:
阿尔法/ __ init__.py
(blank)
Run Code Online (Sandbox Code Playgroud)
字母/喝彩/ __ init__.py
import alpha.bravo.charlie
Run Code Online (Sandbox Code Playgroud)
字母/喝彩/ charlie.py
import alpha.bravo.echo
def charlie_foo(x): return str(x)
def charlie_bar(x): return alpha.bravo.echo.echo_biz()
Run Code Online (Sandbox Code Playgroud)
字母/喝彩/ delta.py
def delta_foo(x): return str(x)
Run Code Online (Sandbox Code Playgroud)
字母/喝彩/ echo.py
import alpha.bravo.delta
print alpha.bravo.delta.delta_foo(1)
def echo_biz(): return 'blah'
Run Code Online (Sandbox Code Playgroud)
如果我尝试:
python -c 'import alpha.bravo'
Run Code Online (Sandbox Code Playgroud)
我明白了:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/home/kmkc980/svn/working/azcif/python/lib/alpha/bravo/__init__.py", line 1, …
Run Code Online (Sandbox Code Playgroud) 我正在为一个约30名开发人员的团队编写一套python编码指南.作为我的文档的基础,到目前为止,我已经研究了谷歌python风格指南和PEP 8风格指南,并结合了两者的信息.
谷歌风格指南比PEP 8更具限制性的地方是进口.Google指南要求开发人员仅导入包和模块,然后通过更合格的名称引用其中的项目.例如:
from pkg import module
...
my_class = module.MyClass()
Run Code Online (Sandbox Code Playgroud)
理由是"每个标识符的来源以一致的方式表示".对于我们的项目,我们打算使用两个或三个级别的包进行组织,因此要了解标识符的完整来源,读者可能还需要检查import语句.我想提倡这种导入方式作为"首选风格":
from pkg.module import MyClass
...
my_class = MyClass()
Run Code Online (Sandbox Code Playgroud)
恕我直言,当名称更简洁时,改进了列表推导等python结构中的可读性.
我不清楚的是python解释器可能在幕后做什么.例如,MyClass现在是该模块的全局命名空间的一部分,还是该模块的所有导入器?(这会很糟糕,可能会导致一些奇怪的错误;如果这是真的,我会提倡谷歌风格).
我的python开发经验仅限于6个月(我们的项目专家咨询的人数不多),所以我希望从社区获得更多信息.以下是我已经研究过的一些项目:
谢谢您的反馈!
我有一个需要的CLI应用程序sympy
.CLI应用程序的速度很重要 - 它在用户反馈循环中使用了很多.
但是,简单地做import sympy
一整秒.这在紧密的反馈循环中变得异常烦人.无论如何在没有更改模块的情况下再次运行脚本时"预加载"或优化模块?
我有两个文件需要使用彼此不同的功能.
file1.py:
import file2 # from file2 import y2
def x1():
print "x1"
def x2():
print "x2"
file2.y2()
Run Code Online (Sandbox Code Playgroud)
file2.py:
import file1 # from file1 import x1
def y1():
file1.x1()
print "y"
def y2():
print "y2"
if __name__ == "__main__":
y1()
Run Code Online (Sandbox Code Playgroud)
我想知道为什么使用import file1
工作,但从file1(from file1 import x1
)导入只是特定的功能不是?
Traceback (most recent call last):
File "file2.py", line 1, in <module>
from file1 import x1
File "file1.py", line 1, in <module>
import file2
File "file2.py", line 1, in <module> …
Run Code Online (Sandbox Code Playgroud) 我是python和flask框架的新手。
对于以下代码:
from flask import Blueprint
main = Blueprint('main', __name__)
from . import views, errors
Run Code Online (Sandbox Code Playgroud)
我发现python有很多导入方式,例如:
import foo
import foo.bar
from foo import bar
from foo import bar, baz
from foo import *
from foo import bar as fizz
Run Code Online (Sandbox Code Playgroud)
但是如何理解from . import ...
?
可能重复:
'import module'或'from module
from … import
import'vsimport .
from glob import glob
from os.path import isfile
def countwords(fp):
with open(fp) as fh:
return len(fh.read().split())
print "There are" ,sum(map(countwords, filter(isfile, glob("*.txt") ) ) ), "words in the files."
Run Code Online (Sandbox Code Playgroud)
在第一行,为什么不只是简单地导入glob库?
有没有理由在"import glob"前面使用"from glob"?
所以在文件foo我导入模块:
import lib.helper_functions
import lib.config
Run Code Online (Sandbox Code Playgroud)
在helper_functions.py中,我有:
import config
Run Code Online (Sandbox Code Playgroud)
当我运行foo的main函数时,我得到一个ImportError
编辑:这是我的文件的结构
foo.py
lib/
config.py
helper_functions.py
Run Code Online (Sandbox Code Playgroud)
在helper_functions中导入配置会导致错误
Traceback (most recent call last):
File "C:\Python33\foo.py", line 1, in <module>
import lib.helper_functions
File "C:\Python33\lib\helper_functions.py", line 1, in <module>
import config
ImportError: No module named 'config'
Run Code Online (Sandbox Code Playgroud)
所以:当我运行foo.py时,解释器会抱怨helper_functions的import语句.然而,当我运行helper_functions的主要部分时,不会出现这样的错误.
from math import floor
和 和有import math.floor
什么区别?
from math import floor
- 完美运行。
import math.floor
- 不起作用。
我假设它.
用于引用文件而floor
不是文件,它只是math
?