鱼C论坛

 找回密码
 立即注册
查看: 1706|回复: 7

[已解决]怎么理解内置函数的*args和 **kwargs

[复制链接]
发表于 2021-11-9 22:11:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1.     def pop(self, *args, **kwargs): # real signature unknown
  2.         """
  3.         Remove and return item at index (default last).
  4.         
  5.         Raises IndexError if list is empty or index is out of range.
  6.         """
  7.         pass
复制代码


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

TypeError: pop expected at most 1 argument, got 2

那我以后怎么知道一个函数,能传入几个参数呢?谢谢,现在不知道怎么理解*args了。
最佳答案
2021-11-10 15:32:44
  1. class list(object)
  2. |  list(iterable=(), /)
  3. |  
  4. |  Built-in mutable sequence.
  5. |  
  6. |  If no argument is given, the constructor creates a new empty list.
  7. |  The argument must be an iterable if specified.
  8. |  
  9. |  Methods defined here:
  10. |  
  11. |  __add__(self, value, /)
  12. |      Return self+value.
  13. |  
  14. |  __contains__(self, key, /)
  15. |      Return key in self.
  16. |  
  17. |  __delitem__(self, key, /)
  18. |      Delete self[key].
  19. |  
  20. |  __eq__(self, value, /)
  21. |      Return self==value.
  22. |  
  23. |  __ge__(self, value, /)
  24. |      Return self>=value.
  25. |  
  26. |  __getattribute__(self, name, /)
  27. |      Return getattr(self, name).
  28. |  
  29. |  __getitem__(...)
  30. |      x.__getitem__(y) <==> x[y]
  31. |  
  32. |  __gt__(self, value, /)
  33. |      Return self>value.
  34. |  
  35. |  __iadd__(self, value, /)
  36. |      Implement self+=value.
  37. |  
  38. |  __imul__(self, value, /)
  39. |      Implement self*=value.
  40. |  
  41. |  __init__(self, /, *args, **kwargs)
  42. |      Initialize self.  See help(type(self)) for accurate signature.
  43. |  
  44. |  __iter__(self, /)
  45. |      Implement iter(self).
  46. |  
  47. |  __le__(self, value, /)
  48. |      Return self<=value.
  49. |  
  50. |  __len__(self, /)
  51. |      Return len(self).
  52. |  
  53. |  __lt__(self, value, /)
  54. |      Return self<value.
  55. |  
  56. |  __mul__(self, value, /)
  57. |      Return self*value.
  58. |  
  59. |  __ne__(self, value, /)
  60. |      Return self!=value.
  61. |  
  62. |  __repr__(self, /)
  63. |      Return repr(self).
  64. |  
  65. |  __reversed__(self, /)
  66. |      Return a reverse iterator over the list.
  67. |  
  68. |  __rmul__(self, value, /)
  69. |      Return value*self.
  70. |  
  71. |  __setitem__(self, key, value, /)
  72. |      Set self[key] to value.
  73. |  
  74. |  __sizeof__(self, /)
  75. |      Return the size of the list in memory, in bytes.
  76. |  
  77. |  append(self, object, /)
  78. |      Append object to the end of the list.
  79. |  
  80. |  clear(self, /)
  81. |      Remove all items from list.
  82. |  
  83. |  copy(self, /)
  84. |      Return a shallow copy of the list.
  85. |  
  86. |  count(self, value, /)
  87. |      Return number of occurrences of value.
  88. |  
  89. |  extend(self, iterable, /)
  90. |      Extend list by appending elements from the iterable.
  91. |  
  92. |  index(self, value, start=0, stop=9223372036854775807, /)
  93. |      Return first index of value.
  94. |      
  95. |      Raises ValueError if the value is not present.
  96. |  
  97. |  insert(self, index, object, /)
  98. |      Insert object before index.
  99. |  
  100. |  pop(self, index=-1, /)
  101. |      Remove and return item at index (default last).
  102. |      
  103. |      Raises IndexError if list is empty or index is out of range.
  104. |  
  105. |  remove(self, value, /)
  106. |      Remove first occurrence of value.
  107. |      
  108. |      Raises ValueError if the value is not present.
  109. |  
  110. |  reverse(self, /)
  111. |      Reverse *IN PLACE*.
  112. |  
  113. |  sort(self, /, *, key=None, reverse=False)
  114. |      Stable sort *IN PLACE*.
  115. |  
  116. |  ----------------------------------------------------------------------
  117. |  Static methods defined here:
  118. |  
  119. |  __new__(*args, **kwargs) from builtins.type
  120. |      Create and return a new object.  See help(type) for accurate signature.
  121. |  
  122. |  ----------------------------------------------------------------------
  123. |  Data and other attributes defined here:
  124. |  
  125. |  __hash__ = None
复制代码


原函数list.pop默认一个参数,index=-1
你是要修改掉list类吗
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-11-9 23:54:25 | 显示全部楼层
你这是某一个类里边的函数,正常这样写是可以传任意个参数的,但要看类__init__()这里接受几个参数,超出这个类的参数,你调用类的pop方法给任意个参数是不当的!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-11-10 08:27:33 | 显示全部楼层
*args以元组方式储存传入的参数
**kwargs以字典方式储存传入的参数
  1. def pop(*args, **kwargs):
  2.     print(args)
  3.     print(kwargs)

  4. pop(1,2,3,4,a=5,b=6,c=7)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-10 12:31:08 | 显示全部楼层
逃兵 发表于 2021-11-10 08:27
*args以元组方式储存传入的参数
**kwargs以字典方式储存传入的参数

这个我能理解 那函数解释里面有*arg 为什么pop函数只能输入一个值,不能pop(1,2),我的疑问在这。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

把你运行报错的函数发一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-10 15:20:51 | 显示全部楼层
逃兵 发表于 2021-11-10 13:16
把你运行报错的函数发一下
  1. lst = [1,2,3,4,5,6]

  2. print(lst.pop(1,2))

  3. 运行错误:会说只能输入一个arg 所以就不知道怎么看这个函数定义了。
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-10 15:32:44 | 显示全部楼层    本楼为最佳答案   
  1. class list(object)
  2. |  list(iterable=(), /)
  3. |  
  4. |  Built-in mutable sequence.
  5. |  
  6. |  If no argument is given, the constructor creates a new empty list.
  7. |  The argument must be an iterable if specified.
  8. |  
  9. |  Methods defined here:
  10. |  
  11. |  __add__(self, value, /)
  12. |      Return self+value.
  13. |  
  14. |  __contains__(self, key, /)
  15. |      Return key in self.
  16. |  
  17. |  __delitem__(self, key, /)
  18. |      Delete self[key].
  19. |  
  20. |  __eq__(self, value, /)
  21. |      Return self==value.
  22. |  
  23. |  __ge__(self, value, /)
  24. |      Return self>=value.
  25. |  
  26. |  __getattribute__(self, name, /)
  27. |      Return getattr(self, name).
  28. |  
  29. |  __getitem__(...)
  30. |      x.__getitem__(y) <==> x[y]
  31. |  
  32. |  __gt__(self, value, /)
  33. |      Return self>value.
  34. |  
  35. |  __iadd__(self, value, /)
  36. |      Implement self+=value.
  37. |  
  38. |  __imul__(self, value, /)
  39. |      Implement self*=value.
  40. |  
  41. |  __init__(self, /, *args, **kwargs)
  42. |      Initialize self.  See help(type(self)) for accurate signature.
  43. |  
  44. |  __iter__(self, /)
  45. |      Implement iter(self).
  46. |  
  47. |  __le__(self, value, /)
  48. |      Return self<=value.
  49. |  
  50. |  __len__(self, /)
  51. |      Return len(self).
  52. |  
  53. |  __lt__(self, value, /)
  54. |      Return self<value.
  55. |  
  56. |  __mul__(self, value, /)
  57. |      Return self*value.
  58. |  
  59. |  __ne__(self, value, /)
  60. |      Return self!=value.
  61. |  
  62. |  __repr__(self, /)
  63. |      Return repr(self).
  64. |  
  65. |  __reversed__(self, /)
  66. |      Return a reverse iterator over the list.
  67. |  
  68. |  __rmul__(self, value, /)
  69. |      Return value*self.
  70. |  
  71. |  __setitem__(self, key, value, /)
  72. |      Set self[key] to value.
  73. |  
  74. |  __sizeof__(self, /)
  75. |      Return the size of the list in memory, in bytes.
  76. |  
  77. |  append(self, object, /)
  78. |      Append object to the end of the list.
  79. |  
  80. |  clear(self, /)
  81. |      Remove all items from list.
  82. |  
  83. |  copy(self, /)
  84. |      Return a shallow copy of the list.
  85. |  
  86. |  count(self, value, /)
  87. |      Return number of occurrences of value.
  88. |  
  89. |  extend(self, iterable, /)
  90. |      Extend list by appending elements from the iterable.
  91. |  
  92. |  index(self, value, start=0, stop=9223372036854775807, /)
  93. |      Return first index of value.
  94. |      
  95. |      Raises ValueError if the value is not present.
  96. |  
  97. |  insert(self, index, object, /)
  98. |      Insert object before index.
  99. |  
  100. |  pop(self, index=-1, /)
  101. |      Remove and return item at index (default last).
  102. |      
  103. |      Raises IndexError if list is empty or index is out of range.
  104. |  
  105. |  remove(self, value, /)
  106. |      Remove first occurrence of value.
  107. |      
  108. |      Raises ValueError if the value is not present.
  109. |  
  110. |  reverse(self, /)
  111. |      Reverse *IN PLACE*.
  112. |  
  113. |  sort(self, /, *, key=None, reverse=False)
  114. |      Stable sort *IN PLACE*.
  115. |  
  116. |  ----------------------------------------------------------------------
  117. |  Static methods defined here:
  118. |  
  119. |  __new__(*args, **kwargs) from builtins.type
  120. |      Create and return a new object.  See help(type) for accurate signature.
  121. |  
  122. |  ----------------------------------------------------------------------
  123. |  Data and other attributes defined here:
  124. |  
  125. |  __hash__ = None
复制代码


原函数list.pop默认一个参数,index=-1
你是要修改掉list类吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-10 19:24:02 | 显示全部楼层
逃兵 发表于 2021-11-10 15:32
原函数list.pop默认一个参数,index=-1
你是要修改掉list类吗

哈哈 那肯定不是的 我还没学到类 我今天才看到类这块,所以知道自己问题出在哪了~谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-7 11:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表