Python/개념정리
python_9일차
xowoony
2022. 8. 10. 19:57
## 디폴트 매개변수 (매개변수에 초깃값 / 기본 매개변수라고도 함) ##
def info(name, age, address='비공개'): # 함수정의
# address=비공개처럼 이미 정해진걸 디폴트 매개변수라 함
# 저 비공개처럼 초깃값(기본값)을 주는 것을 디폴트 매개변수라고 함
print('이름 :', name)
print('나이 :', age)
print('주소 :', address)
print()
info('네오', 25) # 함수 호출
info('프로도', 25, '제주도')
============실행결과===============
이름 : 네오
나이 : 25
주소 : 비공개
이름 : 프로도
나이 : 25
주소 : 제주도
## 키워드 인수 : 각각의 매개변수가 어떤 용도인지 알기 어려울 때 사용 ##
def info(name, age, address): # 함수정의
# address=비공개처럼 이미 정해진걸 디폴트 매개변수라 함
# 저 비공개처럼 초깃값(기본값)을 주는 것을 디폴트 매개변수라고 함
print('이름 :', name)
print('나이 :', age)
print('주소 :', address)
print()
info('라이언', 20, '대구') # 일반적인 호출방식 #어느게 이름이고 나이이고 주소인지 모를때
info(name='어피치', age=30, address='부산') # 키워드 인수(키워드로 지정)
info(age=40, address='서울', name='무지') # 순서를 다르게 지정해도 된다 # 추천하진 않는 방법임
============실행결과===============
이름 : 라이언
나이 : 20
주소 : 대구
이름 : 어피치
나이 : 30
주소 : 부산
이름 : 무지
나이 : 40
주소 : 서울
## 가변 매개변수 : 매개변수(입력값)의 갯수를 정확히 모를 때 ##
<형식>
def 함수이름(*매개변수명): # 함수 정의 # 개수가 여러개 들어오겠다는 표시(개수가 미정)
수행할 코드
함수이름(필요한 인수만큼 입력) # 함수 호출
## 191page)
def adder(*args): # 함수 정의
print('{}의 합은 {}입니다.'.format(args, sum(args)))
adder(1, 2) # 함수 호출
adder(1, 2, 3)
adder(1, 2, 3, 4)
adder(1, 2, 3, 4, 5)
============실행결과===============
(1, 2)의 합은 3입니다.
(1, 2, 3)의 합은 6입니다.
(1, 2, 3, 4)의 합은 10입니다.
(1, 2, 3, 4, 5)의 합은 15입니다.
## ex)
def add_mul(choice, *args): # 함수 정의(가변 매개변수(args) 를 맨 뒤로)
if choice == 'add': # choice 매개변수의 값이 add라면
answer = 0 # 합계를 구할 변수 초깃값을 0으로 한다.
for i in args: # 가변 매개변수 args의 갯수 만큼 반복을 함
answer = answer + i # answer+=i
elif choice == 'mul': # choice 매개변수의 값이 mul 이라면
answer = 1 # 초깃값을 1로 한다.(0으로 하면 0이 됨)
for i in args:
answer = answer * i # answer *= i
return answer # 결과로 나온 answer을 반환한다. #결과가 나오면 이걸 받아서 특정한 변수에 받아서 쓸 수 있음
a = add_mul('add', 1, 2, 3) #add는 choice이고 1, 2, 3은 args가 됨 # 1+2+3하란 뜻
print(a)
b = add_mul('mul', 1, 2, 3, 4) # 1*2*3*4 하란 뜻
print(b)
============실행결과===============
6
24
## 지역변수 / 전역변수 ##
지역변수 : 한정된 지역(함수)에서 사용
전역변수 : 프로그램 전체에서 사용 #함수 밖에 있음
예약어 global
## ex) 전역변수는 여러개의 함수들이 같이 쓰는것, 지역변수는 뱃속 안에 있고 그 함수가 끝나면 끝나버림
a = 200 #아직 지역변수인지 전역변수인지 모름 근데 밑에 def func() 써줘버리면 전역변수가 됨
#전역변수(프로그램 전체에서 사용)
def func1(): #함수 정의
a = 10 # 지역변수 # 얘는 func1() 안에 있기때문에 이 함수 안에서만 사용하는 지역변수가 됨
print('func1함수에서의 a의 값 :', a)
def func2(): # 함수 정의
print('func2함수에서의 a의 값 :', a) #안에 a가 없으므로 밖에 나가서 보면 200이 있음
func1() #함수호출 - 얘는 뱃속에 10이 있어서 그걸로 출력
func2() #함수호출 - 얘는 자기 뱃속을 보면 a 가 없기때문에 전체를 보니 a=200임 그래서 200이 출력
============실행결과===============
func1함수에서의 a의 값 : 10
func2함수에서의 a의 값 : 200
## ex) 전역변수의 값을 변경해야 하는 경우/ 함수 안에서 밖에있는 전역변수 변경시
a = 0 # 전역변수
def f(): # 함수 정의
global a # 전역변수 a를 가리킨다.
a = 10 # 전역변수 a의 값을 10으로 변경한다. 얘랑 위의 global a는 한 세트임
print('함수 호출 전 a :', a) # 0이 나옴
f() # 함수 호출
print('함수 호출 후 a :', a) #10으로 바뀐값이 나옴
============실행결과===============
함수 호출 전 a : 0
함수 호출 후 a : 10
## 195page) ##
def coffee_machine(money, pick): # 함수 정의 / money 는 돈, pick은 내가 선택한 메뉴
print('{}원에 {}를 선택하셨습니다.'.format(money, pick))
menu ={
'아메리카노':1000,
'카페라떼':1500,
'카푸치노':2000
}
if pick not in menu: #ex) pick은 마끼아또 라 했으면, 메뉴에 없기때문에 (만약 메뉴에 없는 메뉴일경우)
print('{}는 판매하지 않습니다.'.format(pick))
return money, '없는 메뉴' # 돈을 다시 돌려준다. 없는 메뉴라는 글자를 반환한다.
elif menu[pick] > money: # 해당 음료의 금액이 부족한 경우
print('{}는 {}원입니다.'.format(pick, menu[pick]))
return money, '금액 부족'
else: # 정상적인 경우
return money-menu[pick], pick # 음료값을 제외한 나머지 금액과 음료이름을 반환한다.
order = input('커피를 선택하세요. (아메리카노, 카페라떼, 카푸치노) >>> ') #매개변수 pick에 들어감
pay = int(input('얼마를 내시나요? >>> ')) #매개변수 money에 들어간다.
change, coffee = coffee_machine(pay, order) # 반환값이 2개 이므로 결과변수도 2개/ 결과가change와 coffee에 담김
print('잔돈 {}원, 커피 {}'.format(change, coffee))
============실행결과===============
커피를 선택하세요. (아메리카노, 카페라떼, 카푸치노) >>> 마끼아또
얼마를 내시나요? >>> 10000
10000원에 마끼아또를 선택하셨습니다.
마끼아또는 판매하지 않습니다.
잔돈 10000원, 커피 없는 메뉴
========================== RESTART: C:\Python_저녁\실습.py =========================
============실행결과===============
커피를 선택하세요. (아메리카노, 카페라떼, 카푸치노) >>> 아메라키노
얼마를 내시나요? >>> 500
500원에 아메라키노를 선택하셨습니다.
아메라키노는 판매하지 않습니다.
잔돈 500원, 커피 없는 메뉴
========================== RESTART: C:\Python_저녁\실습.py =========================
============실행결과===============
커피를 선택하세요. (아메리카노, 카페라떼, 카푸치노) >>> 카페라떼
얼마를 내시나요? >>> 2000
2000원에 카페라떼를 선택하셨습니다.
잔돈 500원, 커피 카페라떼
========================== RESTART: C:\Python_저녁\실습.py =========================
============실행결과===============
커피를 선택하세요. (아메리카노, 카페라떼, 카푸치노) >>> 아메리카노
얼마를 내시나요? >>> 500
500원에 아메리카노를 선택하셨습니다.
아메리카노는 1000원입니다.
잔돈 500원, 커피 금액 부족
## 모듈과 import ##
# 모듈을 불러와서 사용하기 #
<형식>
import 모듈이름 as 별칭 --> as별칭은 생략 가능
또는
from 모듈이름 import 모듈함수
--> 모듈이름을 생략하고 함수만 쓰고 싶을 때
from 모듈이름 import *
--> 모듈 안에 있는 모든 함수를 당겨쓸 때 모두의 의미를 가진 *를 사용
## ex) import 방식
import m # m 이라는 모듈(파이썬 파일)을 불러온다.
print(m.add(1, 2)) # m 모듈에 있는 add함수를 호출
print(m.sub(2, 1))
print(m.mul(1, 2))
print(m.div(2, 1))
============실행결과===============
3
1
2
2.0
## ex) from 방식 (1)
from m import add, sub # m 모듈에 있는 add, sub 함수를 가져온다.
print(add(1, 2)) # from으로 가져올 때는 모듈명이 필요없다!
print(sub(2, 1)) # m 모듈에 있는 sub 함수를 호출한 결과가 출력
============실행결과===============
3
1
## ex) from 방식 (2)
from m import * # m모듈 안에 있는 모든 함수를 가져온다.
x = int(input('x를 입력하세요 : '))
y = int(input('y를 입력하세요 : '))
n1 = add(x, y) # m 모듈 안에 있는 함수 add의 결과 값을 n1에 담았다.
n2 = sub(x, y)
n3 = mul(x, y)
n4 = div(x, y)
print('x + y =', n1)
print('x - y =', n2)
print('x * y =', n3)
print('x / y =', n4)
print('n1 + n2 =', add(n1, n2)) #리턴한 결과값 n1, n2가 다시 매개변수로 들어간다.
print('n3 - n4 =', sub(n3, n4))
============실행결과===============
x를 입력하세요 : 5
y를 입력하세요 : 3
x + y = 8
x - y = 2
x * y = 15
x / y = 1.6666666666666667
n1 + n2 = 10
n3 - n4 = 13.333333333333334
## 패키지(폴더)를 만들어서 관리 ##
<형식>
import 패키지명.모듈이름 as 별칭
또는
from 패키지명.모듈이름 import 모듈함수
# ex)
from pkg.m import add # pkg폴더 안 m모듈에 있는 add함수를 불러온다라는 뜻
print(add(1, 2))
## __name__ ## (너무 어려우면 패스 해도 됨)
현재 모듈의 이름을 담고 있는 내장 변수
원래 파일에서 실행하면 __name__ 에 '__main__' 이 할당됨
모듈로 참조하고 있는 다른 파일에서 실행하면
__name__ 에 해당 모듈 명이 할당됨
## ex)
from m import *
print(mul(1, 2))
print(div(2, 1))
============실행결과===============
m
2
2.0