본문 바로가기

코딩

Spread 및 Iterable Syntax (Python & Javascript)

728x90
반응형

Javascript Spread (확장, 전개) 문법

Javascript 의 Spread 문법은 배열과 객체를 학장(전개) 하는데 사용되는 문법이다. Spread 문법은 세 개의 점(' ... ') 을 사용해 배열과 객체를 풀어서 그 안에 있는 개별 항목들을 다른 배열이나 객체에 복사하거나 합칠 수 있다.

Spread 문법은 기존 배열아니 객체를 변경하지 않고 새로운 배열이나 객체를 생성하는데 사용된다. 이 불변성(immutability) 을 이용해 배열이나 객체의 병합 및 복사에 매우 유용한 기능이다.

 

다음은 배열(array) 데이터의 Javascript 와 Python 의 코딩 사례다.

 

```Javascript 

예1)
const arrary1 = [ 1, 2, 3 ]

function sum(x, y, z) {
    return x + y + z;
}
sum(...array1)  -결과> ' 6 '

예2)
const array2 = [ 'hello', ...array1 ]
console.log(array2)
-결과> [ 'hello', 1, 2, 3 ]

 

Python 의 동일한 기능으로 별 기호 한 개를 사용 ' * ' 한다. 

```Python

예1)
array1 = [ 1, 2, 3 ]

def sum(x, y, z):
    return x + y + z

sum(*array1)    -결과> ' 6 '

예2)
array2 = [ 'hello', *array1 ]
print(array2)
-결과>  [ 'hello', 1, 2, 3 ]

 

다음은 객체(object) 의 Javascript 와 Python 의 코딩 사례다.

 

```Javascript 

const obj1 = { x: 1, y: 2 };
const obj2 = { ...obj1, z: 3 };

console.log(obj2);
-출력> { x: 1, y: 2, z: 3 }

 

Python 의 동일한 기능으로 별 기호 두 개를 사용 ' ** ' 한다.

```Python

obj1 = { x:1, y:2}
obj2 = { **obj1, 'z': 3 }
print(obj2)
-결과> {'x': 1, 'y': 2, 'z': 3}

 

Python Iterator (순회, 반복) 객체

Python 의 Iterator 는 순회 가능한 객체의 항목에 순차적으로 접근해 값을 차례로 꺼내주는 객체이다. 이터레이터는 `__iter__()` 와 `__next__()` 라는 두 개의 특수한 메서드를 구현한 것이다.

 

대표적인 순회 가능한 객체에는 list, dict, set, str, bytes, tuple 및 range 가 있다.  이 이터러블한 객체들은 내부적으로 이터레이터를 가지고 있기 때문에 `for` 루프를 사용해 간단하게 순회할 수 있다.

 

`__iter__()` 메서드 : 이 메서드로 구현된 객체는 `iter()` 함수로 호출할 수 있다.

`__next__()` 메서드 : 이 메서드로 구현된 객체는 `next()` 함수로 호출할 수 있다. 더 이상 반환할 항목이 없는 경우 `StopIteration` 예외를 발생시킨다.

 

```Python Scripts

>>> numbers = [1,2,5]
>>> iter_number = iter(numbers)
>>> next(iter_number) -결과> `1`
>>> next(iter_number) -결과> `2`
>>> next(iter_number) -결과> `5`
>>> next(iter_number) -결과> `StopIteration`

Generator (순회 생성) 함수

파이썬에서는 `yield`를 사용한 값 반환(return) 으로 쉽게 사용자의 제너레이터 함수를 만들 수 있다.

파이썬에서는 `generator` 함수를 사용해서 쉽게 이터레이터를 만들 수 있다. 제너레이터 함수는 `return` 대신 `yield` 를 사용해 값을 반환한다. 

def simple_generator():
    yield 1
    yield 2
    yield 3

gen = simple_generator()

next(get) -result> 1
next(get) -result> 2
next(get) -result> 3

 

** python 에서 iterable 하지 않은 (순회 못하는; uniterable) 객체는?

숫자나 불린(Boolean) 값은 순회성이 없다.

>>> iter(33)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>> iter(True)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'bool' object is not iterable

스트링은 순회성이 있다.

>>> str_iter = iter("hello")
>>> next(str_iter)
'h'
>>> next(str_iter)
'e'
>>> next(str_iter)
'l'
728x90
반응형