将 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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-18 20:42:59  来源:igfitidea点击:

Import Python Script Into Another?

pythonpython-2.7import

提问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