Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Import Python Script Into Another?

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.

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)  
like image 543
astroblack Avatar asked Mar 29 '13 02:03

astroblack


People also ask

Can two Python scripts import each other?

While two modules can import each other, it can get messy in practice. I found that when some of my methods were decorated with Keras registration decorators, I would get double-registration errors unless I hid them as inner methods within another method of the class.


2 Answers

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 all the names defined in 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.

like image 140
jedwards Avatar answered Sep 21 '22 13:09

jedwards


It's worth mentioning that (at least in python 3), in order for this to work, you must have a file named __init__.py in the same directory.

like image 30
soungalo Avatar answered Sep 17 '22 13:09

soungalo