IPython重新加载不同的模块?

如果您输入的数据如您提到的,例如'USD -$1,009.00 USD','USD $1,95858.98 USD'等等,那么您也可以使用以下方法获取它。


>>> dollar1 = 'USD -$1,009.00 USD'

>>> money = dollar1.split('$')[1].split()[0]

>>>

>>> money

'1,009.00'我用自己的名为“字符串”的模块对Python的内置字符串模块进行了阴影测试,以测试模块的搜索路径行为。我的自定义字符串脚本仅print('string' * 2)包含内容。它位于当前目录中,如下面的代码所示。


Python 3.6.4 |Anaconda custom (64-bit)| (default, Jan 16 2018, 10:22:32) [MSC v.1900 64 bit (AMD64)]

Type 'copyright', 'credits' or 'license' for more information

IPython 6.2.1 -- An enhanced Interactive Python. Type '?' for help.


In [1]: %pwd

Out[1]: 'C:\\Users\\stephen'


In [2]: import string


In [3]: string

Out[3]: <module 'string' from 'C:\\ProgramData\\Anaconda3\\lib\\string.py'>


In [4]: import imp


In [5]: imp.reload(string)

stringstring

Out[5]: <module 'string' from 'C:\\Users\\stephen\\string.py'>

有关在IPython中重新加载的三个问题:

  1. 为什么reload认为它实际导入的模块(本地string.py)已经被导入了?只是文件名相同吗?

  2. 为什么重装导入的模块不同于已导入的模块?是否跳过了在原始导入期间首先检查的sys.modules词典的检查?

  3. 为什么reload / IPython / Python不知道它已经在这里拉出了一个快速的模块,而是将一个模块切换为另一个模块?

编辑:在来回尝试照顾Stack Overflow抱怨我的代码块的过程中,我无意中丢失了一些我想说的话。这是我能记住的:IPython在启动时将内置的字符串模块添加到sys.modules字典中(在sys.path之前搜索sys.modules),而常规的Python交互式提示则不这样做。因此,与交互式提示和IPython相比,我得到了不同的行为。在交互式提示下,我总是得到本地的string.py,因为sys.path从当前目录开始以进行模块搜索。因此,我对常规交互式(Anaconda)与IPython之间的区别了解很多。我列出的问题仍然让我感到困惑。


犯罪嫌疑人X
浏览 189回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python