2 回答
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
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
添加回答
舉報
