2014-04-22 1 views
0

오늘은 내가 작동하려면 속성을 할당 할 수 있다는 것을 발견,하지만 난 자체 내부 속성을 할당하려고 할 때, 나는 실패속성을 자체 내부 함수에 지정할 수 있습니까?

>>> def a(): 
...  pass 
... 
>>> a.x = 1 
>>> a.x 
1 
>>> def b(): 
...  b.x = 2 
... 
>>> b.x 
AttributeError: 'function' object has no attribute 'x' 

자신의 내부 함수에 속성을 할당하는 방법이 있나요?

그렇지 않은 경우 함수의 속성은 무엇을 사용합니까?

답변

1

함수 본문은 실제로 함수가 호출 될 때까지 평가되지 않습니다. 귀하의 예에서 b.x은 적어도 한 번 이상 b이 호출 될 때까지 존재하지 않습니다.

하나의 용도는 C 스타일 정적 변수를 시뮬레이트하는 것입니다.이 정적 변수는 함수 호출 사이에 값이 유지됩니다. 간단한 예제는 함수가 호출 된 횟수를 계산합니다.

count 내부에서 f.count에 할당 아무 문제가 없지만, f이 그때까지 존재하지 않는 f 때문에, 정의 된 후 초기 할당이 발생해야
def f(): 
    f.count += 1 
    print "Call number {0}".format(count) 
f.count = 0 

참고.

+0

function 속성의 용도는 무엇입니까? – Zen

+0

예외가 있다고 생각합니다. 함수 자체 내에 __doc__ 특성을 할당 할 수 있으며 위에서 언급 한 'b.x'방식과 같이 사용할 수 있습니다. – Zen

+0

차이점은 다른 속성과 함께'__doc__'는'def' 문에 의해 미리 정의되어 있다는 것입니다. – chepner

관련 문제