Does the order of functions in a Python script matter?

前端 未结 2 756
无人共我
无人共我 2021-02-03 18:04

Let\'s say I have two functions in my script: sum_numbers and print_sum. Their implementation is like this:

def sum_numbers(a, b):
             


        
相关标签:
2条回答
  • 2021-02-03 18:14

    It doesn't matter in which order the functions are created. It only matters when the call to the function is done:

    def print_sum(a, b):
        print(sum_numbers(a, b))
    
    def sum_numbers(a, b):
        return a + b
    
    print_sum(1, 3)
    # 4
    

    that works because at the time print_sum is called both functions do exist. However if you call the function before defining sum_numbers it would fail because sum_numbers isn't defined yet:

    def print_sum(a, b):
        print(sum_numbers(a, b))
    
    print_sum(1, 3)
    
    def sum_numbers(a, b):
        return a + b
    

    throws:

    ---------------------------------------------------------------------------
    NameError                                 Traceback (most recent call last)
    <ipython-input-34-37c0e3733861> in <module>()
          2     print(sum_numbers(a, b))
          3 
    ----> 4 print_sum(1, 3)
          5 
          6 def sum_numbers(a, b):
    
    <ipython-input-34-37c0e3733861> in print_sum(a, b)
          1 def print_sum(a, b):
    ----> 2     print(sum_numbers(a, b))
          3 
          4 print_sum(1, 3)
          5 
    
    NameError: name 'sum_numbers' is not defined
    
    0 讨论(0)
  • 2021-02-03 18:18

    The only thing that Python cares about is that the name is defined when it is actually looked up. That's all.

    In your case, this is just fine, order doesn't really matter since you are just defining two functions. That is, you are just introducing two new names, no look-ups.

    Now, if you called one of these (in effect, performed a look-up) and switched the order around:

    def print_sum(a, b):
        print(sum_numbers(a, b))
    
    print_sum(2, 4)
    
    def sum_numbers(a, b):
        return a + b
    

    you'd be in trouble (NameError) because it will try to find a name (sum_numbers) that just doesn't exist yet.

    So in general, yes, the order does matter; there's no hoisting of names in Python like there is in other languages (e.g JavaScript).

    0 讨论(0)
提交回复
热议问题