python 에서 함수 값 을 변수 에 할당 할 때 주의해 야 할 문제 들

머리말
본 고 는 주로 python 이 함 수 를 변수 에 할당 할 때 주의해 야 할 문제 들 을 소개 합 니 다.여러분 이 참고 하여 공부 할 수 있 도록 공유 합 니 다.다음은 더 이상 말 하지 않 겠 습 니 다.상세 한 소 개 를 살 펴 보 겠 습 니 다.
두 가지 함수 가 변수 에 할당 하 는 형식 을 본 적 이 있 습 니 다.하 나 는?

a=f
다른 하 나 는...

a=f()
이 두 가지 형식 은 차이 가 있 으 니 각각 총 결 해 보 자.
1.a=f 형 은 변 수 를 가리 키 는 함수 에 속한다.
코드 로 확인 하기:

>>> f = abs
>>> f(-10)
10
변수 f 가 abs 함수 자 체 를 가리 키 고 있 음 을 설명 합 니 다.직접 호출abs()함수 와 호출 변수f()는 완전히 같다.이것 은 료 설 봉 선생님 python 튜 토리 얼 의 예 입 니 다.현재 호출f()과 호출abs()은 같 습 니 다.
공장 함수 의 예 를 하나 더 들 자.

def maker(N):

  def action(X):

    return X**N

  return action
이 내장 함수 의 외층 반환 값 은 내층 함수 의 함수 이름 입 니 다.괄호 가 없 는 지 주의 하 십시오.여기에 괄호 가 있 는 지 없 는 지 는 큰 차이 가 있 습 니 다.이 때 외부 함수 호출:

f=maker(2)
그러면 위 에서 말 한 바 와 같이 f 는 action 함 수 를 가리 키 고 제한 조건 은 N=2 이 며 f 는 N 과 2 시의 action 함수 로 이해 할 수 있다.우 리 는 그것 을 호출 합 니 다.

>>> f(3)
9
f 와 action 함수 가 같다 는 것 을 증명 합 니 다.
2.a=f()형 은 f()의 반환 값 을 a 에 부여 하 는 과정 에 속한다.
여기 있 는 a 는f()의 반환 값 만 받 습 니 다.f()반환 값 이 없 으 면 a 는 None 로 부 여 됩 니 다.여기 서 주의해 야 할 것 은a=f()의 집행 과정 에서f()한 번 실 행 될 것 이다.이것 도 내 가 방금 알 게 된 것 이다.예 를 들 어:

>>> def add(x,y):
    z=x+y
    print(z)
>>>a=add(3,4)
7
여 기 는 하나의 할당 문 만 실 행 했 지만 결과 7 을 출력 했 습 니 다.할당 과정 함수 add 가 실 행 했 음 을 설명 합 니 다.그러나 a 의 값 은 None 이 고 print 문 구 를 통 해서 만 표시 할 수 있 습 니 다.할당 프로 세 스 함수 만 실행 되 는 것 이 아니 라 return 구문 에 도 마찬가지 입 니 다.

>>>def log(func):
   def wrapper(*args, **kw):
     print('call %s():' % func.__name__)
     return func(*args, **kw)
   return wrapper
>>>@log
>>>def now():
    print('2015-3-25')
이것 은 료 설 봉 선생님 python 튜 토리 얼 장식 기 1 절의 루틴 입 니 다.처음에 저 는return func(*args,**kw)이 문 구 는now()함수(즉 func 함수)의 반환 값 을 되 돌려 주 는 것 이 라 고 생각 했 습 니 다.나중에 now 함수 가 반환 값 이 없 는 것 을 발 견 했 습 니 다.즉,None 이기 때문에 사실은 이 문 구 는 할당 과정 에 있 습 니 다. func(*args,**kw)함수 now 의 print 문 구 를 실 행 했 습 니 다.
다음 연습 문제 에서 하나의 변형 은 함수 호출 전후 에'begin call'과'end call'을 인쇄 하 라 는 것 입 니 다.다음 네티즌 의 프로그램 은 이렇게 쓰 여 있 습 니 다.

def wrapper(*args,**kw):
   print(t+'begin call')
   result=func(*args,**kw)
   print(t+'end call')
   return result
처음에는 왜result=func(*args,**kw)라 는 말 을 사 용 했 는 지 잘 이해 하지 못 했 는데 나중에 이해 한 후에 야 할당 자체 가 의미 가 없다 는 것 을 알 게 되 었 다.다만 이 말 은 동시에 func 함수 가 실 행 했 기 때문에 썼 다.

def wrapper(*args,**kw):
   print(t+'begin call')
   func(*args,**kw)
   print(t+'end call')
결과 도 마찬가지다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기