[Tutor] __name__=='__main__'

Dave Angel d at davea.name
Tue Feb 21 04:26:12 CET 2012


On 02/20/2012 10:07 PM, Michael Lewis wrote:
> Now that I am better understanding '__name__'=='__main__', I need to get
> advice on one last part. Since you put this in the file as an if statement,
> some instruction must come after. What do you suggest putting after this
> statement/is that piece of code ever put into action?
> In my example below, I've done a few tests like putting a print statement
> under '__name__'=='__main__' and it isn't printed. I am not sure what to
> put in this code block.
>
> def MultiplyText(text, multiplier):
>      '''Recieve a S&  int. For digits in S, multiply by multiplier and
> return updated S.'''
>      return ' '.join(str(int(num) * multiplier) if num.isdigit() else num
> for num in text)
>
>
> def GetUserInput():
>      '''Get S&  multiplier. Test multiplier.isdigit(). Call
> MultiplyText(text, multiplier)'''
>      text = raw_input('Enter some text: ')
>      while True:
>          multiplier = raw_input('Enter a multiplier: ')
>          try:
>              multiplier = int(multiplier)
>              break
>          except ValueError:
>              continue
>      return MultiplyText(text.split(), multiplier)
>
>
> if '__name__' == '__main__':
>      GetUserInput()
>

I don't see any print statement in the if-clause.  In fact I don't see 
any prints in the entire program.  Just how do you expect to know if it 
even ran?

What IS there is a call to GetUserInput().  But for some reason that 
function doesn't return user-input.  Why not?  A function should nearly 
always take some arguments, and return a result.  And its name should 
reflect what it's going to do

Besides that, you do return a value from GetUserInput()., but never use 
that value.  So what's the point?

Probably what belongs in the if clause is a call to main().  Then you 
need to write main() function, to call GetUserInput() and save the value 
returned (a tuple of string and int, my choice).  Then it'd call 
MultiplyText with those two, and with this mysterious num value that you 
conjured up in MultiplyText.

Once you've factored the two functions into separately called entities, 
you have a chance of debugging your multiple mistakes still remaining. 
   In between the two function calls in main(), you can actually print 
out your intermediate results, and see if they look reasonable to you.


In fact, while testing, you just might want to try calling 
MultiplyText() with whatever literal arguments make sense.  And print 
the result you get.  A few of those tests, and you might get comfortable 
with  the function.

-- 

DaveA


More information about the Tutor mailing list