【问题标题】:Python How To Import And Use Module With One LinePython如何用一行代码导入和使用模块
【发布时间】:2015-08-19 20:35:10
【问题描述】:

我的问题是一个相当直截了当的问题。我有这段代码可以从互联网上加载天然气储存号码。

from urllib.request import urlopen
print(int(str(urlopen("http://ir.eia.gov/ngs/wngsr.txt").read()).split("\\n")[4].split(" ")[2]))

我想知道的是,我怎么能在一行中做到这一点?更具体地说,我想知道如何摆脱导入行并执行以下操作:

print(int(str(urllib.request.urlopen("http://ir.eia.gov/ngs/wngsr.txt").read()).split("\\n")[4].split(" ")[2]))

(我将 urlopen 调用更改为 urllib.request.urlopen)这有点像 Java,如果您使用完全限定名称,则不需要导入语句。你知道有什么办法吗?谢谢!

【问题讨论】:

  • 你总是需要导入
  • 查看 dunder__import__ 内置。但这是一个糟糕的主意。
  • Python 导入不只是在本地命名空间中创建对该类或函数的引用(如 Java),它们还运行模块的 __init__.py 代码来设置环境以支持模块的函数和类。这就是为什么它们在使用前总是需要导入。
  • 另外,我想问自己一个问题'为什么'我想这样做?除非一条线非常快或其他什么 - 在您的特定示例中不是这种情况!
  • @jwilner Lol 我明白了,但是当我使用 import 时,我无法从中调用函数。也许我做错了什么?

标签: python string url import python-import


【解决方案1】:

在尝试 Zizouz212 的建议时,我发现这可行

print(int(str(__import__('urllib').request.urlopen("http://ir.eia.gov/ngs/wngsr.txt").read()).split("\\n")[4].split(" ")[2]))

【讨论】:

  • 大声笑我忘了这个问题。这是个好主意,但我认为您需要添加fromlist 参数来导入子模块。所以__import__ 看起来像这样:__import__('urllib', fromlist=['request'])
【解决方案2】:

您总是需要导入,但是您仍然可以使用分号来分隔语句,但是您为什么要这样做!?!?!?

from urllib.request import urlopen; print(int(str(urllib.request.urlopen("http://ir.eia.gov/ngs/wngsr.txt").read()).split("\\n")[4].split(" ")[2]))
#              note the semi-colon ^

【讨论】:

  • 我并不是说我会在现实生活中使用它,我只是想知道它是否可能。谢谢
  • 你为什么要这样做?在 shell 中运行命令。这是我几乎每天都使用的一个单行器,用于计算文件中接受字符串中的换行符的 csv 记录总数: cat *.csv | python -c "import csv; import sys; print(sum(1 for i in csv.reader(sys.stdin)))"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-16
相关资源
最近更新 更多