标签: python-module

如何在Python中记录模块?

而已.如果要记录函数或类,请在定义之后放置一个字符串.例如:

def foo():
    """This function does nothing."""
    pass
Run Code Online (Sandbox Code Playgroud)

但是模块怎么样?如何记录file.py的作用?

python documentation python-module

65
推荐指数
4
解决办法
4万
查看次数

如何在Python中获取__main__模块的文件名?

假设我有两个模块:

a.py:

import b
print __name__, __file__
Run Code Online (Sandbox Code Playgroud)

b.py:

print __name__, __file__
Run Code Online (Sandbox Code Playgroud)

我运行"a.py"文件.这打印:

b        C:\path\to\code\b.py
__main__ C:\path\to\code\a.py
Run Code Online (Sandbox Code Playgroud)

问题:如何__main__从"b.py"库中获取模块的路径(在本例中为"a.py")?

python python-module

63
推荐指数
4
解决办法
4万
查看次数

什么是Python的heapq模块?

我尝试了"heapq"并得出结论,我的期望与我在屏幕上看到的不同.我需要有人解释它是如何工作的以及它在哪里有用.

从第2.2 节中的本周Python模块一书中可以看出

如果在添加和删除值时需要维护排序列表,请查看heapq.通过使用heapq中的函数来添加或删除列表中的项,您可以以较低的开销维护列表的排序顺序.

这就是我所做的和得到的.

import heapq
heap = []

for i in range(10):
    heap.append(i)

heap
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

heapq.heapify(heap)    
heapq.heappush(heap, 10)    
heap
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

heapq.heappop(heap)
0    
heap
[1, 3, 2, 7, 4, 5, 6, 10, 8, 9] <<< Why the list does not remain sorted?

heapq.heappushpop(heap, 11)
1
heap
[2, 3, 5, 7, 4, 11, 6, 10, 8, 9] …
Run Code Online (Sandbox Code Playgroud)

python heap python-module data-structures

59
推荐指数
3
解决办法
5万
查看次数

如何从函数中进行全局导入?

我担心这是解决问题的一种混乱方式,但......

假设我想根据某些条件在Python中进行一些导入.

出于这个原因,我想写一个函数:

def conditional_import_modules(test):
    if test == 'foo':
        import onemodule, anothermodule
    elif test == 'bar':
        import thirdmodule, and_another_module
    else:
        import all_the_other_modules
Run Code Online (Sandbox Code Playgroud)

现在我如何才能在全球范围内提供导入的模块?

例如:

conditional_import_modules(test='bar')
thirdmodule.myfunction()
Run Code Online (Sandbox Code Playgroud)

python import module python-module

55
推荐指数
4
解决办法
4万
查看次数

究竟什么是"原始字符串正则表达式"以及如何使用它?

正则表达式的python文档,关于'\'字符:

解决方案是使用Python的原始字符串表示法来表示正则表达式模式; 在前缀的字符串文字中,不以任何特殊方式处理反斜杠'r'.所以r"\n"是一个包含'\'和的双字符字符串'n',"\n"而是包含换行符的单字符字符串.通常,模式将使用此原始字符串表示法在Python代码中表示.

什么是原始字符串表示法?如果您使用原始字符串格式,这是否意味着"*"作为文字字符而不是零或多指标?这显然是不对的,否则正则表达式将彻底失去它的力量.但是,如果它是一个原始字符串,它"\n"是如何识别换行符,如果它实际上是一个反斜杠和一个"n"

我不跟随.

编辑赏金:

我试图理解原始字符串正则表达式如何匹配换行符,制表符和字符集,例如\w单词或\d数字或所有其他,如果原始字符串模式不能将反斜杠识别为普通字符以外的任何内容.我真的可以使用一些很好的例子.

python regex python-module rawstring

55
推荐指数
3
解决办法
3万
查看次数

两个Python模块需要彼此的内容 - 这可以吗?

我有一个Bottle webserver模块,其中包含以下行:

from foobar.formtools import auto_process_form_insert
Run Code Online (Sandbox Code Playgroud)

foobar.formtools模块包含以下行:

from foobar.webserver import redirect, redirect_back
Run Code Online (Sandbox Code Playgroud)

当然,两者都会导致以下错误:

ImportError:无法导入名称auto_process_form_insert
ImportError:无法导入名称重定向

事实上,在Python中,两个模块不能互相导入,并且所有模块导入必须是分层的,或者我做错了什么?或者,是否有一种解决方法是将所有这些不错的功能放在新模块中?

python python-module

54
推荐指数
2
解决办法
3万
查看次数

如果import语句只包含文件名,python如何找到模块文件?

无处不在,我看到Python代码使用import sys或导入模块import mymodule

如果没有提供目录或路径,解释器如何找到正确的文件?

python python-module python-import pythonpath

51
推荐指数
3
解决办法
5万
查看次数

导入python模块不在路径上

我有一个模块foo,包含util.py和bar.py.

我想在IDLE或python会话中导入它.我该怎么做?

我找不到关于如何导入不在当前目录或默认python PATH中的模块的文档.尝试后import "<full path>/foo/util.py",和from "<full path>" import util

我能得到的最接近的是

import imp
imp.load_source('foo.util','C:/.../dir/dir2/foo')
Run Code Online (Sandbox Code Playgroud)

这给了我在Windows 7上的权限被拒绝.

python import external python-module

49
推荐指数
2
解决办法
9万
查看次数

阻止Python缓存导入的模块

在使用IPython在Python中开发一个大型项目(分成几个文件和文件夹)时,我遇到了缓存导入模块的麻烦.

问题是指令import module只读取模块一次,即使该模块已经改变!因此,每次我更改包中的内容时,都必须退出并重新启动IPython.痛苦.

有没有办法正确强制重装一些模块?或者,更好的是,以某种方式阻止Python缓存它们?

我尝试了几种方法,但都没有效果.特别是我遇到了非常非常奇怪的错误,就像一些模块或变量神秘地变得相等None......

我找到的唯一明智的资源是从pyunit 重新加载Python模块,但我没有检查它.我想要那样的东西.

一个很好的替代方案是让IPython重启,或以某种方式重启Python解释器.

那么,如果你用Python开发,你找到了什么解决方案来解决这个问题?

编辑

为了清楚起见:很明显,我理解一些旧的变量取决于模块的先前状态可能会存在.那个我能接受.为什么在Python中如此难以强制重新加载模块而不会发生各种奇怪的错误?

更具体地说,如果我将整个模块放在一个文件中,module.py那么以下工作正常:

import sys
try:
    del sys.modules['module']
except AttributeError:
    pass
import module

obj = module.my_class()
Run Code Online (Sandbox Code Playgroud)

这段代码很漂亮,我可以在不退出IPython的情况下开发数月.

但是,每当我的模块由多个子模块组成时,地狱就会松动:

import os
for mod in ['module.submod1', 'module.submod2']:
    try:
        del sys.module[mod]
    except AttributeError:
        pass
# sometimes this works, sometimes not. WHY?
Run Code Online (Sandbox Code Playgroud)

为什么我的模块在一个大文件或几个子模块中是如此不同?为什么这种方法不起作用?

python import python-module ipython python-import

48
推荐指数
5
解决办法
3万
查看次数

如何使用`from module import*`重新加载导入的python模块

我在这个有用的问答中看到了人们可以使用的,reload(whatever_module)或者在Python 3中imp.reload(whatever_module).

我的问题是,如果我说from whatever_module import *要导入怎么办?然后我whatever_module在使用时无需参考reload().你们是否会因为将整个模块投入全局命名空间而对我大喊大叫?:)

python python-module python-import

45
推荐指数
3
解决办法
3万
查看次数