我如何使用一个函数作为另一个函数的参数,

how can I use a function as an argument to another function,

我正在尝试编写一个简单的代码,根据用户输入的星期几显示 3 组问候语。我是初学者,正在学习函数,所以请根据函数用法回答。

我尝试为问候指令设置一个函数,另一个函数作为用户的输入,作为参数传递给第一个函数。请告诉我代码有什么问题。

def action(user_response):
  
  greeting = "hello madam"
  greeting2 = " Good afternoon madam"
  greeting3 = "Have a good weekend"

  while user_response == "tuesday" or "monday":
   return greeting 
   if user_response == "wednesday" or "thursday": 
     return greeting2

  return greeting3
     



def user_response():
  user_input = input("what day of the week is it: ").lower() 
  print(f"{user_input}")
  return user_response()

def main():
  action(user_response)
  user_response()

main()

您可能希望您的函数 return 一个字符串,您可以将其作为参数传递给另一个函数。或者传递对函数的引用,以便在目标

中调用它

比如像这样传递响应

def action(response):
print(response)

def user_response():
  user_input = input("what day of the week is it: ").lower() 
  return user_input

def main():    
  response = user_response()
  action(response)

main()

或者像这样通过对函数的引用传递

def action(fn):
    response = fn()
    print(response)
    
def user_response():
  user_input = input("what day of the week is it: ").lower() 
  return user_input

def main():    
  action(user_response)

main()

你的代码有一些错误,让我们一步步来:

  • 条件user_response == "tuesday" or "monday"将returnTrue 因为:如果 user_response 不等于星期二(不是,因为你正在比较一个函数和一个字符串),你会得到“星期一”,因为 or 条件,False or something -> something.所以你得到 if "monday",计算结果为 True,因为 not-empty 字符串在 python.
  • 中计算结果为 True
  • 如果你想传递一个函数作为参数,你需要在被调用函数中调用那个函数。您没有 return 从 user_response 获取任何值,因此您正在检索 None(但您没有,因为您没有捕获结果)。你应该从 user_response
  • return user_input
  • 如果你 return 一个值,你必须捕获并打印它,否则,该函数将退出,什么也不做。我已经修改了您的代码,因此 action 打印问候语,仅在周末打印后退出。

执行顺序为:

  • 调用 action 传递 user_response 作为参数
  • action 中调用 user_response 并检索值
  • Return 基于从 user_response
  • 检索到的值的问候语
def action(user_func):
    greeting = "hello madam"
    greeting2 = "Good afternoon madam"
    greeting3 = "Have a good weekend"
    user_answer = user_func()
    while user_answer not in ('friday', 'saturday', 'sunday'):
        if user_answer in ("monday", "tuesday"):
            print(greeting)
        else:
            print(greeting2)
        user_answer = user_func()
    print(greeting3)
    return

def user_response():
  user_input = input("what day of the week is it: ").lower()
  return user_input

def main():
  action(user_response)

main()