Confused: Newbie Function Calls

Jean-Michel Pichavant jeanmichel at sequans.com
Wed Aug 11 12:47:05 EDT 2010


fuglyducky wrote:
> I am a complete newbie to Python (and programming in general) and I
> have no idea what I'm missing. Below is a script that I am trying to
> work with and I cannot get it to work. When I call the final print
> function, nothing prints. However, if I print within the individual
> functions, I get the appropriate printout.
>
> Am I missing something??? Thanks in advance!!!!
>
> ################################################
> # Global variable
> sample_string = ""
>
> def gen_header(sample_string):
>     HEADER = """
>     mymultilinestringhere
>     """
>
>     sample_string += HEADER
>     return sample_string
>
> def gen_nia(sample_string):
>     NIA = """
>     anothermultilinestringhere
>     """
>
>     sample_string += NIA
>     return sample_string
>
>
> gen_header(sample_string)
> gen_nia(sample_string)
>
> print(sample_string)
>   
sample_string = gen_header(sample_string)
sample_string = gen_nia(sample_string)

print sample_string

That should work.

I guess you made an error thinking that

sample_string += HEADER

would change the value of the given parameter. It does not. The value is 
changed only for sample_string within the function This is the case for 
any immutable object (strings are immutable) in Python.

Example:


class AMutable(object):
    def __init__(self):
        self.description = 'I am X'

myString = 'I am a immutable string' # an immutable object
myMutable = AMutable() # a mutable object

def bar(myMutable):
    myMutable.description = 'I am Y' # change the attribute description 
of the object

def foo(aString):
    aString = 'fooooooooo' # will have no effect outside the function

print 'before calling bar: ', myMutable.description
bar(myMutable)
print 'after calling bar: ', myMutable.description
print 'before calling foo: ', myString
foo(myString)
print 'after calling foo: ', myString


 >
before calling bar:  I am X
after calling bar:  I am Y
before calling foo:  I am a immutable string
after calling foo:  I am a immutable string

cheers,

JM



More information about the Python-list mailing list