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