函数调用练习遇阻:第8种调用写法报错求助
问题排查与解决方案
Hey there! Let's break down what's going wrong here and fix it up for you 😊
首先看你的问题根源
你定义的function需要两个必填的位置参数(arg1和arg2),但你调用的时候只传了一个参数:'{} {}'.format(1, 2)会生成一个字符串"1 2",相当于只给函数传了一个值,Python自然会报错说参数数量不匹配(你应该能看到类似TypeError: function() missing 1 required positional argument: 'arg2'的提示)。
另外补充个小细节:你原来的函数定义缺了def关键字,这也是脚本运行会报错的原因之一哦。
修正你的调用代码
如果你的目标是用format()的方式给函数传参,应该把两个参数分别格式化后传递,而不是合并成一个字符串:
def function(arg1, arg2): print(f"I have {arg1} letters.") print(f"And I have {arg2} friends.") print("Wow, I need more friends...\n") # 修正后的调用:分别传递两个格式化后的参数 function('{}'.format(1), '{}'.format(2))
帮你凑够10种函数调用方式
既然你需要完成10种不同的调用方式,这里给你整理全10种,方便你参考:
- 基础位置参数调用:
function(5, 3)
- 基础位置参数调用:
- 关键字参数调用:
function(arg1=5, arg2=3)
- 关键字参数调用:
- 调换顺序的关键字参数:
function(arg2=3, arg1=5)
- 调换顺序的关键字参数:
- 列表解包调用:
args = [5, 3]; function(*args)
- 列表解包调用:
- 字典解包调用:
kwargs = {'arg1':5, 'arg2':3}; function(**kwargs)
- 字典解包调用:
- 混合位置+关键字参数:
function(5, arg2=3)
- 混合位置+关键字参数:
- 直接传字符串字面量:
function("five", "three")
- 直接传字符串字面量:
- 用
format()分别传参(就是你想尝试的第8种):function('{}'.format(1), '{}'.format(2))
- 用
- 用f-string传参:
function(f"{2*3}", f"{len(['Alice', 'Bob'])}")
- 用f-string传参:
- 传变量表达式:
a = 10; b = len("hello"); function(a, b)
- 传变量表达式:
慢慢来,编程基础薄弱没关系,多试几种调用方式,你很快就能掌握参数传递的逻辑啦!
内容的提问来源于stack exchange,提问作者nmaloof94
相关产品推荐
相关产品推荐

