Python函数定向调用问题:输入Y/N触发对应函数时出现多函数执行异常及位置参数缺失
解决函数定向调用的问题
嘿,我来帮你梳理下代码里的问题,你遇到的两个核心问题(输入Y时同时执行两个函数、位置参数错误)都是因为函数调用逻辑和参数传递的细节没处理对,咱们一步步来修正:
问题1:为什么输入Y时两个函数都会执行?
你在定义完public_company和private_company函数后,直接调用了它们:
public_company() # function 2 # ... private_company()
程序运行到这两行时,不管前面的用户输入是什么,都会直接执行这两个函数,所以才会出现不管选Y还是N,两个Success都打印的情况。解决办法就是删掉这两行直接调用,只在company_type函数内部根据用户输入来触发对应函数。
问题2:位置参数缺失/传递错误
你的company_type函数定义要求接收三个参数:
- 第一个是提示用户的文本(
question) - 第二个是要执行的公开公司函数对象(
public_company) - 第三个是要执行的私有公司函数对象(
private_company)
但你调用时传的是:
company_type("public_company", "private_company", 1) # function 1
这里传的是字符串和数字,根本不是函数对象,顺序也完全不对。正确的做法是先定义好目标函数,再把函数本身(不带括号,带括号就是直接调用了)传给company_type。
额外的逻辑优化:函数触发方式
在company_type里,你原本写的是return (public_company),这只是返回函数对象,并没有执行它。需要改成调用函数(加括号),比如public_company(),这样才会触发函数执行。
修正后的完整代码
# 先定义两个目标函数,确保在调用前已存在 def public_company(): print("Success 1") def private_company(): print("Success 2") def company_type(question, public_func, private_func): print("Is the target company public on NYSE or NASDAQ?") prompt = f'{question} (y/n)' # 处理输入的大小写和空格,让交互更健壮 ans = input(prompt).strip().lower() if ans == 'y': public_func() # 执行公开公司对应的函数 elif ans == 'n': print("Please enter financial infomation manually.") private_func() # 执行私有公司对应的函数 else: print("Invalid input, please enter y or n.") # 处理无效输入 # 正确调用company_type:传入提示文本和两个函数对象 company_type("Is this a public company?", public_company, private_company)
修正点总结
- 移除了目标函数的直接调用,只在逻辑分支中触发
- 传递正确的函数对象给
company_type,而非字符串/数字 - 在分支中调用函数(加括号)以触发执行
- 增加了输入健壮性处理,支持大小写输入和无效输入提示
内容的提问来源于stack exchange,提问作者Trevor Seibert
相关产品推荐
相关产品推荐

