TIL 2020.03.31.화

yaeji120·2020년 3월 31일
0

wecode

목록 보기
64/80
  • Python 정리4

Dictionary

Dictionary의 기본적인 문법은 아래와 같습니다.

my_dic = {
	"key1" : "value1",
    	"key2" : "value2"
}

Dictionary에서 element를 읽어 들이는 방법은 아래와 같습니다.

my_dic["key1"]

Dictionary는 key값을 사용해서 수정하고 삭제할 수 있습니다.

For Loops

list의 총 길이를 사전에 알 수 없다면 if구문만으로는 해결할 수 없는 문제들이 생기는데
그럴 때 사용하는 게 for구문입니다.
For문은 list뿐만아니라 tuple, set 등 다른 자료구조와도 사용할 수 있습니다.

for element in list:
    do_something_with_element

For문에서는 list가 가지고 있는 요소의 수 만큼 for 구문에 속해있는 코드를 실행합니다.
이걸 iteration 이라고 합니다.
굳이 끝까지 for구문을 진행할 필요 없이 중간에서 멈추고 싶을때는 break문을 사용하면 됩니다.
For 구문에서 break문이 실행되면 다음 interation으로 넘어가지 않고
For 구문을 빠져 나오게 됩니다.

만일 break처럼 for 구문에서 완전히 빠져 나오고 싶지는 않지만
다음 요소, 즉 다음 interation으로 넘어가고 싶을때는 continue문을 사용하면 됩니다.

Input으로 주어진 리스트에서
오직 한번만 나타나는 값 (unique value)을 가지고 있는 요소를 출력할 때

my_list = [s for s in input().split()]

result = []
for i in range(0, len(my_list)):
  if my_list[i] in result:
    result.remove(my_list[i])
  else:
    result.append(my_list[i])
print(result)

While Loops

for 구문은 list나 set, dictionary 등의 data structure 등을 기반으로
코드블록을 반복 실행합니다.
하지만 가끔은 list같은 data structure 기반이 아니더라도
코드블록을 반복해야 할 때가 있는데 이럴 때 while 구문이 사용됩니다.
while 구문은 특정 조건문이 True일동안 코드블록을 반복 실행 합니다.

while <조건문>:     
    <수행할 문장1>     
    <수행할 문장2>     
    <수행할 문장3>     
    ...
    <수행할 문장N>

For문과 마찬가지로 while문도 break과 continue가 있습니다.
For문과 동일하게 break는 while문을 강제종료하고
continue는 다음 iteration으로 넘어갑니다.

python의 while문은 else문이 추가 될 수 있는데 if문의 else문과 유사합니다.
If문의 else문은 if문의 조건문이 False이면 실행되는데
While문의 else문도 while의 조건문이 False면 실행됩니다.

while <조건문>:
    <수행할 문장1>     
    <수행할 문장2>     
    <수행할 문장3>     
    ...
    <수행할 문장N> 
else:
    <while문이 종료된  수행할 문장1>     
    <while문이 종료된  수행할 문장2>     
    <while문이 종료된  수행할 문장3>     
    ...
    <while문이 종료된  수행할 문장N>

주어진 parameter값을 나눌 수 있 최소의 양의 정수를 return (1제외)

def find_smallest_integer_divisor(numb):
  n = 2
  while numb%n != 0:
    n += 1
  return n
find_smallest_integer_divisor(15)

Looping Dictionary

def get_occurrence_count(my_list):
  dic = {}
  for i in range(0, len(my_list)):
    if my_list[i] in dic:
      dic[my_list[i]] += 1
    else:
      dic[my_list[i]] = 1
  return dic
get_occurrence_count(["one", 2, 3, 2, "one"])

  • Redux 정리3 (wecode 멘토 손승현님 영상)

actioncreator (action 정보를 담은 객체를 return 합니다.)
-> action은 rootReducer로 가고
-> 각 reducer들에게 뿌려집니다.
-> reducer들이 action의 type을 검사한 후 원하는 변화를 주고
-> 새로운 state를 return 합니다.
-> state가 store로 이동하고
-> store에서 그 값을 보여줘야하는 component에게 값을 뿌려줍니다.

폴더구조는

store 폴더 > actions 폴더 > index.js 파일
store 폴더 > reducers 폴더 > index.js 파일

action 생성

export const actionName = (a) => {
	return{
    		type: "ACTION_NAME",
      	 	payload: a
    }
}

payload에 내가 지정한 type에 어떤 것을 추가할 것인지 명시합니다.
action을 호출할 때 담아서 보내는 정보 객체입니다.

action 함수가 호출이 되면 dispatch가 되는데
dispatch돼서 받아지는 곳이 reducer 입니다.
reducer에서 로직을 처리합니다.

reducer 생성

import { combineReducer } from "redux";

const initialState = [초기값]

const reducerName = (state=initialState, action) => {
	switch (action.type){
    		case "ACTION_NAME":
        		return [...state, action.payload];
        	default (필수):
        		return state;
    }
}

export default combineReducer({ reducerName });

최상위 index.js에서 사용합니다.

최상위 index.js

App이 Redux를 활용해 전역상태관리가 가능하게끔 해줘야 합니다.

import { Provider } from "react-redux";
import { createStore } from "redux";
import rootReducer from "./store/reducers/index.js";

const store = createStore(rootReducer);

ReactDOM.render(
	<Provider store={ store }>
    		<App />
   	 </Provider>,
    document.getElementById("root")
);

action 발생

action을 발생시킬 component로 이동 후 작성.

Q.
action을 발생시킬 때
2번째 인자로 action이름을 넣기위해서
1번째 인자로 null을 사용하신 이유가 있을까요?

A.
connect 함수의 첫번째 인자는
store객체의 상태를 해당 컴포넌트의 props로 내려받기 위한 메소드가 들어가고
connect 함수의 두번째 인자로는
액션을 발생시켜 rootReducer로 dispatch를 처리하기 위한 메소드가 들어갑니다.
액션만 발생시키면 되는 component에서
굳이 상태를 내려받아 다시 compoment가 렌더링 하게 만들 이유가 없기때문에
첫번째 인자를 null로 두고 두번째 인자에만 액션 생성함수를 넣어준거에요.
해당 컴포넌트에서 어떤일을 하고 싶은지에 따라 달라지는데
mapStateToProps가 필요없는 compoenent에서는
첫번째인자를 null 을 주시면 됩니다.

import { connect } from "react-redux";
import { actionName } from "./store/actions";

const ComponentName = ({ actionName }) => {
	const onClick = () => {
    		actionName()
    }
	return(
    	<>
        	<button onClick={onClick} />
        </>
    );
}

export default connect(null, { actionName })(ComponentName);

위의 component에서 action을 발생시켰고
그 때마다 반응해서 나오는 새로운 상태값의 component로 이동 후 작성.
(store에서 상태를 받아줘야하는 component)
redux store에서 상태값을 props로 넘겨줄 때 아래처럼 작성해줘야 합니다.

import { connect } from "react-redux";

const ComponentName = (reducerName) => {
	return(<></>);
}

const mapStateToProps = state => {
	return {
    		reducerName: state.reducerName
    };
};

export default connect(mapStateToProps)(ComponentName);

Q.
만약에 input에 입력해서 store로 보낸 값을 다른 component에서 받고싶으면
첫번째 인자에 mapStateToProps 메소드가 인자로 들어가야 하는건가요?

A.
네 받고싶은 component에서는 그 메소드가 선언되어 있어야해요!

profile
다양한 사람들과 소통하며 꾸준히 성장하고 밝은 에너지를 주는 개발자

0개의 댓글