170224_TIL

|

오늘 한 일

  • tryhelloworld 파이썬 강의 를 들었다. 프로그래밍 언어는 서로 비슷하다는 말을 많이 들었는데, 파이썬을 공부하면서 실감 할 수 있었다. 이고잉님이 말했던 ‘서울 말 - 충청도 말’ 정도의 차이는 아니었지만 그래도 많이 비슷하다. 내일까지는 파이썬 문법을 쭉 한번 훑어봤으면 좋겠다!

내일 할 일

python 주요 메소드, 내장함수, 외장함수 목록 (업데이트 중)

|

추가 내용은 구글독스에 정리

내장함수 (built-in function)

파이썬 내장 함수들은 외부 모듈과는 달리 import를 필요로 하지 않는다.

enumerate()

이 함수는 순서가 있는 자료형(리스트, 튜플, 문자열)을 입력으로 받아 인덱스 값을 포함하는 enumerate 객체를 리턴한다. (※ 보통 enumerate 함수는 아래 예제처럼 for문과 함께 자주 사용된다.)

list = [1, 2, 3, 4, 5]
for i, v in enumerate(list):
    print('index : {} value: {}'.format(i, v))

str()

str(object)은 문자열 형태로 객체를 반환하여 리턴하는 함수이다.

>>> str(3)
'3'
>>> str('hi')
'hi'
>>> str('hi'.upper())
'HI'

join() / split()

리스트를 문자열로 / 문자열을 리스트로 변환하는 함수.

구분자.join(리스트) - 리스트(List)를 특정 구분자를 포함해 문자열(String)으로 변환

animals = ['사자', '코끼리', '기린', '원숭이', '바나나원숭이']

print ",".join(animals)
# >> 사자,코끼리,기린,원숭이,바나나원숭이

print "\n".join(animals)
# >> 사자
# >> 코끼리
# >> 기린
# >> 원숭이
# >> 바나나원숭이

print "/".join(animals)
# >> 사자/코끼리/기린/원숭이/바나나원숭이

문자열.split(구분자) - 문자열(String)을 특정 ‘구분자’를 기준으로 리스트(List) 로 변환

animals = ['사자', '코끼리', '기린', '원숭이', '바나나원숭이']

animal_string = "/".join(animals)
# >> 사자/코끼리/기린/원숭이/바나나원숭이

animal_split = animal_string.split("/") print animal_split
# >> ["사자", "코끼리", "기린", "원숭이", "바나나원숭이"]

zip()

zip(iterable*)은 동일한 개수로 이루어진 자료형을 묶어 주는 역할을 하는 함수이다.

>>> list(zip([1, 2, 3], [4, 5, 6]))
[(1, 4), (2, 5), (3, 6)]
>>> list(zip([1, 2, 3], [4, 5, 6], [7, 8, 9]))
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
>>> list(zip("abc", "def"))
[('a', 'd'), ('b', 'e'), ('c', 'f')]

외장함수

이제 파이썬 프로그래밍 능력을 높여 줄 더 큰 날개를 달아 보자. 전 세계의 파이썬 사용자들이 만든 유용한 프로그램들을 모아 놓은 것이 바로 파이썬 라이브러리이다. “라이브러리”는 “도서관”이라는 뜻 그대로 원하는 정보를 찾아보는 곳이다. 모든 라이브러리를 다 알 필요는 없고 어떤 일을 할 때 어떤 라이브러리를 사용해야 한다는 정도만 알면 된다. 그러기 위해 어떤 라이브러리들이 존재하고 어떻게 사용되는지 알아야 할 필요가 있다. 자주 사용되고 꼭 알아두면 좋은 라이브러리들을 중심으로 하나씩 살펴보자. (※ 파이썬 라이브러리는 파이썬 설치 시 자동으로 컴퓨터에 설치가 된다.)

random

random은 난수(규칙이 없는 임의의 수)를 발생시키는 모듈이다

>>> import random
>>> random.random() # 0.0에서 1.0 사이의 실수 중에서 난수값을 리턴
0.53840103305098674

>>> random.randint(1, 10) #1에서 10 사이의 정수 중에서 난수값을 리턴한다.
6

random.choice 함수는 입력으로 받은 리스트에서 무작위로 하나를 선택하여 리턴한다. 리스트의 항목을 무작위로 섞고 싶을 때는 random.shuffle 함수를 이용하면 된다.

>>> import random
>>> data = [1, 2, 3, 4, 5]
>>> random.shuffle(data)
>>> data
[5, 1, 3, 4, 2]

메소드(method)

문자열(string)

문자열 포매팅 - %s

%s 포맷 코드는 어떤 형태의 값이든 변환해 넣을 수 있다.

>>> number = 10
>>> day = "three"
>>> "I ate %s apples. so I was sick for %s days." % (number, day)
'I ate 10 apples. so I was sick for three days.'
>>> "I have %s apples" % 3
'I have 3 apples'

.format()

문자열의 format 함수를 이용하면 좀 더 발전된 스타일로 문자열 포맷을 지정할 수 있다.

>>> number = 3
>>> "I eat {} apples".format(number)
'I eat 3 apples'

리스트(list) 메소드

.pop()

pop()은 리스트의 맨 마지막 요소를 돌려 주고 그 요소는 삭제하는 함수이다.

>>> a = [1,2,3]
>>> a.pop()
3
>>> a
[1, 2]

pop(x)는 리스트의 x번째 요소를 돌려 주고 그 요소는 삭제한다.

>>> a = [1,2,3]
>>> a.pop(1)
2
>>> a
[1, 3]

list.index( value )

값을 이용하여 위치를 찾는 기능

>>> list1 = ['a', 'b', 'q', 'f']
>>> list1.index('b')
1

list.extend( [value1, value2] )

extend(x)에서 x에는 리스트만 올 수 있으며 원래의 a 리스트에 x 리스트를 더하게 된다. a.extend([4,5])는 a += [4,5]와 동일 (.extend() > ‘+’연산자 보다 성능이 좋음)

>>> list1 = ['a', 'b', 'q', 'f']
>>> list2 = [1, 2, 3]
>>> list1.extend(list2)
>>> list1
['a', 'b', 'q', 'f', 1, 2, 3]

list.append

append를 사전에서 검색해 보면 “덧붙이다, 첨부하다”라는 뜻이 있다. 이 뜻을 안다면 아래의 예가 금방 이해가 될 것이다. append(x)는 리스트의 맨 마지막에 x를 추가시키는 함수이다.

>>> a = [1, 2, 3]
>>> a.append(4)
>>> a
[1, 2, 3, 4]

>>> a.append([5,6])
>>> a
[1, 2, 3, 4, [5, 6]]

list.insert( index, value )

원하는 위치에 값을 추가

list1 = ['a', 'b', 'q', 'f', 1, 2, 3]
>>> list1.insert(1, 'hi')
>>> list1
['a', 'hi', 'b', 'q', 'f', 1, 2, 3]

list.sort( ) / list.reverse( )

값을 순서대로 정렬 / 값을 역순으로 정렬

list1 = ['a', 'hi', 'b', 'q', 'f', 1, 2, 3]

>>> list1.sort()
>>> list1
[1, 2, 3, 'a', 'b', 'f', 'hi', 'q']

>>> list1.reverse()
>>> list1
['q', 'hi', 'f', 'b', 'a', 3, 2, 1]

자바스크립트 화살표 함수

|

화살표 함수 (Arrow functions)

설명

화살표 함수 표현(arrow function expression)은 function 표현에 비해 구문이 짧고, 화살표 함수는 항상 익명입니다. 이 함수 표현은 메소드 함수가 아닌 곳에 가장 적당합니다. 그래서 생성자로서 사용할 수 없습니다. MDN

문법

(param1, param2, , paramN) => { statements }
(param1, param2, , paramN) => expression
// 다음과 동일함:  => { return expression; }

// 매개변수가 하나뿐인 경우 괄호는 선택사항:
(singleParam) => { statements }
singleParam => { statements }

// 매개변수가 없는 함수는 괄호가 필요:
() => { statements }

예시

일부 함수 패턴에서는, 짧은 함수가 효율적이다. a2, a3의 결과는 같다.

var a = [
  "Hydrogen",
  "Helium",
  "Lithium",
  "Beryl­lium"
];

var a2 = a.map(function(s){ return s.length });

var a3 = a.map( s => s.length );

지킬 블로그 검색기능 추가 - 구글맞춤검색, 검색라이브러리

|

지킬 블로그 내용 검색창 추가하기

블로그 글이 점점 늘어나면서 검색창을 추가할 필요성이 생겼다.
찾아보니 2가지 방법이 있는데 (구글맞춤검색, 라이브러리) 둘 다 장단점이 있는 것 같다. 둘 다 적용해서 사용해본 결과, 검색 정확도를 위해서 구글맞춤검색을 사용하기로 했다.

  • 구글 맞춤 검색 사이트 접속
  • 메뉴에서 새 검색엔진 선택
  • 필요한 내용을 입력 후 검색엔진 추가
  • 메뉴에서 검색엔진 수정을 선택하여 검색창 레이아웃 등을 수정 가능
  • 코드생성을 선택하여 해당 코드를 자신의 웹페이지에 추가
구글맞춤검색 적용화면

장점

  • 라이브러리 보다 간편하게 블로그 검색기능을 추가할 수 있다.
  • 검색 정확도가 높고 내용을 미리 볼 수 있다.
  • 검색 통계를 확인할 수 있다.

단점

  • 검색 결과에 구글 광고가 표시된다.
    (애드센스 계정이 있으면 광고클릭 수익을 자신의 계정으로 돌릴 수 있음, Make money 메뉴를 통해 애드센스 계정정보 등록)
  • 스타일을 100% 자유롭게 수정하기는 어렵다.

라이브러리 추가

검색라이브러리 적용화면

장점

  • 스타일을 자신의 취향에 맞추어 자유롭게 수정할 수 있다.

단점

  • 검색결과가 정확하지 않은 것 같다. 예를 들어 카페 라는 검색어를 입력하면, 카페라는 단어를 포함하지 않는 글도 검색 결과로 표시된다.
  • 라이브러리 적용 중에 내가 실수를 해서 그럴지도 모르겠는데, 한국어 소개글을 올려주신 한량넷에서도 검색결과가 정확하지 않은 것을 확인할 수 있었다. 라이브러리를 만드신 분의 코드에 한국어 검색결과 문제가 있을수도 있겠다.

결론

  • 디자인을 생각하면 라이브러리를 추가해서 검색창을 만들고 싶었지만, 검색은 정확도가 가장 중요하니 구글 맞춤 검색을 사용하기로 했다.

170223_TIL

|

오늘 한 일

  • 코드스쿼드 화이트 코스 과제를 우연히 보게되서 풀어보려고 한다. 버튼을 눌렀을 때 페이지 새로고침 없이 서버에서 JSON 데이터를 가져와 화면에 출력 하려고 한다. Ajax라는걸 사용하고 싶어서 전에 들었던 생활코딩 jQuery Ajax 수업을 다시 들었다. 역시 필요해서 다시 듣는 수업은 훨씬 재미있는 것 같다. 간단하게 적용해 보았더니 성공! 내일은 다른 사람이 구현한 코드를 보고 좀 더 잘 구현해 봐야겠다.
  • 오늘 모임에 다녀왔다가 반가운 사람들도 만나고 좋은 이야기들을 많이 들었다.
  • 백엔드가 본인에게 맞을지 확인해보려면 네트워크, tcp/ip 등을 접해봐야 한다고 한다. 마침 생활코딩에 인터넷, 네트워크 그리고 서버라는 수업이 있다. 내일 들어봐야겠다.
  • 파이썬 문법을 빠르게 훑어보고 인프런 django 수업을 들어봐야겠다.

내일 할 일