m0_64912051 2021-12-06 15:15 采纳率: 100%
浏览 358
已结题

函数传参的时候,出现positional argument follows keyword argument报错

问题遇到的现象和发生背景

请问为什么两种计算方式中,工时计算可以将time = None 放入函数调用的括号中,而当我把人数计算中的number = None放入调用函数的括号中时,出现报错

问题相关代码,请勿粘贴截图
import math

def estimated(size=1,number=None,time=None):
    if (number == None) and (time != None):
        number = math.ceil(size * 80 / time)
        print('项目大小为%.1f个标准项目,如果需要在%.1f个工时完成,则需要人力数量为:%d人' %(size,time,number))  
    elif (number != None) and (time == None):
        time = size * 80 / number
        print('项目大小为%.1f个标准项目,使用%d个人力完成,则需要工时数量为:%.1f个' %(size,number,time)) 
 
choice = int(input('请选择您想计算的数据类型,1为工时计算,2为人数计算'))
if choice == 1:
    number = int(input('请输入工作人数'))
    size = int(input('请输入任务大小'))
    
    estimated(size,number,time=None)
if choice == 2:
    size = int(input('请输入任务大小'))
    time = int(input('请输入工时长短'))
    
    estimated(size,number=None,time)

运行结果及报错内容
bash:122$ python ~/classroom/apps-1-id-5cd9765d19bbcf00015547b5/122/main.py
  File "/home/python-class/classroom/apps-1-id-5cd9765d19bbcf00015547b5/122/main.py", line 21
    estimated(size,number=None,time)
                               ^
SyntaxError: positional argument follows keyword argument

我的解答思路和尝试过的方法

在上面代码的基础上,我尝试了这种方法

if choice == 2:
    size = int(input('请输入任务大小'))
    time = int(input('请输入工时长短'))
    
    estimated(size=size,number=None,time=time)

直接传入参数,但是明明感觉位置传参也可以啊,明明位置都对

我想要达到的结果

希望能搞懂为什么上面不对,以及为什么改了之后又可以了

  • 写回答

1条回答 默认 最新

  • 陈年椰子 2021-12-06 17:22
    关注

    通过位置参数和关键字参数结合传参(注意关键字参数必须在位置参数的后面)

    意思就是要用关键字传参,那么最后一个必须是关键字参数,然后一直倒推。

    以下都合法,其他的不合法

    estimated(size,None,time)   
    estimated(size,None,time=time)   
    estimated(size,number=None,time=time)  
    estimated(size=size,number=None,time=time)  
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月14日
  • 已采纳回答 12月6日
  • 创建了问题 12月6日

悬赏问题

  • ¥15 三电平逆变器中点电位平衡问题
  • ¥20 这怎么写啊 java课设
  • ¥15 用C语言完成一个复杂的游戏
  • ¥15 如何批量更改很多个文件夹里的文件名中包含文件夹名?
  • ¥50 MTK手机模拟HID鼠标出现卡顿
  • ¥20 求下下面这个数据结构代码
  • ¥20 前端 二进制文件流图片转化异常
  • ¥15 github上的这个C语言项目如何跑起来
  • ¥15 java 判断某个数 区间是否存在
  • ¥15 appium控制多个雷电模拟器问题