특정한 기능을 하는 코드의 조각(묶음)
기능을 분해하고, 재사용 가능하게 만든다
분해
특정 기능 단위로 분해해서 함수를 사용한다
추상화
복잡한 내용을 모르더라도 사용할 수 있도록 재사용성과 가독성, 생산성을 높인다
내부 구조를 몰라도 무방하다
함수는 함수명으로 호출하여 사용
함수의 이름을 통해 기능을 유추할 수 있다
함수는 호출되면 코드를 실행하고 return 값을 반환하며 종료
주의 - print vs return
프린트를 사용하면 호출될 때마다 값이 출력됨
데이터 처리를 위해 리턴 사용
리턴 안하고 변수에 할당하면 None이 할당됨
리턴은 항상 한개의 값만 반환할 수 있다
두개 이상 리턴하고 싶다면,
반환 값으로 튜플 사용
아규먼트
함수 호출시 함수의 파라미터를 통해 전달되는 값
- 포지셔널 아규먼트
기본적으로 함수 호출시 아규먼트는 위치에 따라 함수 내에 전달됨
- 키워드 아규먼트
직접 변수의 이름으로 특정 아규먼트를 전달할 수 있음키워드 아규먼트는 항상 포지션 인자 뒤에 와야 한다
Default Arguments Values
기본값을 지정해 함수 호출 시 인자 값을 설정하지 않도록 함
네임 스페이스
어떤 것을 할당했을 때 저장해두는 공간 / 기억하는 공간
네임 스페이스가 여러 개가 있다는 것은 같은 이름이 가능하다는 뜻
찾는 순서는 LEGB 순서
로 찾는다
가장 작은 범위부터 찾는다
함수는 코드 내부에 로컬 스코프를 생성하며 그 외의 공간인 글로벌 스코프로 구분한다
변수는 각자의 수명주기가 존재
첫번째 func2() 실행시 아무것도 안나옴
두번째 fun1() 실행시 세 문장 모두 출력
로컬에서 없어서 인클로징에서 찾음
파이썬은 인자를 넘기면 매개변수에 넘어온 값이 할당되어서 로컬 변수가 된다
함수 안쪽에서 참조하는 x는 글로벌 변수를 가져와서 사용한다
my_list[1] = 5554
로컬에 마이 리스트 있는가? 없다, 인클로징에 있나? 없다, 글로벌에서 가져와서 안쪽에 있는 값을 바꿔준다 (함수 내부 로컬에서만)
출력은 1
호출한 시점이 글로벌이니까 1
출력은 3 2 3
nonlocal은 나를 감싸고 있는 가장 가까운 함수의 네임스페이스에 접근하는 것
출력은 20 error
두번째 프린트 x는 글로벌 x가 없기 때문에 에러
global(글로벌 변수 키워드)는 알고리즘 할 때 도움이 된다, 함수가 여러개 중첩이 된 경우와 같은 특수한 상황에서만 사용된다
함수로 값을 바꾸고자 한다면 매개변수로 넘겨서 사용해라