def test_args(*args,**kwargs): print(args,type(args)) print(kwargs,type(kwargs)) print('这是元祖取值',args[0]) print('这是字典取值',kwargs['name']) # for k,v in kwargs.items(): # print('这是键',k,'这是value',v) # print(list(kwargs.keys())[1]) for i in args: print('这是元祖',i) print('我要取值',i[2]) test_args(1,2,3,4,5,6, name = 'dewei', age = 33, top= 174) 这里取值为啥会报错print('我要取值',i[2])
时间: 2023-11-28 20:49:34 浏览: 29
在这个函数中,`*args` 表示传递的位置参数会被封装成一个元组,`**kwargs` 表示传递的关键字参数会被封装成一个字典。因为 `args` 是一个元组,所以 `i` 代表的是元组中的一个元素,而不是一个元组本身。如果要访问元组的第三个元素,应该使用 `i[2]` 而不是 `args[2]`。同样,如果要访问字典中的某个键值对,应该使用 `kwargs['name']` 而不是 `kwargs.name`。所以,你可以尝试这样修改代码:
```
def test_args(*args, **kwargs):
print(args, type(args))
print(kwargs, type(kwargs))
print('这是元祖取值', args[0])
print('这是字典取值', kwargs['name'])
# for k,v in kwargs.items():
# print('这是键',k,'这是value',v)
# print(list(kwargs.keys())[1])
for i in args:
print('这是元祖', i)
print('我要取值', i[2])
test_args(1, 2, 3, 4, 5, 6, name='dewei', age=33, top=174)
```
相关问题
def create(emp_type, *args, **kwargs):
函数`create`是一个通用的工厂函数,它可以根据传入的参数`emp_type`来创建不同类型的对象。这个函数使用了可变参数`*args`和关键字参数`**kwargs`来接收任意数量的位置参数和关键字参数。
具体实现的方式可以是通过判断`emp_type`的值,然后根据不同的值来创建对应类型的对象。这里的`emp_type`可以是一个字符串或者其他可以用于区分不同类型的标识符。
下面是一个示例实现:
```python
def create(emp_type, *args, **kwargs):
if emp_type == "manager":
return Manager(*args, **kwargs)
elif emp_type == "engineer":
return Engineer(*args, **kwargs)
elif emp_type == "intern":
return Intern(*args, **kwargs)
else:
raise ValueError("Invalid employee type")
# 示例类
class Manager:
def __init__(self, name):
self.name = name
class Engineer:
def __init__(self, name):
self.name = name
class Intern:
def __init__(self, name):
self.name = name
```
在上面的示例中,根据传入的`emp_type`参数,我们可以创建不同类型的员工对象。例如:
```python
manager = create("manager", "John")
engineer = create("engineer", "Alice")
intern = create("intern", "Bob")
```
这样就可以根据需要动态地创建不同类型的对象了。
def __init__(self,*args,**kwargs): super().__init__(*args,**kwargs)
这是一个Python中的类构造函数的定义。它使用了特殊的`__init__`方法,这个方法会在创建一个新的对象时被调用。在这个例子中,`*args`和`**kwargs`是用来接收任意数量的位置参数和关键字参数。
`super().__init__(*args,**kwargs)`是用来调用父类的构造函数,并将相应的参数传递给父类。这样做是为了确保子类对象在初始化时会继承父类的属性和方法。