非常棒的python和整体编程。 为什么这段代码:
def daysBetweenDates(year1, month1, day1, year2, month2, day2):
years = [year1, year2]
def leapyr(n):
if n % 400 == 0:
return True
elif n % 100 == 0:
return False
elif n % 4 == 0:
return True
else:
return False
for i, year in enumerate(years):
if leapyr(year):
years[i] = year * 366
print 'l:', years, year1, year2
else:
years[i] = year * 365
print 'n:', years, year1, year2
daysBetweenDates(1,1,1,4,2,1)
以年份[]更改year1和year2,但不会更改year1和year2?
n: [365, 4] 1 4
l: [365, 1464] 1 4
编辑:工作代码
def daysBetweenDates(year1, month1, day1, year2, month2, day2):
years = [year1, year2]
def leapyr(n):
if n % 400 == 0:
return True
elif n % 100 == 0:
return False
elif n % 4 == 0:
return True
else:
return False
for i, year in enumerate(years):
if leapyr(year):
years[i] = year * 366
year1 = years[0]
year2 = years[1]
print 'l:', years, year1, year2
else:
years[i] = year * 365
year1 = years[0]
year2 = years[1]
print 'n:', years, year1, year2
daysBetweenDates(1,1,1,400,2,1)
现在给出了正确答案:
n: [365, 400] 365 400
l: [365, 146400] 365 146400
您的帖子看起来代码太多了,这里再添加一些文字了。文字很重要。
答案 0 :(得分:0)
年份是一个列表,如果它是一个可变对象(即一个字典,列表等),则内部值通过引用复制,如果变量不可变(int,string,tuple等),则按值复制。因此,当您修改列表中的int值时,它不会反映用于构建它的int变量。
答案 1 :(得分:0)
创建列表年份时,变量year1和year2将按值传递。因此,当您在以下位置修改它时:
years[i] = year * 365
您只是更改列表中的值,而不是更改它的变量。
这个SO问题提供了有关如何在Python中传递参数的良好信息:How do I pass a variable by reference?
从我的浏览中看来,您似乎可能需要将日期传递给您的daysBetweenDates函数作为对象而不是原始的整数。