将Python脚本导入另一个?

ast*_*ack 53 python import python-2.7

我正在通过Zed Shaw的学习Python艰难的方式,我在第26课.在本课中,我们必须修复一些代码,代码从另一个脚本调用函数.他说我们不必导入它们来通过测试,但我很好奇我们将如何做到这一点.

链接到课程 | 链接到要更正的代码

以下是调用前一个脚本的特定代码行:

words = ex25.break_words(sentence)
sorted_words = ex25.sort_words(words)

print_first_word(words)
print_last_word(words)
print_first_word(sorted_words)
print_last_word(sorted_words)
sorted_words = ex25.sort_sentence(sentence)
print sorted_words
print_first_and_last(sentence)
print_first_a_last_sorted(sentence)
Run Code Online (Sandbox Code Playgroud)

jed*_*rds 94

这取决于第一个文件中的代码是如何构造的.

如果它只是一堆功能,例如:

# first.py
def foo(): print("foo")
def bar(): print("bar")
Run Code Online (Sandbox Code Playgroud)

然后你可以导入它并使用如下函数:

# second.py
import first

first.foo()    # prints "foo"
first.bar()    # prints "bar"
Run Code Online (Sandbox Code Playgroud)

要么

# second.py
from first import foo, bar

foo()          # prints "foo"
bar()          # prints "bar"
Run Code Online (Sandbox Code Playgroud)

或者,导入first.py中定义的所有符号:

# second.py
from first import *

foo()          # prints "foo"
bar()          # prints "bar"
Run Code Online (Sandbox Code Playgroud)

注意:这假定这两个文件位于同一目录中.

当你想在其他目录或模块内导入符号(函数,类等)时,它会变得有点复杂.

  • 这对Python 3有何影响? (4认同)
  • 也许有用:如果您使用“importfirst.py”(而不是“importfirst”),它将不起作用。 (3认同)

sou*_*alo 21

值得一提的是(至少在python 3中),为了使它能够工作,你必须有一个__init__.py在同一目录中命名的文件.

  • 如果您的脚本(您正在运行的脚本)和您要导入的文件位于同一目录中,则*不需要`__init __.py`文件.如果您的脚本在*包含您要导入的文件的目录之外*,那么您将需要这样的文件. (9认同)
  • 实际上并非我的情况.没有它,它工作得很好 (7认同)
  • @LoveMeow是的,没问题.http://stackoverflow.com/questions/448271/what-is-init-py-for (2认同)
  • 更新之前的评论,[PEP 420](https://www.python.org/dev/peps/pep-0420/) / Python3.3 引入了“隐式命名空间包”,消除了对空 `__init__.py` 的需要许多情况下的文件。 (2认同)

dev*_*ail 8

以下对我有用,看起来也很简单:

假设我们要导入一个脚本 ./data/get_my_file.py 并希望访问其中的 get_set1() 函数。

import sys
sys.path.insert(0, './data/')
import get_my_file as db

print (db.get_set1())
Run Code Online (Sandbox Code Playgroud)