在Python中,一旦我在解释器会话中导入模块X import X,并且模块在外部更改,我可以重新加载模块reload(X).然后,在我的翻译会话中可以使用这些更改.
我想知道当我从模块X导入组件Y时是否也可以这样做from X import Y.
该语句reload Y不起作用,因为Y本身不是模块,而只是模块内部的一个组件(在本例中是一个类).
是否可以在不离开解释器会话(或导入整个模块)的情况下重新加载模块的各个组件?
编辑:
为了澄清,问题是从模块X导入类或函数Y并重新加载更改,而不是从包X中重新模块Y.
我是Python的新手,因为我想扩展我使用R学习的技能.在RI中,往往会加载一堆库,有时会导致函数名称冲突.
什么是Python的最佳实践.我看到一些具体的变化,我没有看到它们之间的区别
import pandas,from pandas import *和 from pandas import DataFrame
前两个之间有什么区别,我应该只输入我需要的东西.此外,对于制作小程序来处理数据和计算简单统计数据的人来说,最糟糕的后果是什么.
UPDATE
我找到了这个出色的指南.它解释了一切.
我正在改变一堆旧的python代码,偶尔会遇到包之间的名称冲突.我有一个关于何时应该使用绝对导入以及是否适合仅按名称导入同级模块的问题.
/package/
/package/__init__.py
/package/subA
/package/subA/__init__.py
/package/subA/moduleA.py
/package/subA/moduleB.py
/package/subB
/package/subB/__init__.py
/package/subB/moduleA.py
/package/subB/moduleB.py
Run Code Online (Sandbox Code Playgroud)
包中的每个import语句应该是这样的:
import package.subX.moduleX
Run Code Online (Sandbox Code Playgroud)
要么
from package.subX import moduleX
Run Code Online (Sandbox Code Playgroud)
在子包__init__.py文件中怎么样?简单地说是不对的
import moduleA
import moduleB
Run Code Online (Sandbox Code Playgroud)
或者,在/package/subA/moduleA.py中,简单地放入是不对的:
import moduleB
Run Code Online (Sandbox Code Playgroud) 是否可以在python中声明函数并在以后或在单独的文件中定义它们?
我有一些代码:
class tata:
def method1(self):
def func1():
# This local function will be only used in method1, so there is no use to
# define it outside.
# Some code for func1.
# Some code for method1.
Run Code Online (Sandbox Code Playgroud)
问题是代码变得混乱且难以阅读.所以我想知道是否有可能在func1内部声明method1并在以后定义它?
我有一个包含iterables的python字典,其中一些是列表,但大多数是其他字典.我想做类似以下的glob-style赋值:
myiter['*']['*.txt']['name'] = 'Woot'
Run Code Online (Sandbox Code Playgroud)
也就是说,对于myiter中的每个元素,使用以".txt"结尾的键查找所有元素,然后将"name"项设置为"Woot".
我已经考虑过对dict进行子类化和使用fnmatch模块.但是,我不清楚实现这一目标的最佳方法是什么.
在eclipse中,有一个方便的简写CTRL + SHIFT + o,它将自动包含基于所使用的类或模块所需的导入(包含)语句.你有没有为vim或emacs找到这样的插件?
严格按照文档中的示例完成此错误.并且你无法在任何地方找到任何关于它的澄清,无论是长篇文档页面,google还是stackoverflow.另外,阅读optparse.py显示OptionGroup在那里,这增加了混乱.
Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29)
>>> from optparse import OptionParser
>>> outputGroup = OptionGroup(parser, 'Output handling')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'OptionGroup' is not defined
Run Code Online (Sandbox Code Playgroud)
我敢打赌,有人发现我的错误不到1分钟.:)
是的,这意味着我知道答案,但是因为这花了我很长时间才发现我想在这里"记录"它.
由于我更喜欢小文件,我通常会为每个Python模块放置一个"公共"类.我将模块命名为与其包含的类相同的名称.因此,例如,ToolSet将在中定义类ToolSet.py.
在一个包中,如果另一个模块需要实例化ToolSet类的对象,我使用:
from ToolSet import ToolSet
...
toolSet = ToolSet()
Run Code Online (Sandbox Code Playgroud)
代替:
import ToolSet
...
toolSet = ToolSet.ToolSet()
Run Code Online (Sandbox Code Playgroud)
我这样做是为了减少"口吃"(我更喜欢在文件顶部比在我的代码中口吃.)
这是一个正确的习语吗?
这是一个相关的问题.在一个软件包中,我经常会有一些我希望向外界展示的课程.这些我在__init__.pyfor package中导入.例如,如果ToolSet在包中UI并且我想要公开它,我会将以下内容放入UI/__init__.py:
from ToolSet import ToolSet
Run Code Online (Sandbox Code Playgroud)
所以,从外部模块我可以写
import UI
...
toolSet = UI.ToolSet()
Run Code Online (Sandbox Code Playgroud)
再次,这是pythonic?
在我的代码中,我试图从文件中提取一些数据.当我尝试在第61行运行我的代码时,我收到此错误.我的代码在这里:
from datetime import date
from math import floor;
from adjset_builder import adjset_builder
def check_and_update(d,start,end,log):
# print start,end;
if start in d:
if end in d[start]:
log.write("{0}-{1}\n".format(start, end))
if d[start][end] == 1:
print "one found"
d[start][end] += 1
def build_dictionary(my_adjset,my_list,factor,outfile,log):
log.write("building dictionary:\n");
window_size = int(floor(len(my_list)*factor));
if window_size<2:
log.write("too small\n")
return;
log.write('Total:{0},windowsize:{1}\n'.format(len(my_list),window_size));
log.write("Window at place: 0,")
for i in xrange(window_size):
j = i+1;
while j<window_size:
check_and_update(my_adjset, my_list[i][1], my_list[j][1],log);
j=j+1
i=1;
while i<=len(my_list)-window_size:
log.write("{0},".format(i))
j=i;
k=i+window_size-1;
while j<k:
check_and_update(my_adjset, my_list[i][1], …Run Code Online (Sandbox Code Playgroud) python ×9
import ×2
coding-style ×1
declaration ×1
emacs ×1
nameerror ×1
optparse ×1
python-2.7 ×1
syntax ×1
vim ×1
workflow ×1