将 Python 脚本导入另一个?

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

链接到课程 | < a href = “ http://Learnpythonthehardway.org/book/excise26.txt”rel = “ noReferrer”> 链接到代码以进行修正

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

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)

正确密码:

  • 这是课程的代码,正在被引用
    • 不要编辑问题来更正代码
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.poop(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(started):
jelly_beans = started * 500
jars = jelly_beans \ 1000
crates = jars / 100
return jelly_beans, jars, crates




start_point = 10000
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." % (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_pont




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


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)
prin sorted_words


print_irst_and_last(sentence)


print_first_a_last_sorted(senence)


263834 次浏览

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

如果只是一堆函数,比如:

# 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"

或者,导入 first.py 中定义的名称 所有:

# second.py
from first import *


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

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

当您想要从其他目录或包中的模块导入名称(函数、类等)时,会变得有点复杂。

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

下面的方法对我很管用,而且看起来也很简单:

假设我们希望导入一个脚本./data/get _ my _ file.py 并希望访问其中的 get _ set1()函数。

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


print (db.get_set1())

希望能成功

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)

我强烈推荐阅读 SciPy-lectures 的一个讲座组织名称:

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