鱼C论坛

 找回密码
 立即注册
查看: 3320|回复: 10

[已解决]python:收集参数问题

[复制链接]
发表于 2018-10-23 16:51:47 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 hhzczy 于 2018-10-23 17:31 编辑

关于收集参数,我写了如下代码运行后有些疑问:
与“位置参数”和“收集参数”放置的位置相关。

——————————————
情况一:(正常无问题)

  1. def demo_tup(* demo_tup, extra='8):
  2.         print('其它参数是:', extra)
  3.         print('收集参数是:', demo_tup)
  4.    
  5. demo_tup(1, 2, 3, 4, 5, extra='A')
复制代码


输出结果:
其它参数是: A
收集参数是: (1, 2, 3, 4, 5)

——————————————
情况二:报错(仅仅把红色调整了一下位置)。
问题1:是否位置参数一定要定义到收集参数之后呢???

def demo_tup(extra='8', * demo_tup):
        print('其它参数是:', extra)
        print('收集参数是:', demo_tup)
   
demo_tup(extra='A', 1, 2, 3, 4, 5)

输出结果:
  File "C:\Users\hh\Desktop\test1.py", line 5
    demo_tup(extra='A', 1, 2, 3, 4, 5)
                       ^
SyntaxError: positional argument follows keyword argument
——————————————
情况三
问题2:为什么报错?

def demo_tup(extra='8', * demo_tup):
        print('其它参数是:', extra)
        print('收集参数是:', demo_tup)
   
demo_tup(1, 2, 3, 4, 5, extra='A')


报错:
Traceback (most recent call last):
  File "C:\Users\hh\Desktop\test.py", line 5, in <module>
    demo_tup(1, 2, 3, 4, 5, extra='A')
TypeError: demo_tup() got multiple values for argument 'extra'
——————————————
情况四:

def demo_tup(* demo_tup, extra):
        print('其它参数是:', extra)
        print('收集参数是:', demo_tup)

demo_tup(1, 2, 3, 4, 5, 'A')

报错:
Traceback (most recent call last):
  File "C:\Users\hh\Desktop\test1.py", line 5, in <module>
    demo_tup(1, 2, 3, 4, 5, 'A')
TypeError: demo_tup() missing 1 required keyword-only argument: 'extra'
——————————————

情况五:
def demo_tup(extra, * demo_tup):
        print('其它参数是:', extra)
        print('收集参数是:', demo_tup)
   
demo_tup('A', 1, 2, 3, 4, 5)

返回结果:
其它参数是: A
收集参数是: (1, 2, 3, 4, 5)

——————————————
四、五输出结果都无问题:
问题3:在使用自定义函数的时候,不给参数变量名为什么就正常了呢?为什么会自动把第一个参数或第四个参数给变量extra??
最佳答案
2018-10-23 17:07:04
情况2,关键字要放后边
情况3,位置不对,1-5要送给extra
情况4,好像和1没啥区别,就是默认值不一样

问题2,你设置默认参数,要放后边

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-10-23 17:07:04 | 显示全部楼层    本楼为最佳答案   
情况2,关键字要放后边
情况3,位置不对,1-5要送给extra
情况4,好像和1没啥区别,就是默认值不一样

问题2,你设置默认参数,要放后边

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-23 17:12:15 | 显示全部楼层
还有你情况4的结果不对

其它参数是: A
收集参数是: (1, 2, 3, 4, 5, 'A')
这里extra是靠默认参数得到的'A',输入参数全都被收集走了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-23 17:13:07 | 显示全部楼层
塔利班 发表于 2018-10-23 17:07
情况2,关键字要放后边
情况3,位置不对,1-5要送给extra
情况4,好像和1没啥区别,就是默认值不一样


情况四我贴错了:

def demo_tup(* demo_tup, extra):
        print('其它参数是:', extra)
        print('收集参数是:', demo_tup)

demo_tup(1, 2, 3, 4, 5, 'A')

报错:
Traceback (most recent call last):
  File "C:\Users\hh\Desktop\test1.py", line 5, in <module>
    demo_tup(1, 2, 3, 4, 5, 'A')
TypeError: demo_tup() missing 1 required keyword-only argument: 'extra'
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-23 17:14:52 | 显示全部楼层
嗯,这里就是需要你区分哪个是要传给extra了,得输入加=
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-23 17:15:36 | 显示全部楼层
塔利班 发表于 2018-10-23 17:12
还有你情况4的结果不对

其它参数是: A


暴风截图201810231069431906.jpg

小甲鱼的这个错误也是这个原因吧?——被收集走了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-23 17:19:14 | 显示全部楼层
hhzczy 发表于 2018-10-23 17:15
小甲鱼的这个错误也是这个原因吧?——被收集走了

嗯,对的,,你这头像总给我压力,东哥赛亚人版本
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-23 17:39:54 | 显示全部楼层
塔利班 发表于 2018-10-23 17:07
情况2,关键字要放后边
情况3,位置不对,1-5要送给extra
情况4,好像和1没啥区别,就是默认值不一样

情况三
def demo_tup(extra='8', * demo_tup):
        print('其它参数是:', extra)
        print('收集参数是:', demo_tup)
   
demo_tup(1, 2, 3, 4, 5, extra='A')
————
报错:
Traceback (most recent call last):
  File "C:\Users\hh\Desktop\test.py", line 5, in <module>
    demo_tup(1, 2, 3, 4, 5, extra='A')
TypeError: demo_tup() got multiple values for argument 'extra'

++++++++++++++++++++++++
您回答:“情况3,位置不对,1-5要送给extra”

能在多解释一点吗?
我已经写了 extra='A',python不能自动把A给extra,其余的1~5给demo_tup吗?

TypeError: demo_tup() got multiple values for argument 'extra'
意思是demo_tup得到了多个 'extra'的值?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-23 17:45:48 | 显示全部楼层
这个是我形容错了,嗯,extra就是只能得到一个值,但是被接收了多个值
也跟你的定义位置有关系,把extra放前面了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-23 17:58:52 | 显示全部楼层
本帖最后由 hhzczy 于 2018-10-23 18:07 编辑
塔利班 发表于 2018-10-23 17:45
这个是我形容错了,嗯,extra就是只能得到一个值,但是被接收了多个值
也跟你的定义位置有关系,把extra放 ...


非常感谢你的耐心解答,最后一个问题。我把情况三修改了一下怎么还报错:


def demo_tup(extra='8', * demo_tup):
        print('其它参数是:', extra)
        print('收集参数是:', demo_tup)
   
demo_tup(extra='A', 1, 2, 3, 4, 5)                #这里写 demo_tup(1, 2, 3, 4, 5, extra='A') 也报错

报错:
  File "C:\Users\hh\Desktop\test1.py", line 5
    demo_tup(extra='A', 1, 2, 3, 4, 5)
                       ^
SyntaxError: positional argument follows keyword argument


为什么这个extra='A'放前头放后边都不行?!!
如果不改动def 也保留extra='A', 如何改写使其能正常运行?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-23 18:18:50 | 显示全部楼层
所以说还是老实给他放后边,输入也放后边,而且加关键字
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-22 18:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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