>def loop(fn ):
>     for i in range(5):
>         fn(  )
>
>def this_function(a=" i am not a string"):
>     print( a )
>
>loop(this_function("I am a string") )  ## note the only change is here
>
>## With this as output:
>
> >>>
>I am a string
>Traceback (most recent call last):
>   File "/home/jeff/MyPythonStuff/call_sub.py", line 9, in <module>
>     loop(this_function("I am a string") )
>   File "/home/jeff/MyPythonStuff/call_sub.py", line 4, in loop
>     fn(  )
>TypeError: 'NoneType' object is not callable
> >>>

NOTE: All code is untested.

You get a NoneType because this_function returns a None. What is happening is 
the this_function("xxx") gets called first and then that return value gets 
passed into loop as 'loop(None)'. I am not sure exactly what you are trying to 
do, but I would probably do something like passing in a list of arguments.

loop(this_function, iterable_of_arguments)

def loop(fn, args):
     for arg in args :
         fn( arg )

The way I would get an argument gets passed to this_function is really 
dependent on your goal. You may want to look at itertools / map libraries as 
well for more options.


Ramit


Ramit Prasad | JPMorgan Chase Investment Bank | Currencies Technology
712 Main Street | Houston, TX 77002
work phone: 713 - 216 - 5423



This email is confidential and subject to important disclaimers and
conditions including on offers for the purchase or sale of
securities, accuracy and completeness of information, viruses,
confidentiality, legal privilege, and legal entity disclaimers,
available at http://www.jpmorgan.com/pages/disclosures/email.  
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to