wangwang123 发表于 2021-11-9 22:11:29

怎么理解内置函数的*args和 **kwargs

    def pop(self, *args, **kwargs): # real signature unknown
      """
      Remove and return item at index (default last).
      
      Raises IndexError if list is empty or index is out of range.
      """
      pass

这是我随便找的一个函数,我清楚pop的语法,既然在解释里面有*args(个数未知的位置形参), 和**kwargs(个数未知关键字形参),是不是就可以理解:可以给pop函数传入两个以上的实参。我也试了一下,系统并没有给语法错误,但是运行会有bug.如下

TypeError: pop expected at most 1 argument, got 2

那我以后怎么知道一个函数,能传入几个参数呢?谢谢,现在不知道怎么理解*args了。

myqf123 发表于 2021-11-9 23:54:25

你这是某一个类里边的函数,正常这样写是可以传任意个参数的,但要看类__init__()这里接受几个参数,超出这个类的参数,你调用类的pop方法给任意个参数是不当的!

逃兵 发表于 2021-11-10 08:27:33

*args以元组方式储存传入的参数
**kwargs以字典方式储存传入的参数
def pop(*args, **kwargs):
    print(args)
    print(kwargs)

pop(1,2,3,4,a=5,b=6,c=7)

wangwang123 发表于 2021-11-10 12:31:08

逃兵 发表于 2021-11-10 08:27
*args以元组方式储存传入的参数
**kwargs以字典方式储存传入的参数

这个我能理解 那函数解释里面有*arg 为什么pop函数只能输入一个值,不能pop(1,2),我的疑问在这。

逃兵 发表于 2021-11-10 13:16:52

wangwang123 发表于 2021-11-10 12:31
这个我能理解 那函数解释里面有*arg 为什么pop函数只能输入一个值,不能pop(1,2),我的疑问在这。

把你运行报错的函数发一下

wangwang123 发表于 2021-11-10 15:20:51

逃兵 发表于 2021-11-10 13:16
把你运行报错的函数发一下

lst =

print(lst.pop(1,2))

运行错误:会说只能输入一个arg 所以就不知道怎么看这个函数定义了。

逃兵 发表于 2021-11-10 15:32:44

wangwang123 发表于 2021-11-10 15:20


class list(object)
|list(iterable=(), /)
|
|Built-in mutable sequence.
|
|If no argument is given, the constructor creates a new empty list.
|The argument must be an iterable if specified.
|
|Methods defined here:
|
|__add__(self, value, /)
|      Return self+value.
|
|__contains__(self, key, /)
|      Return key in self.
|
|__delitem__(self, key, /)
|      Delete self.
|
|__eq__(self, value, /)
|      Return self==value.
|
|__ge__(self, value, /)
|      Return self>=value.
|
|__getattribute__(self, name, /)
|      Return getattr(self, name).
|
|__getitem__(...)
|      x.__getitem__(y) <==> x
|
|__gt__(self, value, /)
|      Return self>value.
|
|__iadd__(self, value, /)
|      Implement self+=value.
|
|__imul__(self, value, /)
|      Implement self*=value.
|
|__init__(self, /, *args, **kwargs)
|      Initialize self.See help(type(self)) for accurate signature.
|
|__iter__(self, /)
|      Implement iter(self).
|
|__le__(self, value, /)
|      Return self<=value.
|
|__len__(self, /)
|      Return len(self).
|
|__lt__(self, value, /)
|      Return self<value.
|
|__mul__(self, value, /)
|      Return self*value.
|
|__ne__(self, value, /)
|      Return self!=value.
|
|__repr__(self, /)
|      Return repr(self).
|
|__reversed__(self, /)
|      Return a reverse iterator over the list.
|
|__rmul__(self, value, /)
|      Return value*self.
|
|__setitem__(self, key, value, /)
|      Set self to value.
|
|__sizeof__(self, /)
|      Return the size of the list in memory, in bytes.
|
|append(self, object, /)
|      Append object to the end of the list.
|
|clear(self, /)
|      Remove all items from list.
|
|copy(self, /)
|      Return a shallow copy of the list.
|
|count(self, value, /)
|      Return number of occurrences of value.
|
|extend(self, iterable, /)
|      Extend list by appending elements from the iterable.
|
|index(self, value, start=0, stop=9223372036854775807, /)
|      Return first index of value.
|      
|      Raises ValueError if the value is not present.
|
|insert(self, index, object, /)
|      Insert object before index.
|
|pop(self, index=-1, /)
|      Remove and return item at index (default last).
|      
|      Raises IndexError if list is empty or index is out of range.
|
|remove(self, value, /)
|      Remove first occurrence of value.
|      
|      Raises ValueError if the value is not present.
|
|reverse(self, /)
|      Reverse *IN PLACE*.
|
|sort(self, /, *, key=None, reverse=False)
|      Stable sort *IN PLACE*.
|
|----------------------------------------------------------------------
|Static methods defined here:
|
|__new__(*args, **kwargs) from builtins.type
|      Create and return a new object.See help(type) for accurate signature.
|
|----------------------------------------------------------------------
|Data and other attributes defined here:
|
|__hash__ = None

原函数list.pop默认一个参数,index=-1
你是要修改掉list类吗

wangwang123 发表于 2021-11-10 19:24:02

逃兵 发表于 2021-11-10 15:32
原函数list.pop默认一个参数,index=-1
你是要修改掉list类吗

哈哈 那肯定不是的 我还没学到类 我今天才看到类这块,所以知道自己问题出在哪了~谢谢{:5_98:}
页: [1]
查看完整版本: 怎么理解内置函数的*args和 **kwargs