亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

函數可以是函數定義的參數嗎

函數可以是函數定義的參數嗎

慕后森 2022-11-01 15:12:59
當我們定義我們的自定義函數時,我們可以添加另一個函數作為我們的參數之一。我在這個問題上徘徊,并沒有得到這背后的概念。以下是一些讓我感到困惑的例子。def func1(x,y=len()):     pass我想知道當我們調用它們時這些函數參數會發生什么我很感激如果有人能指出用另一個函數作為參數來實現一個函數的所有方法。
查看完整描述

2 回答

?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

函數是像其他任何東西一樣的對象。一旦你定義了一個


>>> def foo(param):

...     return "Do all the " + param

... 

您可以將它傳遞給另一個函數并讓該函數進行調用


>>> def bar_1(func, param):

...     print(func(param))

... 

>>> bar_1(foo, "things")

Do all the things

您可以使用函數對象作為默認參數


>>> def bar_2(func=foo, param=""):

...     print(func(param))

... 

>>> bar_2()

Do all the 

您甚至可以調用函數并使用其結果來設置參數的默認值


>>> def bar_3(text=foo("things")):

...     print(text)

... 

>>> bar_3()

Do all the things

但是您不能調用函數來定義參數名稱本身。在這里,您似乎希望len()(返回 int 或在這種情況下失?。┑慕Y果是參數的名稱,但這違反了 python 的語法規則。


>>> def func1(x,y,len()):

  File "<stdin>", line 1

    def func1(x,y,len()):

                     ^

SyntaxError: invalid syntax


查看完整回答
反對 回復 2022-11-01
?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊

您的代碼示例都有語法錯誤,因此不清楚您到底在追求什么。


但是,是的,您可以將一個函數作為參數傳遞給另一個函數。常見的示例是回調函數或您可能希望在另一個過程中應用的函數。


這是一個例子:


# print_os takes an integer and prints that many o's

def print_os(n):

    print('o' * n)



# here, f is expected to be a function, any function that takes an integer

def for_multiples_of_three(xs, f):

    for x in xs:

        if x % 3 == 0:

            f(x)



for_multiples_of_three([2, 6, 1, 9, 4, 5, 3], print_os)

結果:


oooooo

ooooooooo

ooo

或這個:


def first_letter(s):

    return s[0] if s else ''



def for_each_word(s, f):

    return [f(x) for x in s.split()]



print(for_each_word('Not a very useful function', first_letter))

結果:


['N', 'a', 'v', 'u', 'f']

需要注意的重要一點是,函數只是您可以在 Python 中執行的另一件事。類似于將數字、字符串或其他對象分配給變量以便以后能夠使用它,您可以將函數分配給變量并稍后調用它。


您的示例中的錯誤是您添加了(),這意味著 Python 嘗試調用該函數并從中獲取結果 - 然后將結果傳遞給下一個函數。那不是用函數調用函數,而是用另一個函數的結果調用函數:


def three():

    return 3


def print_sum(x, y):

    print(x+y)


print_sum(2, three())

結果:


5


查看完整回答
反對 回復 2022-11-01
  • 2 回答
  • 0 關注
  • 176 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號