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 或在这种情况下失败)的结果是参数的名称,但这违反了 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
添加回答
举报