weite122 发表于 2016-11-5 16:58:07

018讲动动手第一题

def mFun(*param, base=3):
    result = 0
    for each in param:
      result += each

    result *= base
   
    print('结果是:', result)

mFun(1, 2, 3, 4, 5, base=5)


首先,*param中的“*”是什么作用,
其次,为什么运行程序后还是会把基数5给加进去,是我理解问题有误么,请广大鱼油帮我解答一下

人zai旅途 发表于 2016-11-5 16:58:08

本帖最后由 人zai旅途 于 2016-11-6 00:50 编辑

分享一下我的理解,如果满意,请选择为最佳答案,给个技术值;
首先,*param中的“*”是什么作用
答案:当函数的参数数量不确定时,在定义函数的时候可以使用收集参数,即在形参前面加一个“ * ”,其实是表示该参数变量是一个元组类型,传入的实参会以元组形式复制为形参变量,*param是一个特定表达方式;
其次,为什么运行程序后还是会把基数5给加进去,是我理解问题有误么,
答案:
mFun(1, 2, 3, 4, 5, base=5),重新一定base=5以后,收集参数部分result=1+2+3+4+5=15,
最后result *= base,result =15*5=75
mfun(1,2,3,4,5),默认base=3,结果为15*3=45;
根据函数定义过程,base本来就不属于收集参数,不参与求和计算的

kox 发表于 2016-11-5 19:52:33

*的作用是把所有的位置参数收集成一个元组
算出的结果就是75,没问题啊

weite122 发表于 2016-11-5 23:11:57

kox 发表于 2016-11-5 19:52
*的作用是把所有的位置参数收集成一个元组
算出的结果就是75,没问题啊

最后一个参数为(base=5),基数不参与求和计算,5应该不是不能算到求和里的么?

冲啊大笼包 发表于 2016-11-12 20:10:47

*是可以输入很多个值的

Damn_it 发表于 2016-11-15 11:03:40

无言{:10_260:}

Damn_it 发表于 2016-11-15 11:04:25

两次无言{:10_264:}

sum_ccck 发表于 2018-1-11 01:52:12

根据题意 我感觉是这样的:
def mFun(*params,base = 3):
    list1 = list(params)
    last = list1.pop()
    list1.append(last)
    result = 0
   
    if last != 5:
      for each in list1:
            result += each

      result *= base

    elif last == 5:
      list1.pop()
      for each in list1:
            result += each

      result *= 5

    return result

渣渣在此 发表于 2020-5-22 13:38:07

头大一个礼拜,我是弱智
页: [1]
查看完整版本: 018讲动动手第一题