1. 함수
def

def open_account ():
print("새로운 계좌가 생성되었습니다.")
open_account() -> 이거 입력시 "새로운 계좌가 생성되었습니다." 가 출력됨
2. 전달값과 반환값


왼쪽 사진에서
1) 5가 money
2) □+20 이 balance+
3) 네모난 틀이 deposit(함수)
4) ?가 balance+money(return 옆의)
(이미지 출처: 나도코딩 파이썬 기본편 함수)
내 나름대로 정리한 생각이니 정답 아님..
return: 함수의 결과값을 어떤 변수에 담아서 계속 이어서 작업을 해 나갈 수 있게 함
*여러 개의 값도 한꺼번에 return 가능

7번째 줄처럼 return에 두 개의 값을 저장할 수 있고, 이를 11번째 줄처럼 사용할 수 있음. (이때 이건 튜플 형태)
3. 기본값

def profile(name, age=17, main_lang="파이썬"):
print("이름:{0} 나이:{1} 주언어:{2}".format(name, age, main_lang))
이때 age, main_lang 값을 입력하지 않으면 기본값인 17, 파이썬이 출력됨
+) 하나의 문장을 두 줄로 나눠 쓰는 법 => \

age=17 옆에 \ 치고 엔터 쳐도 문장 정상 작동
4. 키워드값

함수에서 전달받는 매개변수의 값을 키워드를 이용해서 함수를 호출해주면(키워드=값), 순서 뒤섞인 채로 써도 순서대로 잘 출력됨
5. 가변인자
서로 다른 개수의 값을 넣어줄 때

+) end=" " -> 다음 문장이 쭉 이어서 나오도록 함
유재석은 언어를 3개, 김태호는 언어를 1개 할 수 있는 상황에서 language에 들어갈 값의 개수가 각각 다르니까
*language 로 써서 여러 개의 값을 일일히 lang1, lang2 ... 로 전달값 넣을 필요 없게 해줌

end=" " 가 없으면

print ( ) 가 없으면
+) print(lang, end=" ") 여기에도 end=" " 가 있는 건 python, Java, C가 유재석의 언어이니 유재석 라인에 쭉 입력될 수 있도록 함이고
(print(lang)은 그저 한 줄 한 줄 띄어가며 lang을 입력할 뿐 이게 유재석의 언어인지는 모르기 때문)
print( ) 가 있는 건 이게 없으면 유재석과 김태호의 프로필이 같은 줄에 나열되기 때문임 (end=" "로 인해)
6. 지역변수와 전역변수
global 지역변수 -> 전역변수
지역변수: 함수 내에서만 쓸 수 있는 것. 함수가 호출될 때 만들어졌다가 함수 호출이 끝나면 사라지는 변수
전역변수: 프로그램 내 모든 공간에서 부를 수 있는 변수

지역변수
gun이 지역변수라
함수 밖의 gun 값과 함수 안의 gun 값이 달라서 같은 이름을 가진 gun 이라고 하더라도 값이 다르게 출력

global을 변수 앞에 붙여줌으로 전역변수화를 시켜주었기 때문에
함수 밖의 gun이 함수 안에서도 동일한 값으로 사용됨
but, 전역변수를 많이 쓰면 코드 관리가 어려워지기 때문에 권장되는 방법은 아님
⇩
return 완벽 이해하기
+전역변수 없이 반환값 사용하는 방법
1. return 을 사용하는 상황
(1) checkpoint(gun,2), gun을 새롭게 정의하는 게 없다면 (gun= 을 안 붙여준다면)

return을 통해 함수의 값이 gun에 저장됨.
하지만 checkpoint(gun,2) 앞에 gun=을 안 붙여줘서 gun 값이 새롭게 정의가 안 됨.
그래서 남은 총:10으로 출력됨. -> 새롭게 정의가 안 됐기 때문에(함수 결과값으로) 맨 처음에 정의한 gun=10이 쓰임
(2) gun=checkpoint(gun,2) , gun을 다시 새롭게 정의해준다면

return을 통해 함수의 값이 gun에 저장이 되는 것은 동일함.
그러나 이번에는 함수 밑에서 gun=checkpoint(gun,2)에서 gun에 함수를 통해 정의된 gun의 값인 8이 새롭게 저장됨.
그래서 남은 총 : 8 이 출력됨.
2. return을 사용하지 않는 상황
(1) checkpoint(gun,2), gun을 새롭게 정의하는 게 없다면 (gun= 을 안 붙여준다면)

checkpoint(gun,2)는 일단 함수에 정의된대로 '[함수 내] 남은 총:8'을 출력함
그리고 gun이 새롭게 정의된 것이 없으니 그냥 1번째 줄의 gun=10이 print("남은 총:{0}".format(gun))에 적용되어 남은 총:10이 출력됨
(2) gun=checkpoint(gun,2) , gun을 다시 새롭게 정의해준다면

일단 checkpoint(gun,2)가 쓰였으니까 함수대로 '[함수 내] 남은 총:8'이 출력됨.
그러나 남은 총을 출력하는 과정에서 None이 출력됨.
<그 이유>
i. None이 뜨는 이유
return을 쓰지 않아서 checkpoint(gun,2)이 과정을 통해서 gun=10-2=8이 되었다는 사실이 gun에 저장이 안 됨.
그래서 일단 checkpoint(gun,2)가 쓰였으니 '[함수 내] 남은 총:8' 이거는 출력을 하겠는데..
그 결과값이 return으로 저장은 안됐으니
gun=으로 gun을 새롭게 정의해주려고 해도 이 gun 입장에서는 'checkpoint(gun,2) 에서 저장된게 없는데 뭐가 gun이라는 거야..'라고 생각하고 저장된게 없는 걸 gun이라고 정의해줘버리니 그냥 None 되어버리는 것.
ii. gun=10을 쓰지 않는 이유
checkpoint(gun,2)에 저장된 게 없어서 그걸 못 쓴다면 첫번째 줄의 gun=10을 쓰면 되지 않나? 싶을 수 있지만
이미 바로 위에서 gun=checkpoint(gun,2)를 통해 gun을 새롭게 정의해주려는 시도를 했기 때문에 이게 가장 최신 꺼라 gun=10은 쓰지 못함.
'Python' 카테고리의 다른 글
[Python] 알고리즘, 코딩, 프로그래밍, 파이썬, 세미콜론, 자료형, 연산, 진수, 변수, 할당연산자 (0) | 2022.08.11 |
---|---|
[Python] if, 반복문, for, while, continue, break, 한 줄 for (0) | 2022.05.08 |
[Python] 슬라이싱, 문자열처리함수, 문자열포맷, 탈출문자, 리스트, 사전, 튜플, 집합, 자료 구조의 변경, shuffle, sample (0) | 2022.05.07 |
[Python] 자료형, 변수, 주석, 연산자, 간단한 수식, 숫자처리함수, 랜덤함수, 문자열 (0) | 2022.05.05 |