ssoL2 TISTORY

[기초 PYTHON 프로그래밍] 15강. 함수2 본문

com/python

[기초 PYTHON 프로그래밍] 15강. 함수2

ssoL2 2020. 12. 25. 05:25

- 전역 변수(global variable) : 프로그램 전체에서 사용 가능

- 지역 변수(local variable) : 함수 내에서만 사용 가능

- scoping rule : 변수를 찾을 때 지역 변수 -> 전역 변수 순으로 찾는다.

 

지역 변수, 전역 변수의 scoping rule 적용

 

- global 선언 : 전역 변수를 함수 내에서 바꾸고자 하면, global 선언이 필요 (바깥 것을 안에서 바꿔) 

 

global 선언 / 전역 변수를 함수 내에서 바꾸고자 한다면

 

global a

변수 a를 global 선언함

 

- 또한, 함수에서 만든 지역 변수를 전역 변수로 사용하고자 할 때도 global 선언 필요 (안 것을 바깥에서 사용)

 

global 선언 2 / 지역 변수를 전역 변수로 사용하고자 한다면

 

- 함수 매개변수는 지역 변수

 

매개변수는 지역 변수이다 / 함수 test 호출 시 100을 인자로 넘기면 지역 변수 a가 생성되고 값으로 100을 갖는다.

 

- mutable 객체가 인수인 경우 (리스트(list), 집합(set), 사전(dict))

- 사전은 집합의 일종이므로 리스트와 집합의 경우만 보자

 

리스트 인수일 때 '=' 할당 연산자와 같은 역할이다 / 따라서 copy하기 위해선 인수를 넘길 때 슬라이싱을 [:] 또는 [::]로 해서 객체 전체를 다시 생성한다.

 


 

- 기본값(default value)이 있는 인수

- 함수 호출 시 인수를 넘겨주지 않아도 인수가 기본값을 취하도록 하는 기능

 

기본값 인수 / 첫 번째 매개변수 a는 반드시 인수를 넘겨야 하지만 두번째 매개변수인 step에서는 다르다. step 인수를 넘기면 그 값이 step 에 저장되고 인수가 없다면 1로 넘어간다.

 

- 함수를 정의할 때 인수의 기본값 사용시 주의점

1. 기본값이 있는 인수가 먼저 올 수 X

 

기본값 인수가 먼저 올 수 없다

 

2. 인수가 여러 개인 경우는 마지막에만 기본값 인수 가능

 

기본값 인수 여러개인 경우 / test와 test2는 기본값 인수가 마지막 부분에만 왔지만, test3처럼 기본값 인수가 가운데에만 있는 경우는 안된다. 만약에 test3(a,b=1,c=10)인 경우는 된다.

 

- 키워드 인수 : 함수 호출 시에 인수 이름(매개변수)과 값을 같이 전달하기

 

키워드 인수 경우 / b, c 처럼 매개변수와 값을 같이 적어주면 인수의 순서 상관없이 함수가 잘 작동한다. 그러나 e는 키워드 인수를 일반 인수 이전에 사용했기 때문에 에러가 난다.

 

- 키워드 인수는 일반 인수 이후에 와야한다.

 

키워드 인수 경우 / 매개변수와 값을 같이 쓴다면 인수의 순서와 관계 없이 잘 들어간다. 또한, 일반 인수 이후 키워드 인수를 사용해도 괜찮다. 그러나 volume(5,x=2,z=20)에서는 일반 인수로 x=5로 넣었는데 두번째 인수에 x=2를 했기에 x에 두값이 할당되어 에러가 났다. 마지막 에러는 일반 인수 앞에 키워드 인수를 할당했기에 에러가 났다.

 

- 가변 인수 : 정해지지 않은 수의 인수로 *매개변수 로 인수 표현함

- 함수 정의시 고정 인수를 우선 나열하고, 나머지를 마지막에 튜플 형식으로 한꺼번에 받는다.

 

가변 인수 사용 함수 / 일단 고정 인수를 정해놓아야 한다. 이후 필요한 부분에 가변 인수를 사용한다. 이 가변 인수는 결국에 return 값이 튜플 형식이다

 

- 정의되지 않은 키워드 인수 처리하기

- ** 형식으로 기술하고, 전달받는 형식은 사전이다. 즉, 키는 키워드(변수명), 값은 키워드 인수

 

정의되지 않은 키워드 인수 경우 / 고정 인수도 필요 없고 그냥 자유롭다. 인수 개수도, 매개변수 이름도 자유롭게 한다. 대신 매개변수 이름은 키가 되며 할당 값은 값이 되어 '사전' 형식으로 표현된다.

 

- 갑자기 궁금해서 list(dict)하면 어떻게 되나 봤더니 키 값만 list 형식으로 저장됨ㅋㅋ

 


 

- 람다 함수 : 한 줄짜리 함수로 한 번 쓰고 말 때 자주 이용한다. 

- 특히 함수 자체를 함수 인자로 넘길 때 유용

 

람다식 <인수> : <반환할 식> / 반환할 식이 헷갈리다면 return 다음에 써야 할 것이라고 생각하면 된다.

 

- map 내장 함수 : 해당 인수 집합을 해당 함수로 돌리는 함수임

 

map 내장 함수 구조 / map 의 조건은 인수 집합에 순서 자료형 즉, 리스트, 튜플, 문자열만 가능하다.

 

map 내장 함수의 예시 1

 

- map 내장 함수 역시 reversed() 처럼 바로 print() X => list 형변환 하여 이용 가능

 

map 내장 함수의 예시 2 / 인수 함수에 사용자 정의 함수도 가능하며, 이럴 때 람다식을 이용하는 것이 좋다. 당연히 이용하려면 list 형변환 해야한다.

 

- filter 내장 함수 : 해당 인수 집합을 True or False만 반환하는 함수에 넣어 True 값만 반환해주는 함수

 

filter 내장 함수의 구조 / filter 의 조건은 인수 집합에 순서 자료형 즉, 리스트, 튜플, 문자열만 가능하다는 것~과 인수 함수가 참/거짓을 반환하는 함수여야 한다.

 

filter 내장 함수의 예시 / 인수 함수에 사용자 정의 함수도 가능하며, 이럴 때 람다식을 이용하는 것이 좋다. 당연히 이용하려면 list 형변환 해야한다.

 

Comments