함수 선언식과 함수 표현식의 차이점 1. 문법 함수 선언문 주요 코드 흐름 중간에 독자적인 구문 형태로 존재한다. function add(a, b) { return a + b; } 함수 표현식 표현식이나 구문 구성(syntax constract) 내부에 생성되며, 할당연산자(=)를 통해 생성된다. const exp = function add(a, b) { return a + b; } 2. 자바스크립트 엔진이 언제 함수를 생성하는지에 따른 차이 함수 선언문 함수 선언문이 정의되기 전의 코드에도 함수를 호출할 수 있다. console.log(add(1, 2)) // 3이 출력된다. function add(a, b) { return a + b; } 함수 표현식 실제 흐름이 해당 함수에 도달했을 때 함수가 생성..
자바스크립트에서 함수는 특별한 종류의 값으로 취급된다. (어떠한 구조로 취급하지 않는다.) 따라서 값이 취할 수 있는 행동들 대부분을 할 수 있다. 함수 표현식(function expression) 함수를 변수에 할당할 수 있다. 함수가 할당된 변수를 console.log를 통해 확인하면 변수명에 할당된 함수의 이름이 출력된다. 다만, 자바스크립트에서는 괄호가 있어야만 함수가 호출된다. 따라서 아래의 코드에서는 함수 내용은 호출되지 않고 함수명 add만 확인할 수 있다. const addNum = function add(a, b) { return (a + b) } console.log(addNum); const addNum = function add(a, b) { return (a + b) } conso..
함수 선언문(function declaration) function 키워드 + 함수이름 + (parameter) + { 함수 본문 } function user() { console.log('hello') } 지역변수(local variable) 함수 내에서 선언한 변수. 함수 내에서만 접근할 수 있다. function hello() { let hi = 'hi' // 함수 외부에서 호출하면 에러남 console.log(hi); } 외부변수(outer variable) 함수 내부에서는 함수 외부변수에 접근할 수 있으며, 함수 내에서 외부 변수를 수정할 수 있다. 함수 외부변수명과 내부변수명의 이름이 같을 경우, 함수 내에서는 내부 변수명이 더 우세하다.(외부변수를 가림) let username = '유비';..
while문에서 루프를 제한하기 위한 수를 이용할 때 전위연산자와 후위연산자가 다르게 동작한다. 1. 루프 제어문으로 전위 연산자를 while에 사용했을 때. let i = 0; while (++i < 5) { console.log(i); } console.log('-------') ++i i < 5 i console.log(i) 1 1 < 5 1 1 2 2 < 5 2 2 3 3 < 5 3 3 4 4 < 5 4 4 5 5 < 5 (false) 전위연산자는 미리 연산 후 자료 처리에 쓰이게 된다. 따라서 먼저 1이 가산이 된 후 그 다음 비교값에서 처리가 된다. 따라서 1~4까지 출력이 되며, 5는 출력되지 않는다. 2. 루프 제어문으로 후위 연산자를 while에 사용했을 때 let j = 0; while..
fhand = open('romeo.txt') counts = {} for line in fhand: words = line.split() for word in words: counts[word] = counts.get(word, 0 ) + 1 lst = [] for key, val in counts.items(): newtup = (val, key) lst.append(newtup) lst = sorted(lst, reverse=True) for val, key in lst[:10] : print(key, val) 텍스트 파일에서 가장 많이 활용한 단어 Top 10가지를 출력하는 프로그램이다. 먼저 text 파일을 열어준다. counts 딕셔너리를 하나 생성한다. for문을 통해 txt 파일이 끝날때까..
리스트(List)와 비슷한 컬렉션, 튜플(Tuple) 튜플은 리스트와 굉장히 비슷하다. 리스트와의 차이는 대괄호 대신 소괄호를 사용한다는 것 정도가 있다. 리스트와 같이 인덱스에 따른 순서가 있어 인덱스로 접근이 가능하고 최대값 또한 찾을 수 있다. x = ('Glenn', 'Sally', 'Joseph') print(x[2]) # Joseph y = ( 1, 9, 2 ) print(y) # (1, 9, 2) print(max(y)) # 9 하지만 튜플은 변경이 불가능하다. immutable, 즉 값을 변경할 수가 없다. 리스트에서는 값을 변경할 수 있다. x = [9, 8, 7] x[2] = 6 print(x) # [9, 8, 6] 하지만 튜플에서는 오류가 발생한다. 이는 immutable한 속성에서 ..
딕셔너리에 루프를 적용시키는 방법 counts라는 딕셔너리를 for 반복문에 넣고 다음과 같이 실행하면 아래와 같다. counts = { 'chuck' : 1 , 'fred' : 42, 'jan': 100} for a in counts: print(a, counts[a]) for문에서 a에는 딕셔너리의 키(key)가, counts[a] 에는 딕셔너리의 값(value)이 각각 저장되는 것을 볼 수 있다. 이를 활용해 딕셔너리의 키와 값을 별도로 저장할 수 있다. 먼저 딕셔너리를 리스트로 변환하면 키로만 이루어진 리스트를 얻어낼 수 있다. jjj = { 'chuck' : 1 , 'fred' : 42, 'jan': 100} print(list(jjj)) # ['jan', 'chuck', 'fred'] 이는 딕..
어느 리스트에 사람 성씨가 있고 그 성씨를 카운트하는 일을 한다고 가정해보자. 반복적인 일을 해야하니 반복문이 들어갈 것이고 카운팅을 한다는 조건이 있으니 조건문이 들어갈 것이다. counts = dict() names = ['김', '이', '박', '이', '최', '박', '제갈', '김', '이', '박'] for name in names : if name in counts: counts[name] = counts[name] + 1 else : counts[name] = 1 print(counts) # {'김': 2, '이': 3, '박': 3, '최': 1, '제갈': 1} 이것의 동작 방식은 아래와 같다. names 리스트를 하나씩 순회하면서 counts 딕셔너리와 리스트의 이름들을 하나씩 비..
딕셔너리도 리스트와 마찬가지로 컬렉션이며, 하나의 변수에 여러개의 정보를 저장할 때 사용한다. 리스트는 순서대로 정리된 컬렉션이며, 데이터를 추가하면 항상 리스트 끝에 추가가 된다. 하지만 딕셔너리에는 순서가 없다. 대신 키(Key)라는 것이 존재한다. 포스트잇이 Key 물건이 value 라면 Key : value 식으로 항상 붙어다닌다. 비유하자면 리스트는 감자칩이 잘 정돈되어 보관된 프링글스와 같으며 딕셔너리는 마구마구 뒤섞여있는 스윙칩 봉지라고 할 수 있겠다. 딕셔너리 생성 변수 = dict() 또는 변수 = { } 처럼 생성할 수 있다. bag = dict() # 또는 bag = {} bag['apples'] = 12 # apples라는 키에 12 연결 bag['coconut'] = 1 # coc..