存在times+=1后输出times仍为0

为什么这样输出结果times为0


class Count:
    def __init__(self,count=0):
        self.count=count
        
def main():
    c=Count()
    times=0
    for i in range(10):
        increament(c,times)
    print ('count is ',c.count)
    print ('times is ',times)

def increament(c,times):
    c.count+=1
    times+=1
main()

如果按题主所写,times在increament中自增了十次 在icreament函数中它确实是10,但是这个10是临时产生的,并没法产生对主函数main()中times的值产生影响,如果想输出times的影响,可考虑下述方式。其实为什么没法产生影响,就类比C语言中的值传递,在主函数外自定义函数中,进行增加,它是不会对主函数中的变量值产生影响的,除非加上返回值,然后主函数接收。

class Count:
    def __init__(self, count=0,times=0):
        self.count = count
        self.times = times

def main():
    c = Count()
    for i in range(10):
        increament(c)
    print('count is ', c.count)
    print('times is ', c.times)


def increament(c):
    c.count += 1
    c.times += 1


main()

运行结果:

img


也可以通过,加上返回值,主函数接收,来解决:

class Count:
    def __init__(self, count=0):
        self.count = count

def main():
    c = Count()
    times = 0
    for i in range(10):
        times = increament(c, times)
    print('count is ', c.count)
    print('times is ', times)

def increament(c, times):
    c.count += 1
    times += 1
    return times

main()

运行结果:

img


希望对题主有所帮助,望采纳!!

你定义的times是int类型, 属于不可变类型, 当参数传递的时候传递的是值而不是引用, 所以times的作用域只能在main函数里, 不包括他调用的increament函数.
在函数里面对值传递的参数做赋值是不影响该参数原本作用域下的值的
要解决很简单, 把times定义成全局变量就行

改成这样times就为10了

class Count:
    def __init__(self, count=0):
        self.count = count


def main():
    c = Count()
    times = 0
    for i in range(10):
        times = increament(c, times)
    print('count is ', c.count)
    print('times is ', times)


def increament(c, times):
    c.count += 1
    times += 1
    return times

main()

times实现加法的时候是局部变量,出去了times是全局变量,两个不是同一个东西

img