def count():
fs = []
for i in range(1, 4):
def f(j):
def g():
return j*j
return g
r = f(i)
fs.append(r) #fs作为列表,为什么可以append(r)?(而r是f所返回的函数)
return fs #个人的想法应该是fs.append(r())
f1, f2, f3 = count()
print f1(), f2(), f3()
想弄明白的是:这里传入append的r是以什么形式传入的呢
谢谢各位指教:D
迷茫2017-04-17 17:31:24
은 지연된 호출과 유사한 함수 정의 형식으로 전달됩니다.
의 예에서는 명확하지 않습니다. 으아아아함수에서 반환되는 r에 있는 r을 변수라고 생각하면 되는데, 이 변수에 함수의 정의가 저장됩니다.
실제 함수 호출은 나중에 x()를 통해 이루어집니다
ringa_lee2017-04-17 17:31:24
r은 객체이고, 이 객체의 유형은 함수입니다.
즉, r은
과 같은 유형 함수의 객체입니다.1은 정수 유형의 객체
'hi'는 과 마찬가지로
String大家讲道理2017-04-17 17:31:24
를 fs.append(r())
로 변경하는 것도 가능하지만, 함수의 의미가 다릅니다. count()
함수를 실행하면 [1, 4, 9]
결과가 반환되므로 더 이상 print f1(), f2(), f3()
을 사용할 수 없습니다. 그 이유는 다음과 같습니다.
이것은 g
이 아니라 g()
이므로 count()
을 실행하여 반환되는 것은 실제로 [g1, g2, g3]
세 개의 클로저 함수를 포함하는 목록입니다. 각 클로저 함수는 서로 다른 자유 변수(각각 1, 2, 3)를 바인딩합니다. ), 따라서 이 목록을 f1, f2, f3
에 압축을 푼 후 print f1(), f2(), f3()
을 실행하는 것은 세 가지 기능을 실행하고 결과를 인쇄하는 것과 동일하므로 최종 출력은 1, 4, 9