Python---戻り関数


# -*- coding: utf-8 -*-
#     

# 1.       
#                  ,             

#            

#      ,       


def calc_sum(*args):
    ax = 0
    for n in args:
        ax = ax + n
    return ax

#           ,         


def lazy_sum(*args):
    def sum():
        ax = 0
        for n in args:
            ax = ax + n
        return ax
    return sum

#      lazy_sum() ,           ,       

f = lazy_sum(1, 3, 5, 7, 9)
#       sum  
print(f)
#   sum
print(f())

#       ,     lazy_sum       sum,  ,    sum        lazy_sum        
#  lazy_sum    sum ,                 ,    "  (Closure)"          

#         
f1 = lazy_sum(1, 3, 5, 7, 9)
f2 = lazy_sum(1, 3, 5, 7, 9)
print(f1 == f2)
# f1 == f2 false
# f1() f2()         


# 2.  

#                    args,  ,             ,               
#            ,            ,       f()   


def count():
    fs = []
    for i in range(1, 4):
        def f():
            return i * i
        fs.append(f)
    return fs

f1, f2, f3 = count()


#        ,    ,          ,  ,    3       

#    (9, 9, 9)
print(f1(), f2(), f3())

#                i,         。  3       ,        i     3,  ,     9

#               ,            


#               ,         
#        ,         ,