r/learnpython • • 18h ago

Printing local variables outside of a function

(second-week-beginner PLUS non-native English speaker, so sorry for bad vocab lol)
I know that you cant use local variables outside of a function, but is there a way to do this without defining three separate functions?

def total_seconds(hours1, minutes1, seconds1):
  return (hours1*60*60)+(minutes1*60)+seconds1
print(f'{hours1} hours, {seconds1} seconds and {seconds1} have a total of {total_seconds(7,21,37)} seconds.')

0 Upvotes

15 comments sorted by

View all comments

8

u/crazy_cookie123 18h ago

You don't need to try to pull the variables out of the function, you can just create variables outside of the function and pass them in:

def total_seconds(hours, minutes, seconds):
    return (hours*60*60) + (minutes*60) + seconds

h = 7
m = 21
s = 37
print(f'{h} hours, {m} minutes and {s} seconds have a total of {total_seconds(h, m, s)} seconds.')

1

u/ikeahotdog420 18h ago

Thank you! But I’m wondering whether there is a way to cram it all inside the function; so that all I’d have to do is enter the parameters and have them return as the printed statement (hope this makes sense haha)

3

u/socal_nerdtastic 18h ago

You could return the segment (aka string) to be printed.

def total_seconds(hours1, minutes1, seconds1):
  total = (hours1*60*60)+(minutes1*60)+seconds1
  return f'{hours1} hours, {minutes1} minutes and {seconds1} seconds have a total of {total} seconds.')

print(total_seconds(7,21,37))

Edit: fixed your typo that didn't display minutes.

2

u/danielroseman 18h ago

You can do whatever you want within the function. So you can return the whole string if that's what you want?

def format_time(hours, minutes, seconds):
  total_seconds = (hours*60*60) + (minutes*60) + seconds
  return f'{h} hours, {m} minutes and {s} seconds have a total of {total_seconds} seconds.'

print(format_time(h, m, s))

3

u/seanv507 18h ago

Op, you can return a tuple (hours, minutes, seconds) , list [hours,...] or more complex structure.. Iookup python time class

https://docs.python.org/3/library/datetime.html#datetime.time

2

u/nog642 14h ago

You're using h, m, and s inside your function htere instead of the arguments. That's a bug.

1

u/desrtfx but other languages pro 15h ago

As others have said and demonstrated it is absolutely possible.

Yet, the outcome, the result is completely different.

What if you need to work with the total seconds somewhere later? The returned fully formatted string is a hindrance then.

You could even print the result inside the function if you wanted and return nothing, but this raises the same problem as returning the formatted string - you cannot work with the result of the calculation later - in this case, you might just as well omit the function at all and do the calculation directly from where you originally called the function.

First check the task and its requirements. If it tells you to return the total seconds, do so and only so.

You always need to consider what should happen with the result - the return value(s) of your functions.