Python Fucntion Elements
1) 전달값 ※ 필수 요소 X
2) 반환값 ※ 필수 요소 X
3) 동작
- 내장 함수: 파이썬에서 특정 기능을 하도록 미리 만들어 둔 함수
- 사용자 정의 함수: 개발자가 직접 코드를 작성해 만든 함수
형식 ( 함수 정의) |
def 함수명(parameter/매개변수): 실행할 문장1 # 함수 본문 실행할 문장2 . . . |
※ 함수명 짓기 Tip 함수명은 함수의 동작을 드러낼 수 있게 짓는 것이 좋다. 변수명 규칙과 동일하게 1. 문자로 시작한다. 2. 단어가 여럿일 때에는 언더바(_)로 구분 3. 일반적으로 변수는 명사, 함수는 동사를 사용한다. |
실습1: 출금하기
https://thebook.io/080357/0236/
실습2: 수수료 부과하기
https://thebook.io/080357/0238/
함수 호출
기본값
함수를 호출할 때 직접 정의한 사용할 값
함수에서 매개변수에 미리 지정해 둔 값
def profile(name, age=20, main_lang="파이썬"):
print("이름 : {0}\t나이 : {1}\t주 사용 언어 : {2}".format(name, age, main_lang))
profile("찰리") # age, main_lang은 기본값 사용
profile("찰리", 22) # main_lang은 기본값 사용
profile("찰리", 24, "자바") # 기본값을 사용하지 않음
※ 전달값 작성 순서
함수를 정의할 때 일반 전달값과 기본값이 있는 전달값을 함께 사용하는 경우에는 반드시 일반 전달값을 먼저 적어야 합니다.
올바른 함수 정의 예시
def buy(item1, item2="음료수"):
print(item1, item2)
buy("빵")
올바르지 않은 함수 정의 예시
def buy(item1="음료수", item2):
print(item1, item2)
buy("빵")
=> SyntaxError: non-default argument follows default argument
- keyword argument (키워드 인자)
함수를 호출할 때 전달값뿐만 아니라 어디에 전달할지 명시적으로 지정하는 것
키워드 인자는 보통 어떤 함수에 전달값이 많고 기본값이 잘 정의돼 있을 때
대부분 기본값을 그대로 사용하면서 필요한 부분만 콕 집어서 값을 전달하려는 경우에 유용하다.
무엇보다 순서에 구애받지 않으므로 함수에서 사용 가능한 키워드 인자만 알고 있으면 사용할 수 있다.
일반 전달값 *(콕 집지 않고 전달)과 키워드 인자(콕 집어서 값을 전달)를 함께 사용해 함수를 호출할 때는
반드시 일반 전달값을 순서대로 먼저 적고 나서 키워드 인자를 적어야 한다.
※ 또한, 키워드 인자에 오타가 있으면 오류가 발생할 수 있으니 주의할 것.
def profile(name, age, main_lang):
print(name, age, main_lang)
profile("찰리", age=20, main_lang="파이썬") # 올바른 함수 호출: 일반 전달값을 먼저 작성
profile(name="루시", 25, "파이썬") # 잘못된 함수 호출: 키워드 인자를 먼저 작성
- * 위치 인자 (positional argument)
함수를 호출할 때 함수에서 정의된 순서대로 입력하는 전달값
이 책에서는 키워드 인자와 구분하기 위해 일반 절달값으로 표현했다.
가변 인자 (vaiable argument)
정의된 전달값 개수 미만을 받기 => 나머지는 모두 빈 값으로 채워야 한다.
정의된 전달값 개수 초과를 받기 => ?
이 때 Variable Argument를 사용하면 둘 다 간단하게 해결할 수 있다.
가변 인자: 개수가 변할 수 있는 인자
함수에서 전달값 앞에 *을 추가하면 가변 인자가 된다.
가변 인자는 전달값이 몇 개가 들어오든 묶어서 튜플로 인식한다.
형식 |
def 함수명(전달값1, 전달값2, . . ., *가변 인자): 실행할 문장1 실행할 문장2 . . . return 반환값 |
def profile(name, age, *language):
print("이름 : {0}]t나이 : {1}\t".format(name, age), end=" ")
print(language, type(language))
profile("찰리", 20, "파이썬", "자바", "C", "C++", "C#", "자바스크립트")
profile("루시", 25, "코틀린", "스위프트")
이처럼 가변 인자를 사용하면, 함수는 매개변수로 전달값을 순서대로 받고 남은 전달값이 몇 개든지
상관없이 묶어서 튜플로 처리합니다.
그래서 호출할 때마다 전달값의 개수가 달라져도 문제 없습니다.
https://thebook.io/080357/0253/
매개변수 end
아래의 코드는 결과를 2줄로 나누어서 출력하니 내용을 파악하기 어렵다.
def profile(name, age, lang1, lang2, lang3, lang4, lang5):
print("이름 : {0}\t나이 : {1}\t".format(name, age))
print(lang1, lang2, lang3, lang4, lang5)
profile("찰리", 20, "파이썬", "자바", "C", "C++", "C#")
profile("루시", 25, "코틀린", "스위프트", "", "", "")
실행결과를 한 줄로 출력하고 싶을 때 사용할 수 있는 end라는 매개변수가 있다.
함수를 호출할 때 기본값을 가지는 매개변수 'end'
형식 |
print(출력할 내용, sep=" ", end = "\n", file = None, flush = False) |
def profile(name, age, lang1, lang2, lang3, lang4, lang5):
print("이름 : {0}\t나이 : {1}\t".format(name, age), end = " ")
print(lang1, lang2, lang3, lang4, lang5)
profile("찰리", 20, "파이썬", "자바", "C", "C++", "C#")
profile("루시", 25, "코틀린", "스위프트", "", "", "")
변수
- 지역 변수 (local variable)
- 전역 변수 (global variable)
전역 변수와 동일명의 지역 변수를 만들어 값을 수정하더라도
전역 변수와 지역 변수는 분리되므로 전역 변수의 값에 영향을 미치지 않는다.
영향을 미치게 하려면
global 변수명
을 사용해주어야 한다.
glasses = 10
def rent(people):
global glasses # 전역 공간에 있는 glasses 변수를 함수 안에서 사용하겠다는 표시
glasses = glasses - people
print("[함수 내부] 남은 3D 안경 개수: {0}".format(glasses))
print("전체 3D 안경 개수: {0}".format(glasses))
rent(2)
print("남은 3D 안경 개수: {0}".format(glasses))
'Programming Language > Python' 카테고리의 다른 글
[Python] Python code style guide (0) | 2024.07.19 |
---|---|
[Python] 나도코딩 파이썬 입문 - 문풀 Part7 (0) | 2024.07.19 |
[Python] Argument vs Parameter (0) | 2024.07.19 |
[Python] 나도코딩 파이썬 입문 - 문풀 Part6 (0) | 2024.07.18 |
[Python] 기본 문법(8): 입출력문(sep, end, file, ljust(), rjust(), zfill()) (0) | 2024.07.18 |