代码块没有返回所有值?

时间:2016-07-25 10:55:58

标签: python-3.x

我无法解决这个问题并且需要帮助才能理解为什么在以下代码块中返回时它只输出date_list中的第一个列表而不是print语句?

date_list = [['2015-11-11', '2015-12-02'], ['2016-04-03', '2016-04-15'], ['2016-05-10', '2016-05-22']]

def formatdates():
    for i in range(len(date_list)):
        start_date = date_list[i][0]
        end_date = date_list[i][1]
        s = datetime.strptime(start_date, "%Y-%m-%d")
        e = datetime.strptime(end_date, "%Y-%m-%d")
        formatted_s = s.strftime("%e-%b-%Y")
        formatted_e = e.strftime("%e-%b-%Y")
        i += 1
        print("{} to {}".format(formatted_s, formatted_e))  # Output 1 below
        return print("{} to {}".format(formatted_s, formatted_e))  # Output 2 below
print(formatdates())

期望的结果是在函数内返回时根据print语句输出格式化日期列表? 如何将所有行作为打印列表返回?

输出1:

2015年11月11日至2015年12月2日

2016年4月3日至2016年4月15日

2016年5月10日至2016年5月22日

输出2:

2015年11月11日至2015年12月2日

1 个答案:

答案 0 :(得分:1)

date_list = [['2015-11-11', '2015-12-02'], ['2016-04-03', '2016-04-15'], ['2016-05-10', '2016-05-22']]

def formatdates():
    ret_date = []
    for d in date_list:
        start_date = d[0]
        end_date = d[1]
        s = datetime.strptime(start_date, "%Y-%m-%d")
        e = datetime.strptime(end_date, "%Y-%m-%d")
        formatted_s = s.strftime("%e-%b-%Y")
        formatted_e = e.strftime("%e-%b-%Y")
         # print("{} to {}".format(formatted_s, formatted_e))  
        ret_date.append("{} to {}".format(formatted_s, formatted_e))
    return ret_date
print(formatdates())

UPDATE return在循环内部,并在第一步后退出函数。