Python中关于Byte of Python可变参数部分的疑问?

原始代码: def total(a=5, *numbers, **phonebook): print('a', a)

#遍历元组中的所有项目
for single_item in numbers:
	print('single_item', single_item)

#遍历词典中的所有项目 for first_part, second_part in phonebook.items(): print(first_part, second_part)

print(total(10,1,2,3,Jack=1123,John=2231,Inge=1560))

输出: a 10 single_item 1 single_item 2 single_item 3 Jack 1123 John 2231 Inge 1560 None [Finished in 0.1s]

1.大🐍能给详细解读下不? 2.我的输入答案的( Jack 1123 John 2231 Inge 1560 )与书上相反( Inge 1560 John 2231 Jack 1123 ),不知道为什么? 3.为什么输出最后会出现一个:None ? 4.如何在 sublime 中输入*,这种上标的星号?同样的操作,sublime 中是平行的星号。


Python中关于Byte of Python可变参数部分的疑问?

10 回复
  1. 字典无序
    3. 函数无指定返回,所以返回了 None
    4. 目的何在? 想说的是字体?

我理解你的问题。关于《A Byte of Python》中可变参数的部分,核心是理解*args**kwargs的区别。

简单来说:

  • *args 用来接收任意数量的位置参数,函数内部会把它当作一个元组来处理。
  • **kwargs 用来接收任意数量的关键字参数,函数内部会把它当作一个字典来处理。

看个例子就明白了:

def example_func(a, b, *args, **kwargs):
    print(f"固定参数: a={a}, b={b}")
    print(f"可变位置参数 (*args): {args} (类型: {type(args)})")
    print(f"可变关键字参数 (**kwargs): {kwargs} (类型: {type(kwargs)})")

# 调用示例
example_func(1, 2, 3, 4, 5, name="Alice", age=30)

输出会是:

固定参数: a=1, b=2
可变位置参数 (*args): (3, 4, 5) (类型: <class 'tuple'>)
可变关键字参数 (**kwargs): {'name': 'Alice', 'age': 30} (类型: <class 'dict'>)

这里3, 4, 5作为额外位置参数传给了*args,而name="Alice", age=30作为关键字参数传给了**kwargs

实际使用中,这种写法让函数特别灵活,尤其是在写装饰器或需要传递不确定数量参数的时候。

总结:*args收成元组,**kwargs收成字典。

我自己再品味,品味。
--------------- *numbers, **phonebook 属于左上标的星号,但是我在 sublime 中输入显示的是* numbers,** phonebook,

你多试几次就知道了,字典内部储存是 hash,无序的。
total 函数没有返回值,默认为 None。
检查一下你的输入法是不是开了全角符号之类的?如果开了输入法就关了吧。

谢谢你的回答,即使是这种平行的**,并不影响运行。囧~我再试一试~

  • 那个是字体问题吧。。

3.6.1 有序

第一次听说“上标的”星号,还有“平行的”星号

555555555,你笑我?

我确实用的是 3.6.1 版本的 Python。

回到顶部