일자: 2021.12.28
함수란 ?
수학 : 입력값에 대해 출력값을 가지는 관계
프로그래밍 : 불려진 시점에 특정한 작업을 수행 / 입/출력값은 있을수도 있고 없을수도 있음.
() 안에 숫자나, 소수점 수로 그대로 표기
print(23) / print(34.5)
() 안에 기입 시, 반드시 ''나 ""로 감싸서 표기
print("hello world")
print('Goodbye world')
숫자를 따옴표로 감싸면 그 숫자는 문자로 타입이 바뀐다.
문자열은 더할 순 있지만 뺄 순 없다.
print('hello' + 'world') => hello
print('hello' - 'world') => 오류!
변수는 변수명 = 변수값 의 형태로 이루어짐.
변수 이름과 값은 내가 정의 해 줄 수 있다.
변수명을 재사용 하게 되면 제일 마지막 줄의 값을 나타낸다.
name = '아무개'
name = '지우개'
print(name)
def say_hi():
print('안녕!')
스코프 : 어느 한 곳에서 정의된 변수가 일 할 수 있는..? 유효한 범위.
지역 스코프 (local scope)
def apple():
phone = '13max'
print(apple)
※ 변수 phone 는 함수 안에서만 허용되는 변수이므로 함수 외 지역에선 불러낼 수 없음.
→ 따라서 변수 phone 은 지역 스코프.
smart_phone = 'galaxy note 10'
def samsung():
print(smart_phone)
samsung()
print(smart_phone)
※ 변수 smart_phone 은 함수에서도 쓸 수 있는 변수이며, 함수 밖에서도 사용 가능한 변수.
→ 따라서 변수 smart_phone 은 전역 스코프.
def want(thing):
print('나는',thing,'을(를) 가지고 싶어요..!')
want('많은 돈')
want('번듯한 직장')
→ 위 코드에서 thing 이 매개변수가 되고, '많은 돈' 이 인자가 된다.
※ 이렇듯, 함수를 실행할 때 입력값을 전달해 주는 변수를 매개변수라 한다.
매개 변수를 정해주면 함수 실행시 꼭 매개변수를 넣어줘야한다. 안그럼? 오류난다 ㅎ
def want(thing1,thing2):
print('나는',thing1,'랑',thing2,'을(를) 가지고 싶어요..!')
want('많은 돈','번듯한 직장')
def want(thing1,thing2):
print('나는',thing1,'랑',thing2,'을(를) 가지고 싶어요..!')
want(thing2 = '많은 돈',thing1 ='번듯한 직장')
def fruit (n1,n2 = 'else'):
print(n1+','+ n2 + ' 맛있음..!')
fruit('딸기','사과')
>>딸기,사과 맛있음..!
위와 같이 해 주기 위해선, 기본값이 있는 인자들이 기본값이 없는 필수 인자 뒤에 와야한다. 이게 무슨말이냐.. 돌려보고 알았다..# 기본값이 있는 인자가 없는 인자보다 먼저 왔을 경우
def wrong_fruit (n3 = 'noway', n4):
print(n3+' 랑 '+ n4 + ' 상했음..!!')
wrong_fruit('딸기','사과')
이 경우, 기본값이 있는 인자가 먼저 왔다고 문법 오류(SyntaxError
)가 떠버렸다. 그래서 기본값이 없는 인자를 먼저 선언 해 주었더니. # 기본값이 없는 인자가 먼저 왔을 경우
def wrong_fruit3 (n5, n6 = 'noway'):
print(n5+' 랑 '+ n6 + ' 상했음..!!')
wrong_fruit('딸기','사과')
>>딸기,사과 맛있음..!
원하는 대로 나왔다..! 즉, 입력값을 여러개 지정해 줄 때, 기본값을 미리 지정 해 주고싶다면 둘 다 하던가
지정 하지 않을 값만 앞에, 지정 할 값은 뒤에 적어주자..!
파이썬이 입력한 인자를 앞에 넣을지 뒤에 넣을지 불분명 해서 생기는 오류라 하니깐..
def num (no1,no2):
print(no1 + no2)
num이란 함수는 no1 과 no2 값을 받으면, no1과 no2를 합쳐서 출력해준다.num(12,34)
>>46
값이 46이라 나왔으니, 여기에 숫자를 더해서 출력하면 되겠지! 하고 생각해서 print(num(12,34) + 10)
>>TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
이라 입력 한 후 출력하면 에러가 뜬다. num(12,34) 는 NoneType 이고 10이 int 인데, 둘은 더할 수 없단 얘기 같다.. 즉 함수의 결과를 명시하지 않아서 뜬 문제라 한다. 🤔 진짜 많이 해봤을법 한 문제라 정리하지않곤 넘어갈 수 없었다.. 그래서 꼭 더해주고 싶다면 함수의 값을 return으로 반환해서 명시해 줘야 한다...! def num (no1,no2):
print(no1 + no2) #출력도 하고
return no1 + no2 #return 도 하고~
print(num(12,34) + 10)
>>46
>>56
이때, print는 num(12,34) 를 먼저 실행하여 print를 하여 46이 출력되고, return 되어 함수의 값을 명시한 후, + 10과 더해져서 56이 출력된다. 수학식에서 괄호 안의 계산식이 먼저 되듯, 파이썬에서도 괄호안의 함수가 먼저 실행된다 한다. 아는걸 하나씩 대입해서 결과값으로 치환..? 🤔def print_two(word1, word2):
print(word1)
print(word2)
def print_and_return(word1, word2, word3):
print_two(word3, word2)
return word1
print_two('A', print_and_return('B', 'C', 'D'))
괄호 안의 함수가 먼저 실행되어야 하기 때문에 후열의 함수부터 실행.
print_and_return 내에서 w1 = B , w2 = C , w3 = D
그 다음줄인 print_two(word3, word2) 가 실행되기 때문에 D,C 순으로 출력
return word1 로 B 값이 print_two('A', 함수자리인 후열에 명시됨. )
고로, A B 순으로 출력.
토탈 → D C A B 순으로 출력된다.
아 하나하나 풀어보니 알것같다
📗 비교 연산자
연산자 | 설명 |
---|---|
a == b | a 와 b 는 같다. (값만 평가해서 참인지 거짓인지 판단) / 대입 연산자(=)랑 헷갈리지 말것. |
a ! = b | a 와 b 는 같지 않다. |
a < b | a 는 b 보다 작다. (미만) |
a > b | a 는 b 보다 크다. (초과) |
a < = b | a 는 b 보다 작거나 같다. (이하) |
a > = b | a 는 b 보다 크거나 같다. (이상) |
📙 논리 연산자
연산자 | 설명 |
---|---|
a and b | a 그리고 b ( 두 조건이 모두 참) |
a or b | a 또는 b (두 조건 중 하나라도 참) |
not | 참이면 거짓, 거짓이면 참 (조건 뒤집기) |
📘 대입 연산자
연산자 | 사용 예 | 설명 |
---|---|---|
+= | a +=3 | a = a + 3 과 동일 |
-= | a -= 3 | a = a - 3 과 동일 |
*= | a *= 3 | a = a * 3 과 동일 |
/= | a /= 3 | a = a / 3 과 동일 (나누기) |
//= | a //= 3 | a = a // 3 과 동일 ( 몫 만) |
%= | a %= 3 | a = a % 3 과 동일 (나머지 만) |
**= | a **= 3 | a = a ** 3 과 동일 (제곱 ) |
오늘은 잘 몰라서 보는것 마다 다 정리하려 들었지만,
내가 모르고, 정말 중요한 부분만 체크하면 된다 하셔서.. 내일은 진도가 좀 나가지 않을까..?
되도록 밀리지 말고, 마감에 쫒기며 허덕이는 교육 생활은 되지 않아야한다... 정말루..
그래도 하나하나 따져 보면서 몰랐던 부분을 깨우쳐 나간다는건 너무 재밌고 즐겁다..
와..... 근데 마크다운 기능 오늘 첨 알았는데 텍스트로 이렇게 표시할 수 있단 점이 너무나도 놀라웠다. 사실 휴대폰의 베어 라는 어플로 종종 생각을 정리하거나, 울분(?)을 풀곤 했었는데, 비슷한 기능 (## 으로 제목 정한다거나, *을 입력하면 리스트가 된다거나 등) 이 있어서 이게 마크다운이구나 싶었다.. 정말 뭐든 내가 해 보고 배워나가는 과정은 정말정말 재밌다..
찾아가면서 배웠던 마크다운 이지만, 익숙해지면 좀 더 능숙하구 블로그 오래 하는 사람 처럼 적을 수 있게 되지 않을까?