python-3.x 实现我自己的代码来处理类上的“*”和/或“**”[重复]

k4ymrczo  于 2023-02-01  发布在  Python
关注(0)|答案(1)|浏览(95)
    • 此问题在此处已有答案**:

Change what the *splat and **splatty-splat operators do to my object(2个答案)
昨天关门了。
我知道***在Python中的作用(例如What do the * (star) and ** (double star) operators mean in a function call?)。但是如果我想创建我自己的"类似dict"的类,我想知道**是否Map到一些dunder方法,我可以将这些方法添加到我的类中,这样我的类就可以以类似的方式响应**。如果不是dunder,是否有其他方法可以创建一个完全类似于dict的类,它 * 不 * 支持**前缀运算符?
(对于*,在元组类上获得相同的加分,但这是我需要解决方案的dict版本!)

xzlaal3s

xzlaal3s1#

在Python中,***的意思是:

    • args(非关键字参数)
      • kwargs(关键字参数)

*args允许我们将可变数量的非关键字参数传递给函数。
例如,

def fn(*num):
    sum = 0
    
    for n in num:
        sum = sum + n

    print("Sum:",sum)

fn(1,2)
fn(4,5,6,7)
fn(1,2,3,5,6)

输出将是,

Sum: 3
Sum: 22
Sum: 17

**kwargs允许我们将可变长度的关键字参数传递给函数。

def intro(**data):
    print("\nData type of argument:",type(data))

    for key, value in data.items():
        print("{} is {}".format(key,value))

intro(Firstname="John", Lastname="Doe", Age=15, Phone=1234567890)
intro(Firstname="Albert", Lastname="Jackson", Email="ajackson@somemail.com", Country="UK", Age=45, Phone=88888888)

如果我们运行上面的程序,输出将是

Data type of argument: <class 'dict'>
Firstname is John
Lastname is Doe
Age is 15
Phone is 1234567890

Data type of argument: <class 'dict'>
Firstname is Albert
Lastname is Jackson
Email is ajackson@somemail.com
Country is UK
Age is 45
Phone is 88888888

相关问题