본문 바로가기

Python

220103 학습일기

새해 첫 파이썬. 

 

1.

 

def add(a,b):
    return a+b

result = add(1,2)
print("result는 {}".format(result))

result1 = add(a=1,b=2)
print("result1은 {}".format(result1))

result2 = add(b=2,a=1)
print("result2는 {}".format(result2))
result는 3
result1은 3
result2는 3

매개변수를 지정하여 함수를 호출할 수 있다.

result2와 같이 순서에 상관없이 사용할 수 있다는 장점이 있다.

 

 

2.

저번에 따로 찾아봤던 *매개변수를 배울 차례다.

인수가 몇개가 입력될지 모를 때 기존의 매개변수명을 입력하는 자리에 *매개변수 를 써준다.

def 함수이름(*매개변수):
    <수헹할 문장>

 

다음은 입력값들을 모두 더해주는 함수이다.

def add_many(*args):
    result = 0
    for i in args:
        result+=i
    return result

a = add_many(1,2,3,4,5,6,7,8,9,10)
print(a)

#55

매개변수 앞에 *을 붙여주면 입력값들을 모두 모아 튜플로 만들어준다.

def add_many(*args):
    result = 0
    for i in args:
        result+=i
    print(args)
    return result

add_many(1,2,3,4,5,6,7,8,9,10)

#(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

여기서 *args는 임의로 정한 매개변수 이름이고 다른 이름으로 만들어도 상관없다.

※args는 매개변수를 뜻하는 영어 단어 arguments의 약자이며 관례적으로 자주 사용한다.

 

 

3.

2번과 같이 여러개의 입력값들을 처리할 때 함수의 매개변수로 *args만 사용할 수 있는 건 아니다.

아래와 같이 사용할 수도 있다.

def eat(choice,*food):
    if choice=="먹을래":
        stng = ""
        for i in food:
            stng += i +" "
        return(stng + "중에 하나만 골라")
    if choice == "안 먹을래":
        return("그럼 먹지마")

a = eat("먹을래","햄버거","치킨","국밥")
print(a)
b = eat("안 먹을래")
print(b)

 

햄버거 치킨 국밥 중에 하나만 골라 #a
그럼 먹지마 #b

eat 함수는 여러 개의 입력값을 의미하는 *food 매개변수 앞에  choice 매개변수가 추가되어있다.

 

b의 경우와 같이 *매개변수에 해당하는 인자가 입력되지 않아도 정상적으로 작동한다.

그걸 두드러지게 나타내는 코드를 다시 한번 보여주면 아래와 같다.

def add_many(*args):
    result = 0
    for i in args:
        result+=i
    return result
    
b= add_many()
print(b)

#0

 

 

4. key word parameter kwarg

 

keyword parameter를 사용할 때는 매개변수 앞에 별 두개(**)를 붙인다.

입력값이 모두 딕셔너리로 만들어진다.
**kwargs 처럼 매개변수 이름 앞에 **을 붙이면 매개변수 kwargs는 딕셔너리가 되고 모든 key = value 형태의 결괏값이 그 딕셔너리에 저장된다. 

 

def print_kwargs(**kwargs):
    print(kwargs)
    return kwargs

print_kwargs(name="승니",age=21,nationality="kor")
print_kwargs(phone_brnd = "apple")

 

{'name': '승니', 'age': 21, 'nationality': 'kor'}
{'phone_brnd': 'apple'}

사실 여기서 return 을 굳이 한 이유는 kwargs에 누적되어 저장되길 바랬기 때문이다.

그래서 print_kwargs(phone_brnd = "apple") 를 하면 

{'name': '승니', 'age': 21, 'nationality': 'kor', 'phone_brnd': 'apple'} 가 출력될 줄 알았다.

근데 그렇게 되지 않고 {'phone_brnd': 'apple'} 만 출력되었다.

아마도 함수를 호출할 때마다 kwargs가 초기화되어서 그런 것 아닐까?

그래서 return kwargs을 해도 소용이 없었을 것이다.

 

원하는대로 {'name': '승니', 'age': 21, 'nationality': 'kor', 'phone_brnd': 'apple'} 가 출력되게 코드를 다시 짜보자.

a = dict()
def print_kwargs(**kwargs):
    a.update(kwargs)
    print(a)

print_kwargs(name="승니",age=21,nationality="kor")
print_kwargs(phone_brnd = "apple")

 

{'name': '승니', 'age': 21, 'nationality': 'kor'}
{'name': '승니', 'age': 21, 'nationality': 'kor', 'phone_brnd': 'apple'}

 

그리고 신기한게 인자를 입력할 때 key가 문자열이어도 따옴표를 안 붙인다.

붙이면 오히려 오류가 난다.

print_kwargs(name="승니",age=21,nationality="kor")
{'name': '승니', 'age': 21, 'nationality': 'kor'}

둘의 차이가 보이는가?

 

※kwargs는 keyword arguments의 약자이며  args와 마찬가지로 관례적으로 사용한다.

 

 

5. 

iterable의 의미는 member를 하나씩 차례로 반환 가능한 object이다.
iterable의 예로는 sequence type인 list,str,tuple이 대표적이다.
non-sequence type인 dict나 file도 iterable하다고 할 수 있다. dict도 for문을 통해 순차적으로 접근이 가능하기 때문이다.

 

 

6. dictionary 병합

dictionary 에서 +는 지원되지 않는다.

리스트 같은 경우는 +로 뚝딱 병합해줄 수 있지만 dictionary는 그렇게 안된다.

 

따라서 두 dictionary를 병합해주려면 update() 메소드를 사용해주면 된다.

dict11 = {"a":"apple","b":"brand","c":"chrome"}
dict22 = {"d":"doolie","e":"elephant","f":"friday"}

dict11.update(dict22)
print(dict11)

#{'a': 'apple', 'b': 'brand', 'c': 'chrome', 'd': 'doolie', 'e': 'elephant', 'f': 'friday'}

 

 

7. 함수의 결괏값은 언제나 하나.

def add_mul(a,b):
    return a+b, a*b

t = add_mul(1,2)
print(t)

#(3, 2)

이때 add_mul 함수는 튜플 값 하나인 (a+b, a*b)로 돌려준다.

 

만약 이 하나의 튜플 값을 2개의 결괏값처럼 받고 싶다면 아래와 같이 함수를 호출하면 된다.

def add_mul(a,b):
    return a+b, a*b

result1,result2 = add_mul(1,2)
print(result1)
print(result2)

 

3
2

 

 

8.

함수는 return문을 만나는 순간 결괏값을 돌려준 다음 함수를 빠져나가게 된다.

def add_mul(a,b):
    return a+b
    return a*b

따라서 이 경우 두번째 return문인 return a*b는 실행되지 않는다.

첫번째 return문을 실행하면 함수를 빠져나가기 때문이다.

 

visual studio code에서는 알아서 블러처리 해준다.

 

 

9.

8번의 응용으로 특별한 상황일 때 함수를 빠져나가고 싶다면 return을 단독으로 써서 함수를 즉시 빠져나갈 수 있다.

예시는 다음과 같다.

아이엠그라운드에 금지어를 섞었다.

def dont_say_apple(fruit):
    if fruit== "apple":
        return
    print("아이엠그라운드, 나는 {}".format(fruit))

dont_say_apple("apple")

이때 출력값은 없다.

 

def dont_say_apple(fruit):
    if fruit== "apple":
        return
    print("아이엠그라운드, 나는 {}".format(fruit))
    
dont_say_apple("pear")

#아이엠그라운드, 나는 pear

 

 

 

 

[출처]

-iterable

https://bluese05.tistory.com/55

 

python iterable과 iterator의 의미

Python iterable과 iterator의 의미 Iterable (이터러블) iterable에 대한 python docs의 정의를 보자. Iterable An object capable of returning its members one at a time. Examples of iterables include all..

bluese05.tistory.com

 

점프 투 파이썬

https://wikidocs.net/book/1

 

점프 투 파이썬

** 점프 투 파이썬 오프라인 책(개정판) 출간 !! (2019.06) ** * [책 구입 안내](https://wikidocs.net/4321) 이 책은 파이썬 ...

wikidocs.net

 

'Python' 카테고리의 다른 글

220109 학습일기  (0) 2022.01.10
220106 학습일기  (0) 2022.01.06
211231 학습일기  (0) 2021.12.31
211230 학습일기  (0) 2021.12.31
211224 학습일기  (0) 2021.12.26