簡體   English   中英

何時調用/引用函數以及何時執行?

[英]When is a function called/referred to and when is it being executed?

我對Python比較陌生,我對Python中的函數有一個(我猜)非常基本的問題。

我正在重寫基礎教程,以便真正了解更多結構,而不僅僅是使用它們。 我使用了教程中的一些基本代碼並嘗試了不同的簡單變體,並且我不完全理解結果以及何時引用函數,即何時調用其返回值,以及何時執行它。

x=6

def example():

    globx = x
    print(globx)
    globx+=5
    print(globx)

example()

這定義了函數,然后調用它來執行它,當它被執行時,它打印6然后按預期打印11。

現在:

x=6

def example():

    globx = x
    print(globx)
    globx+=5
    print(globx)

print(example())

我本來希望這打印“無”,因為print正在尋找函數的返回值來打印它,但是example()不返回值。 而是打印6,11和無。 所以我假設print(example())調用example()的返回值來打印它,但在執行函數之前。 (如果我弄錯了,請糾正我。)

即使我只是在定義函數后將返回值賦值給變量x = example(),它也會執行函數並打印6然后再打印11。

x=6

def example():

    globx = x
    print(globx)
    globx+=5
    print(globx)

x = example()

函數在寫出時是否總是被執行? (在def中的Ecxcept)有沒有辦法在沒有完全執行的情況下使用函數返回值? 例如,如果我有一個更復雜的代碼,並且在某些時候我想使用函數返回值但不希望它運行。

提前致謝!

您對函數返回的內容以及函數的作用感到困惑。

在您的情況下,您有一個具有兩個print()語句的函數。 這些語句與函數返回的值無關,並將在函數example()每次調用時打印相應的值。

函數的返回值是使用return關鍵字定義的,如果未定義,則為None 顯然,需要執行該函數以使其返回值。

你說的話似乎總體上是正確的,即使它看起來像你期望的那樣。

通常,您可以將其視為,當函數末尾有括號時,即example() ,執行該函數。

您的上一個問題有點模糊,但您可以通過在函數內部使用return關鍵字在某個時刻停止執行該函數。 這在例如執行一些資源密集型計算的函數中是有意義的,但偶爾也有機會采用快捷方式。

舉個例子

def calculate_thing(shortcut = False):
    if shortcut:
        return 3
    # Resource-intensive, time-consuming calculations go here
    return result_of_calculations

使用calculate_thing(shortcut=True)調用此函數將快速返回3 ,因為當我們點擊return 3時函數停止執行。 另一方面,通過calculate_thing(shortcut=False)calculate_thing()Falseshortcut的默認值calculate_thing()調用它將使函數運行一段時間,進行一些計算,然后返回分配給它的任何值。變量result_of_calculations

函數做某事,它實際上執行一個函數。 如果您希望該功能在其完成工作時向您顯示結果,則可以打印()事物。 如果您只是希望它完成其工作並保存結果以供日后使用,則將它們返回到調用該函數的變量。 你可以做到這兩點!

def just_print(input):
   print('Here is a function printing!', input)

just_print('cool!')
>> 'Here is a function printing!', 'cool!'


def return_value(input):
    return 'Hello ' + input

# We can store the return for future use
save_return_val = return_value('Ari')

print(save_return_val)
>> 'Hello Ari'

# Just print it
print(return_value('Ari'))
>> 'Hello Ari'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM