티스토리 뷰
AIFFEL(대전) [Fundamental] 3-1 파이썬(Python) 변수와 함수 그리고 반환(return)
무엇보다_빛나는_샤트 2022. 2. 17. 12:052021.1.4 23:24
2021.01.04 (월)
3장 파이썬으로 코딩 시작하기 중 3-2 ~ 3-8 내용.
<학습내용 키워드>
1. 변수란?
2. 함수란?
3. 새로운 함수 정의하기
4. 변수의 스코프(전역변수, 지역변수)
5. 함수와 인자 그리고 여러 인자를 한꺼번에 전달하기
6. 함수와 return(반환)
1. 변수란?
*변수: 여러 값으로 변할 수 있는 수라는 사전적 의미를 가지고 있지만 프로그래밍에서의 의미는 어떤 값을 대표하는 값이라고 생각하는게 편하다. 예를 들어
introduce = '안녕하세요~! 샤트의 빛나는 프로그래밍 블로그입니다. 인공지능, python, 딥러닝, 자연어 처리 등 다양한 분야로 인사드리겠습니다!"
introduce라는 변수에 소개글을 저장해서 언제든지 소개글을 introduce라는 변수 하나로 사용할 수 있다.
age = 20
height = 180
weight = 72
print(age) # 20
print(height) # 180
print(weight) # 72
위와 같이 age, height, weight 등과 같은 변수에 값을 저장해 언제든지 값들을 사용할 수 있는 것이다!
(사실 위와 같은 한 사람에 대한 값들은 딕셔너리로 표현하는 게 더 효율적이다. 그건 다음에)
2. 함수란?
중고등학생 시절 수학 시간에 가장 많이 들어본 단어는 아마 '함수'일것이다.
단어 자체 의미는 재밌다. 함(어떤 미지의 공간, 박스라고 생각해보자) + 숫자.
어떤 입력값x가 함수f로 들어가 f(x)로 출력되는 것을 뜻한다.
이미지로 표현하면 아래와 같다.
프로그래밍에서 함수도 마찬가지 개념이다. 어떤 기능들을 정의해서 함수로 만들어 입력값에 대한 출력값을 얻는 것이다!
★ 왜 필요하나?
- 프로그래밍을 하다 보면 복잡한 기능을 가진 코드를 반복적으로 수행해야 하는 경우가 생긴다. 예를 들어
입력값 x에 대해 f(x) = x^2 + x * 5 를 반복적으로 적용해야 한다면 함수를 정의해 필요한 곳에 바로 사용할 수 있는 편리함이 있다!
아래는 가장 흔한 예제 중 하나인 입력한 두 숫자의 합을 출력하는 함수이다.
def add(a,b):
print(a+b)
add(2,3) # 5
3. 새로운 함수 정의하기
그렇다면 함수는 어떻게 만들까?
위의 코드에서 구조를 알 수 있다.
def 함수이름(인자):
기능
def라는 명령어를 통해 함수를 정의할 수 있다. '인자'라는 용어는 일단 입력값정도로 이해하고 넘어가자! 5번에서 설명할 예정
★ def 문장 아래 부분은 함수를 정의하는 부분이며 띄어쓰기 4회를 해야 함수를 정의하는 부분으로 인식한다.
만약 띄어쓰기가 맞지 않는다면 오류가 생기니 주의!
일단 기본 구조는 이렇다!
인자를 쓰지 않고 공백으로 두고 함수를 만들 수도 있다.
def hello():
print('Hello!')
hello() # Hello!
4. 변수의 스코프(전역변수, 지역변수)
*scope: 1.(무엇을 하거나 이룰 수 있는) 기회, 2.(주제조직활동 등이 다루는) 범위, 3.샅샅이 살피다
> 사전적 의미에서 알 수 있듯이 어떤 범위를 아우르는 느낌이다. 중요한 것은 '범위'를 가지고 있다는 점!
위에서 배운 변수와 함수를 연계해서 생각해볼 수 있는 개념이 나온다. 아래 코드를 보자.
food = '삼겹살'
def food_name():
food = '목살'
food_name() # 아무일도 일어나지 않는다.
print(food) # 삼겹살
food라는 변수는 처음에 '삼겹살'이라는 값이 저장되었고, food_name 함수 안에서 '목살'로 저장되었지만 print를 통해 출력해보면 맨처음 저장한 '삼겹살'이 출력된다.
즉, 변수가 함수 내부에서 저장된 것은 함수 내부 범위에서만 영향을 준다. (food = '목살'로 정의한 부분)
그리고 이 상황에서는 지역 스코프를 갖는 변수라고 한다. (흔히 지역변수라고 부른다.)
하지만 변수가 함수 외부에서 저장되었다면 코드 전체에서 food = '삼겹살'로 인식할 수 있는 것이다.
이 상황에서는 전역 스코프를 갖는 변수라고 한다. (흔히 전역변수라고 부른다.)
이렇듯 스코프는 정의된 변수가 얼마나 영향을 끼칠 수 있는 범위를 가지는 지를 나타낸다. (지역변수, 전역변수 개념을 이해하는 게 더 중요하다.)
※ 지역 변수가 영향을 끼치는 경우
food = '삼겹살' # 전역변수, 어떤 값이 와도 상관없이 함수 호출시 지역 변수가 출력된다.
def food_name():
food = '목살' # 지역변수
print(food) # 함수 내부에서 정의된 print이기 때문에 food_name 함수는 항상 '목살'을 출력
food_name() # 목살
print(food) # 삼겹살
food = '갈매기살'
print(food) # 갈매기살
함수 내부에 print가 있으므로 함수 호출 시 지역변수인 '목살'을 출력하고 print(food)의 경우 전역 변수에 따라 다르게 출력된다.
5. 함수와 인자 그리고 여러 인자를 한꺼번에 전달하기
함수의 정의(3번)에서 '인자'라는 용어가 처음 나왔다.
인자는 어떤 함수에 입력시킬 입력값으로 이해하면 된다. 그리고 입력값을 받을 매개변수(중등 수학에서 흔히 말하는 x라고 이해하자. x에는 1도 입력할 수 있고, -2도 입력할 수 있듯이 어떤 매개변수 x는 다양한 인자를 입력으로 받아 함수를 작동시킬 수 있다)
def eat(food): # food라는 매개변수를 설정
print(food + '먹는다.')
eat('항정살') # 항정살 먹는다. ('항정살'이라는 인자는 food라는 매개변수에 입력되어 eat함수를 실행)
'항정살'이라는 인자는 food라는 매개변수에 입력되어 eat함수를 실행해 '항정살 먹는다.'라는 문장을 출력했다.
하지만 매개변수에 아무것도 안 넣을 때는 '음식을 먹는다.'라고 출력되고 입력값이 있다면 '*** 먹는다.'로 출력하고 싶다면?
def eat(food='음식을'):
print(food + '먹는다.')
eat() # 음식을 먹는다.
eat('치마살') # 치마살 먹는다.
위와 같이 정의 부분의 매개변수에서 기본값을 food='음식을'로 지정해주면 입력값이 없을때는 '음식을 먹는다.'로 오류 없이 출력.
그렇다면 인자가 여러 개를 한꺼번에 전달하는 방법은?
def eat(food1, food2):
print(food1+','+food2+' 먹는다')
eat('부채살', '등심') # 부채살, 등심 먹는다
기본적으로는 위의 구조를 이해하면 된다.
그렇다면 정의 부분에서 매개변수의 기본값을 설정할 수는 없을까?
def eat(food1='파인애플', food2='사과'):
print(food1+','+food2+'먹는다')
eat() # 파인애플,사과먹는다
def eat(food1='파인애플', food2='사과'):
print(food1+','+food2+'먹는다')
eat('가브리살') # 가브리살,사과먹는다
def eat(food1='파인애플', food2='사과'):
print(food1+','+food2+'먹는다')
eat(,'가브리살') # 오류
매개변수의 기본값을 지정하고 eat()만 출력하면 기본값이 출력된다.
첫 번째 인자만 입력해서 eat('가브리살') 실행하면 food1에 '가브리살'이 저장되어 결과값으로 '가브리살, 사과 먹는다' 출력된다.
두 번째 인자만 입력하는 방식을 하고 싶어 eat(,'가브리살)을 실행하면 '파인애플, 가브리살 먹는다'가 출력이 되는 것이 아닌 오류가 뜬다. 즉, 두번째 인자만 바꿔 입력할 수는 없다!
6. 함수와 return(반환)
이번에도 용어부터 보자...
반환?? 뭘 다시 준다는 거지?
도대체 무슨 말인지 모르겠다. 리턴? 반환? 무슨말이야?
다 잊고 이것만 기억해보자!
Return이란!
"어떤 함수 f(x)= x * 3 에 특정 x=2에 해당하는 결과값 2 * 3 = 6이 f(2)라는 변수에 저장되는 것"
"어떤 함수의 결과값을 할당(저장)시켜 함수의 결과값을 인자로 활용할 수 있게 하는 것"
def add(a,b):
return (a+b)
print(add(2,3) + 5) # (2 + 3) + 5 = 10
위 코드를 보면 add(2,3)이라는 함수는 그저 return (a+b)란 기능을 하는데 return덕에 add(2,3)이라는 함수에는 2+3 이라는 값이 저장되었다. 즉, add(2,3) = 5 라는 '변수 = 값' 이라는 형식이 성립된다.
그렇다보니 마지막 print(add(2,3) + 5) 명령어를 실행하면 10이라는 값이 출력된다.
def add_2(a,b):
result = (a * 2) + (b * 3)
return result
print(add(2,3)) # (2 * 2 ) + (3 * 3 ) = 4 + 9 = 13
print(add(2,3) - 5) # 13 - 5 = 8
위의 예시를 보자 add_2라는 함수는 (a * 2) + (b * 3)이라는 값을 return한다.
즉, add(2,3) = (2 * 2 ) + (3 * 3 ) = 4 + 9 = 13 이 성립하며,
add(2,3) - 5 = 13 - 5 = 8이 출력된다.
'교육 > AIFFEL(대전)1기' 카테고리의 다른 글
AIFFEL(대전) [Fundamental] 3-3 파이썬(Python) 자료형 (0) | 2022.02.17 |
---|---|
AIFFEL(대전) [Fundamental] 3-2 파이썬(Python) 제어문(if, while, for) (0) | 2022.02.17 |
[E08] CSR Matrix (0) | 2022.02.17 |
[E08] Explicit Dataset(명시적) VS Implicit Dataset(암묵적) (0) | 2022.02.17 |
[Exploration] E08 영화 추천 시스템 (0) | 2022.02.17 |
- Total
- Today
- Yesterday
- 배달로봇
- AIFFEL교육
- 양정연SLAM
- 아이펠
- 광주AI
- 자율주행로봇
- 멋쟁이사자처럼
- 인공지능교육
- 멘탈관리
- 인공지능 교육
- Python
- 광주인공지능사관학교
- 모두의 연구소
- SLAM공부
- IT
- 모두의연구소
- 자율주행기술
- 대전 인공지능
- AIFFEL후기
- AIFFEL
- ros
- SLAM강의
- 도전
- 서빙로봇
- AIFFEL인공지능과정
- 해커톤
- 실내자율주행
- 광주
- 인공지능
- Slam
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |