将 Python 脚本导入另一个?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/15696461/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Import Python Script Into Another?
提问by astroblack
I'm going through Zed Shaw's Learn Python The Hard Way and I'm on lesson 26. In this lesson we have to fix some code, and the code calls functions from another script. He says that we don't have to import them to pass the test, but I'm curious as to how we would do so.
我正在学习 Zed Shaw 的 Learn Python The Hard Way 和第 26 课。在本课中,我们必须修复一些代码,这些代码会从另一个脚本调用函数。他说我们不必导入它们来通过测试,但我很好奇我们将如何这样做。
Link to the lesson| Link to the code to correct
And here are the particular lines of code that call on a previous script:
以下是调用先前脚本的特定代码行:
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)
Code to Correct:
更正代码:
- This is the code from the course, that's being referenced
- Do not edit the question to correct the code
- 这是课程中的代码,正在被引用
- 不要编辑问题来更正代码
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)
采纳答案by jedwards
It depends on how the code in the first file is structured.
这取决于第一个文件中的代码的结构。
If it's just a bunch of functions, like:
如果它只是一堆函数,例如:
# first.py
def foo(): print("foo")
def bar(): print("bar")
Then you could import it and use the functions as follows:
然后你可以导入它并使用如下函数:
# second.py
import first
first.foo() # prints "foo"
first.bar() # prints "bar"
or
或者
# second.py
from first import foo, bar
foo() # prints "foo"
bar() # prints "bar"
or, to import allthe names defined in first.py:
或者,导入first.py 中定义的所有名称:
# second.py
from first import *
foo() # prints "foo"
bar() # prints "bar"
Note: This assumes the two files are in the same directory.
注意:这假设两个文件在同一目录中。
It gets a bit more complicated when you want to import names (functions, classes, etc) from modules in other directories or packages.
当您想从其他目录或包中的模块导入名称(函数、类等)时,它会变得有点复杂。
回答by soungalo
It's worth mentioning that (at least in python 3), in order for this to work, you must have a file named __init__.pyin the same directory.
值得一提的是(至少在 python 3 中),为了使其工作,您必须__init__.py在同一目录中命名一个文件。
回答by devil in the detail
Following worked for me and it seems very simple as well:
以下对我有用,看起来也很简单:
Let's assume that we want to import a script ./data/get_my_file.py and want to access get_set1() function in it.
假设我们要导入一个脚本 ./data/get_my_file.py 并希望访问其中的 get_set1() 函数。
import sys
sys.path.insert(0, './data/')
import get_my_file as db
print (db.get_set1())
回答by Amar
Hope this work
希望这项工作
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)
回答by Gabriel Gaboardi
I highly recommend the reading of a lecture in SciPy-lectures organization:
我强烈推荐阅读 SciPy-lectures 组织的讲座:
https://scipy-lectures.org/intro/language/reusing_code.html
https://scipy-lectures.org/intro/language/reusing_code.html
It explains all the commented doubts.
它解释了所有评论中的疑问。
But, new paths can be easily added and avoiding duplication with the following code:
但是,可以使用以下代码轻松添加新路径并避免重复:
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

