언어
-
[Golang] 명명된 함수형 (Named Function)언어/Golang 2017. 2. 8. 20:48
명명된 자료형과 마찬가지로 함수 또한 사용자가 정의할 수 있습니다. type BinOp func(int, int) int두 정수를 넘겨받아 정수 하나를 반환하는 함수형을 BinOp형으로 정의하였습니다. 명명된 함수형도 자료형 검사를 실행합니다. func Test(f BinOp) { fmt.Println(f(3, 4)) }위의 함수를 호출할 때, 아래와 같이 호출한다고 가정합니다. Test(func (a, b int) int { return a+b })Test는 BinOp형을 인자로 받는데, 호출 시에는 그냥 정수 둘을 받ㄱ 정수 하나를 반환하는 함수를 넘겨줬습니다. 위의 코드는 컴파일 에러를 발생하지 않습니다. func(a, b int) int 자료형이 명명되지 않은 자료형이기 때문입니다. 양쪽 모두 명..
-
[Golang] 명명된 자료형 (Named Type)언어/Golang 2017. 2. 8. 20:26
go에서는 자료형에 새로 이름을 붙일 수 있습니다. 사실 rune형은 int32의 별칭입니다. 이런 자료형을 명명된 자료형(Named Type)이라고 합니다. type rune int32 엄밀히 말해서 int32 역시 명명된 자료형에 속합니다. 그러면 명명되지 않은 자료형 (Unnamed Type)은 어떤 것들이 있을까요type runes []rune type MyFunc func() int위와 같이 runes와 MyFunc는 이름 자체만으로 자료형을 지칭하는 것이기에 명명된 자료형이 되고, []rune과 func() int는 이름만으로 자료형을 지칭하는 것이 아니기 때문에 명명되지 않은 자료형으로 구분됩니다. 명명된 자료형과 명명되지 않은 자료형 모두에 type 예약어를 사용하여 새 이름을 붙여줄 수 ..
-
[Golang] 클로저를 사용해 생성기(generator) 생성언어/Golang 2017. 2. 8. 20:15
아래는 클로저를 사용하여 생성기(generator)를 만든 예제입니다.package main import ( "fmt" ) func NewIntGenerator() func() int { var next int return func() int { next++ return next } } func main() { gen := NewIntGenerator() fmt.Println(gen(), gen(), gen(), gen(), gen()) fmt.Println(gen(), gen(), gen(), gen(), gen()) } // 결과 // 1 2 3 4 5 // 6 7 8 9 10NewIntGenerator()는 함수를 반환하는 고계함수입니다. 또한 이 함수가 반환하는 함수는 클로저입니다. 반환하는 함수..
-
[Golang] 고계(고차)함수 (higher-order function)언어/Golang 2017. 2. 8. 19:55
말은 어렵지만 의미는 간단합니다. 함수를 파라미터 또는 인자값에 넣는 것입니다. 아래는 고계함수의 예제입니다.func ReadFrom(r io.reader, f func(line string)) error { scanner := bufio.NewScanner(r) for scanner.Scan() { f(scanner.Text()) } if err := scanner.Err(); err != nil { return err } return nil } func main() { r:= strings.NewReader("bill\ntom\njani\n") err := ReadFrom(r, func(line string) { // 람다함수와 같은 기능 fmt.Println("(", line, ")") }) if ..
-
[Python] MongoDB (pymongo)언어/파이썬 & 장고 2017. 2. 8. 10:45
Mongo DB 용어SQL 용어MongoDB 용어일반 용어데이터베이스(database)데이터베이스(database)테이블(table)콜렉션(collection)행(row)문서(document) / BSON 문서(BSON document)컬럼(column)필드(field)인덱스(index)인덱스(index)테이블 조인(table join)임베디드 문서 및 링킹(embedded documents and linking)주키(primary key)주키(primary key)특정 컬럼을 주키로 지정주키가 _idfield로 자동 설정됨집계(aggregation, 예: group by)집계 파이프라인(aggregation pipeline)Python 내 Mongo DB 모듈 설치$pip3 install pymongo..
-
[Golang] map에서 key값 존재유무 확인언어/Golang 2017. 2. 2. 20:38
Go언어에는 상수 시간에 키의 존재를 확인할 수 있는 집합은 따로 제공하고 있지 않습니다. 여기서 가장 단순한 방법은 맵을 이용하면서 값을 bool형으로 주는 것입니다. 문자열에 중복되어 들어가 있는 글자가 있는지 검사하는 함수를 만드는 예제입니다.package main import "fmt" func hasDupeRune(s string) bool { runeSet := map[rune]bool{} for _, r := range s { if runeSet[r] { return true } runeSet[r] = true } return false } func main() { test := "가나다라" fmt.Println(hasDupeRune(test)) test1 := "가나다라가" fmt.Prin..
-
[Golang] if문에 세미콜론(;) 의미언어/Golang 2017. 2. 2. 20:22
아래의 두 예제는 같은 의미입니다.1.if v, err := Read(); err == nil { // do something with v, because Read() did not // had an error (err) }2.v, err := Read() if err == nil { // do something with v } 두 문법의 결과는 같지만 차이점은 첫 번째 예제에서는 v와 err의 범위는 if {}블록으로 제한됩니다. 두 번째 예제에서는 v와err은 선언된 블록에 속해 있습니다. 즉, if {}에 속해있지 않다는 뜻입니다. {}블록에서 ;을 사용하는 것과 거의 같습니다.if문에 ;을 사용할 땐, 선언되는 변수가 조건문 안에서만 사용된다고 확실시 될 때 사용하면 좋습니다.
-
[Django] QuerySet 에서 dict 타입 변환하기언어/파이썬 & 장고 2017. 2. 1. 20:30
queryset to dict!QuerySet은 대개 Django ORM의 filter()함수를 사용할 때 (1개 이상의 데이터가 반환될 때) 갖게 되는 타입입니다.이러한 타입을 그대로 사용하려고 하면 아래와 같이 출력이됩니다.a = ModelObj.objects.filter(col=1) # 결과 {col:[1], .... ,}위와 같이 value값에 리스트가 씌워져 있는 것들을 확인할 수 있습니다. QuerySet의 변환은 아래처럼 간단하게 dict로 변환이 됩니다.a = ModelObj.objects.filter(col=1) print(a.values()) # 결과 {col:1, .... ,}
-
[Django] model object 에서 dict 타입으로 변환하기언어/파이썬 & 장고 2017. 2. 1. 20:23
django model object to dict!모델객체에서 dict타입으로의 변환은 여러 방법이 있습니다. 참고로 Django ORM에서 model 객체로 결과가 나오는 것은 get()과 같은 형식이여야 합니다. filter()처럼 QuerySet으로 나오는 형태는 에러가 날 수 있습니다.test case모델from django.db import models class OtherModel(models.Model): pass class SomeModel(models.Model): value = models.IntegerField() value2 = models.IntegerField(editable=False) created = models.DateTimeField(auto_now_add=True) r..
-
[Python] dict 생성방법언어/파이썬 & 장고 2017. 2. 1. 17:37
dict()함수를 사용하여 초기부터 dictionary타입의 데이터를 생성하던지 다른 타입의 데이터를 dictionary로 변환하는 방법에 대해 설명합니다.dict()a = dict() a['id'] = 'test' a['password'] = 'test' print(type(a), a) # 또는 temp = {'id':'test', 'password':'qwer'} a = {} for k, v in temp.items(): print(k,v) a[k] = v print(a)dict(key,value)a = dict({'id':'test', 'password':'qwer'}) print(type(a), a)dict(**kwargs)a = dict(id='test',password='qwer') print..