将Python脚本导入另一个?

时间:2013-03-29 02:31:25

标签: python python-2.7 import

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

Link to the lesson | Link to the code to correct

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

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)

4 个答案:

答案 0 :(得分:86)

这取决于第一个文件中代码的结构。

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

# first.py

def foo(): print("foo")
def bar(): print("bar")

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

# second.py
import first

first.foo()    # prints "foo"
first.bar()    # prints "bar"

# second.py
from first import foo, bar

foo()          # prints "foo"
bar()          # prints "bar"

或者,导入 all 在first.py中定义的符号:

# second.py
from first import *

foo()          # prints "foo"
bar()          # prints "bar"

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

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

答案 1 :(得分:20)

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

答案 2 :(得分:2)

我强烈建议您阅读SciPy-演讲组织的演讲:

https://scipy-lectures.org/intro/language/reusing_code.html

它解释了所有已评论的疑问。

但是,可以使用以下代码轻松添加新路径并避免重复:

import sys
new_path = 'insert here the new path'

if new_path not in sys.path:
    sys.path.append(new_path)
import funcoes_python #Useful python functions saved in a different script

答案 3 :(得分:0)

希望这项工作

def break_words(stuff):
    """This function will break up words for us."""
    words = stuff.split(' ')
    return words

def sort_words(words):
    """Sorts the words."""
    return sorted(words)

def print_first_word(words):
    """Prints the first word after popping it off."""
    word = words.pop(0)
    print (word)

def print_last_word(words):
    """Prints the last word after popping it off."""
    word = words.pop(-1)
    print(word)

def sort_sentence(sentence):
    """Takes in a full sentence and returns the sorted words."""
    words = break_words(sentence)
    return sort_words(words)

def print_first_and_last(sentence):
    """Prints the first and last words of the sentence."""
    words = break_words(sentence)
    print_first_word(words)
    print_last_word(words)

def print_first_and_last_sorted(sentence):
    """Sorts the words then prints the first and last one."""
    words = sort_sentence(sentence)
    print_first_word(words)
    print_last_word(words)


print ("Let's practice everything.")
print ('You\'d need to know \'bout escapes with \\ that do \n newlines and \t tabs.')

poem = """
\tThe lovely world
with logic so firmly planted
cannot discern \n the needs of love
nor comprehend passion from intuition
and requires an explantion
\n\t\twhere there is none.
"""


print ("--------------")
print (poem)
print ("--------------")

five = 10 - 2 + 3 - 5
print ("This should be five: %s" % five)

def secret_formula(start_point):
    jelly_beans = start_point * 500
    jars = jelly_beans / 1000
    crates = jars / 100
    return jelly_beans, jars, crates


start_point = 10000
jelly_beans, jars, crates = secret_formula(start_point)

print ("With a starting point of: %d" % start_point)
print ("We'd have %d jeans, %d jars, and %d crates." % (jelly_beans, jars, crates))

start_point = start_point / 10

print ("We can also do that this way:")
print ("We'd have %d beans, %d jars, and %d crabapples." % secret_formula(start_point))


sentence = "All god\tthings come to those who weight."

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

print_first_word(words)
print_last_word(words)
print_first_word(sorted_words)
print_last_word(sorted_words)
sorted_words =  sort_sentence(sentence)
print (sorted_words)

print_first_and_last(sentence)
print_first_and_last_sorted(sentence)