새해 첫 파이썬.
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' 카테고리의 다른 글
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 |