51Testing软件测试论坛

标题: python函数,形参不确定的情况下,传入一个列表。只循环一次,是为什么? [打印本页]

作者: 测试积点老人    时间: 2019-2-26 10:47
标题: python函数,形参不确定的情况下,传入一个列表。只循环一次,是为什么?

def buttown(*out):
for i in out:
print ('greet '+str(i))
buttown(list(range(1,10)))

求大神赐教,为什么这个循环只打印了一次,就不会打印第二次了,为什么输出的结果是greet [1, 2, 3, 4, 5, 6, 7, 8, 9]。从逻辑上来说,代码没错啊,将1到10的列表传入到函数中。然后用变量i在列表out里循环。每循环一次打印一次变量的值。其结果不应该是这样的吗?求教,*out表示函数的参数未知。那我传入一个列表,在这里函数的实参变成几个了。初学python不懂的太多,求大神赐教,谢谢!
greet 1
greet 2
greet 3
greet 4
greet 5
greet 6
greet 7
greet 8
greet 9



作者: cjjcq199688    时间: 2019-2-26 16:16
我觉得是 参数out是一个列表,你输入list(range(1,10)),只是相当于输入了一个参数  也就是out[0]=list(range(1,10))
我也是小白一个 不知道是不是这样理解
作者: cjjcq199688    时间: 2019-2-26 16:20
我觉得是 参数out是一个列表,你在方法中输入参数list(range(1,10)),只是这个列表的第一个参数 ,相当于out[0]=list(range(1,10)) 所以只输出了一个结果
我也是小白一个 ,不知道这样理解是否正确
作者: qqq911    时间: 2019-2-27 10:41
语法问题
作者: jingzizx    时间: 2019-2-27 12:32
没有循环吧
作者: abcsell    时间: 2019-2-27 17:15
没有设置循环条件
作者: 幸运黑猫    时间: 2019-3-5 11:13
应该是这样
def buttown(*out):
for i in out:
    print ('greet '+str(i))
buttown(*list(range(1,10)))

你函数定义的是一个不定长参数,所以要达到你说的效果,调用应该是buttown(1,2,3,4,5,6,7)这样,而讲一个list转为这样的参数,方法就是在传参时前面加*

你之前的写法,是将list本身作为不定长的第一个参数传进去了,所以拿到的out是[[1,2,3,4,5],]这样,作为数组遍历的时候,i是[1,2,3,4,5,6],所以不对




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2