Colin Cunningham
Colin Cunningham

Reputation: 25

Why is this def function not being executed in Python?

Python is simply bringing up another prompt when I enter the following piece of code from Zed Shaw exercise 18.

# this one is like our scripts with argv
def print_two(*args):
    arg1, arg2 = args
    print "arg1: %r, arg2: %r" % (arg1, arg2)

# ok, that *args is actually pointless, we can just do this
def print_two_again(arg1, arg2) :
    print "arg1: %r, arg2: %r" % (arg1, arg2)

# this just takes one argument
def print_one(arg1) :
    print "arg1: %r" % arg1

# this one takes no argument
def print_none() :
    print "I got nothin'."


    print_two("Zed","Shaw")
    print_two_again("Zed","Shaw")
    print_one("First!")
    print_none()

Upvotes: 1

Views: 7043

Answers (4)

lamwaiman1988
lamwaiman1988

Reputation: 3742

you need to keep the code aligned. You calls to the above method were treat as part of the function print_none().

Try this:

    # this one is like our scripts with argv
def print_two(*args):
    arg1, arg2 = args
    print "arg1: %r, arg2: %r" % (arg1, arg2)

# ok, that *args is actually pointless, we can just do this
def print_two_again(arg1, arg2) :
    print "arg1: %r, arg2: %r" % (arg1, arg2)

# this just takes one argument
def print_one(arg1) :
    print "arg1: %r" % arg1

# this one takes no argument
def print_none() :
    print "I got nothin'."


print_two("Zed","Shaw")
print_two_again("Zed","Shaw")
print_one("First!")
print_none()

Upvotes: 1

Avilo
Avilo

Reputation: 1204

Remove your indentation on the final lines. Because they are indented they are part of print_none() instead of executing in the global scope. Once they are back in the global scope you should see them running.

Upvotes: 1

eat_a_lemon
eat_a_lemon

Reputation: 3208

def defines a function. Functions are potential...they a set of steps waiting to be executed. To execute a function in python it must be defined and called.

# this one takes no argument
def print_none() :
    print "I got nothin'."

#brings up prompt..then execute it
print_none()

Upvotes: 2

senderle
senderle

Reputation: 150977

The indentation of the last four lines is wrong. Because they're indented, the python interpreter thinks they're part of print_none(). Unindent them, and the interpreter will call them as expected. It should look like this:

>>> print_two("Zed","Shaw")
[... etc ...]

Upvotes: 4

Related Questions