variable length argument(가변길이 인자)
- 전달되는 파라미터의 개수가 고정적이지 않은 경우 사용 eg) print함수, format함수
- *args : 파라미터를 튜플의 형태로 전달, **kwargs : 파라미터를 딕셔너리 형태로 전달(네임드 파라미터)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | # 파라미터 이름 앞에 *이 붙어 가변인수로 정의 def exer(*args): print 'formal arg:', args, type(args) for args in args: print 'another arf:', args exer(1, 'one', 'two') print '-' * 50 exer(1, 'two') print '-' * 50 exer(1) print '-' * 50 exer() print '-' * 50 <<<<< 실행결과 >>>>> formal arg: (1, 'one', 'two') <type 'tuple'> another arf: 1 another arf: one another arf: two -------------------------------------------------- formal arg: (1, 'two') <type 'tuple'> another arf: 1 another arf: two -------------------------------------------------- formal arg: (1,) <type 'tuple'> another arf: 1 -------------------------------------------------- formal arg: () <type 'tuple'> -------------------------------------------------- | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # 위 함수와의 차이점은? # 두개의 파라미터 모두 일반 파라미터 이기 때문에 2개이 인자만 전달 할 수 있음 def test_tuple_args(farg, tuple_args): print "formal arg:", farg print type(tuple_args) for arg in tuple_args: print "another arg:", arg test_tuple_args(1, ("two", 3)) print '-' * 30 #test_tuple_args(1) 인자의 개수가 맞지 않아 에러 발생 test_tuple_args(1, "two", 3) print '-' * 30 <<<<< 실행결과 >>>>> formal arg: 1 <type 'tuple'> another arg: two another arg: 3 ------------------------------ | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # 키워드 파라미터, 딕셔너리 타입을 가짐 # 키워드 파라미터 형태로 전달해야함 def test_var_kwargs(**kwargs): print type(kwargs) for key in kwargs: print "another keyword arg: %s: %s" % (key, kwargs[key]) test_var_kwargs(two = "two", three = 'three') ## 타입은 dict <<<<< 실행결과 >>>>> <type 'dict'> another keyword arg: two: two another keyword arg: three: three | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | # 일반적인 경우, 아래와 같이 정의 하여 사용 # kwags가 뒤에 위치하는 이유는? def test_var_args(*args, **kwargs): print "formal arg:", args print type(args) print for arg in args: print "another arg:", arg for kw in kwargs: print kw, kwargs[kw] test_var_args(1, "two", 'three', a = 'aa', b = 'bb') <<<<< 실행결과 >>>>> formal arg: (1, 'two', 'three') <type 'tuple'> another arg: 1 another arg: two another arg: three a aa b bb | cs |
### 고정길이 함수에 *, **사용
- 튜플 혹은 딕셔너리를 가변길이 인자로 변경하여 전달
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | def test_var_args_call(arg1, arg2, arg3): print "arg1:", arg1 print "arg2:", arg2 print "arg3:", arg3 args = ("two", 3, 1) test_var_args_call(*args) test_var_args_call(args) <<<<< 실행결과 >>>>> arg1: two arg2: 3 arg3: 1 --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-98-91853c6ade13> in <module>() 6 args = ("two", 3, 1) 7 test_var_args_call(*args) ----> 8 test_var_args_call(args) TypeError: test_var_args_call() takes exactly 3 arguments (1 given) | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 | def test_var_args_call(arg1, arg2, arg3): print "arg1:", arg1 print "arg2:", arg2 print "arg3:", arg3 kwargs = {"arg3": 3, "arg2": "two"} test_var_args_call(1, **kwargs) <<<<< 실행결과 >>>>> arg1: 1 arg2: two arg3: 3 | cs |
### 가변길이 함수의 대표적인 예) 문자열 포맷 함수
- 여러가지 값과 포맷을 이용하여 문자열을 정의할 수 있는 함수
- {} placeholder를 문자열 내에 위치 시킨 후, 해당 위치에 format함수로 전달된 값으로 대체하여 문자열 생성
- 포맷 구성 참고 : https://pyformat.info/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | str1 = 'Hi my name is {} and the weather is {}'.format('younghyo', 100) print str1 aa = 'hello {} world {}'.format('mike', 'pop') print aa a = 'hello world {}'.format('aaron') print a b = 'Hello {}! my name is {} {}'.format(100, 'aaron', 200) print b # 순서 명시 가능 # 순서가 명시 되지 않으면 왼쪽부터 0부터 시작 b = 'Hello {1}! my name is {0}'.format('bryan', 'aaron') ## arron이 먼저 bryan이 그 후에 나옴 print b c = 'Hello {aa}! my name is {bb}'.format(aa = 'abc', bb = 'ddd') print c # 정수 콤마로 표시 d = 'Wow it is a big number! {:,}'.format(2 ** 30) print d # 숫자 precision 5자리로 제한 d = 'Wow it is a big number! {:.5}'.format(3.14159262840725) print d # .이후의 precision 5자리로 제한 d = 'Wow it is a big number! {:.5f}'.format(3.14159262840725) print d # 최소 7자리는 필요 .이후 precision 5자리로 제한 d = 'Wow it is a big number! {:7.5f}'.format(1213.14159262840725) print d # 최소 7자리는 필요 .이후 precision 1자리로 제한 d = 'Wow it is a big number! {:7.1f}'.format(1213.14159262840725) print d <<<<< 실행결과 >>>>> Hi my name is younghyo and the weather is 100 hello mike world pop hello world aaron Hello 100! my name is aaron 200 Hello aaron! my name is bryan Hello abc! my name is ddd Wow it is a big number! 1,073,741,824 Wow it is a big number! 3.1416 Wow it is a big number! 3.14159 Wow it is a big number! 1213.14159 Wow it is a big number! 1213.1 | cs |
반응형
'Python > Python Basic' 카테고리의 다른 글
Day5) 2. filter, map, reduce (0) | 2017.05.25 |
---|---|
Day5) 1. Lambda 함수 (0) | 2017.05.25 |
Day4) 4. 1st class citizen(일등 시민) (0) | 2017.05.25 |
Day4) 2. multiple return(복수 값 반환) & variable scope(변수의 범위) (0) | 2017.05.25 |
Day4) 1.Default parameter(기본인자) & keyword parameter (0) | 2017.05.24 |