본문 바로가기

Programming177

python에서 switch문 쓰기 Python에서는 switch문이나 case문이 존재하지 않는다. 그래서 python에서는 switch문과 비슷한 동작을 할 수 있도록 dictionary를 이용해서 아래와 같이 구현한다. switch_map = { 'APPLE' : 1, 'BANANA' : 2, 'TOMATO' : 3} print switch_map['APPLE']print switch_map['BANANA'] 2015. 7. 23.
절대 경로로 import 하기 절대 경로에 있는 파이썬 class를 import하려면 어떻게 해야 할까? /home/test/define.py 란 python 코드가 아래와 같이 있다고 가정하자. class TestClass: def testFunction(self, flag): print "test Function" /home/test2/main.py 에서 /home/test/define.py에 있는 class를 import 하려면 어떻게 해야 할까? import sys를 이용해서 쉽게 해결할 수 있다. import sys sys.path.append('/home/test') from define import TestClass test = TestClass()test.testFunction('Hello World') 2015. 7. 22.
폴더 내의 파일 검색하기 파이썬에서 폴더 안의 파일을 검색해서 처리해야 하는 일들이 종종 생긴다. 하지만 중첩된 폴더일 경우 이게 폴더도 있는 건지 파일만 있는 건지 확인도 해야하고, 생각외로 처리해야 할 것들이 많다. 간단하기 재귀로 폴더 안의 파일들을 검색하는 로직을 짜봤다. 처음 위치의 폴더 경로를 시작으로 해당 하위의 파일들을 찾아서 검색한 후, 만약에 파일이 아니고 폴더면 다시 함수를 호출해서 재귀적으로 폴더 내의 모든 파일을 찾는 함수이다. 위와 같은 방법으로 짤 수도 있지만 python에서는 더 좋은 함수를 제공해 주고 있다. os.walk를 사용하면 코드의 간결함 뿐만 아니라 처리 속도 향상도 얻을 수가 있다. (재귀는 좀 찝찝하기도 하고.. ) 2015. 7. 10.
[Python] Sqlalchemy ON DUPLICATE KEY UPDATE DB를 사용함에 있어 PK가 있는 경우에는 Update를, PK가 없는 경우에는 Insert를 써야 하는 경우가 많다. Django에서는 insert_or_update라는 함수를 따로 제공해 줘서 이 API를 이용했던 기억이 있는데, sqlalchemy 같은 경우에는 이러한 기능을 따로 제공하지 않는 것 같다. 찾아본 결과 sql 쿼리를 직접 날려서 insert_or_update를 처리하거나, select를 해서 pk 여부를 확인한 후 insert를 하는 방법 이렇게 두가지 방법을 확인하였으며, 두 번째 방법으로 insert_or_update 구현하기로 하였다.(사실 oracle처럼 merge란 방법을 쓰란 것도 있었는데, 이건 진짜 도통 모르겠어서 패쓰~) 간략하게 코드 설명을 하자면, 우선 연결되어 .. 2015. 6. 22.
패키지와 임포트 Package 자바, C#과 마찬가지로 Scala에서도 namespace 격인 package가 존재한다. Scala에서는 아래와 같은 3가지 방법으로 package를 선언하고 사용할 수가 있다. 자바에서의 package 사용 용법 1. 자바와 비슷한 형태 package com.jufactory class factory1 2. C#과 비슷한 형태 package com.jufactory { class factory1} 3. 중첩 형태 package com { package jufactory { class factory1 package otherfactory{ class factory2 } }} 만약에 아래와 같은 중첩 코드라면 package의 scope가 어떻게 될까?? package com { class .. 2015. 5. 28.
Trait 스칼라에는 자바의 Interface와 비슷한 trait라는 것이 존재한다. 비슷하면서도 다른 게 바로 자바의 Interface와 스칼라의 trait인데, 우선 자바의 Interface는 Interface 내에 정의만 가능하고 구현은 Interface를 상속받은 클래스 내에서 구현을 해야 했다.그에 반해 스칼라의 trait는 정의 뿐 아니라 실제 구현도 가능하기 때문에 사용자가 직접 구현을 하지 않아도 되는 장점을 가지고 있다.또한 Trait는 다중 상속 개념에 대해서 자바나 C++보다 합리적인 방안을 제시하고 있다. 이에 대한 설명은 차츰 진행하기로 하며, 우선 trait를 어떻게 사용하는지에 대해 살펴보자. trait Philosophical{ def philosophize(){ println("phi.. 2015. 4. 27.
[12강] 상속 스칼라에서도 추상 클래스가 존재하며 그에 대한 상속도 존재한다. abstract class Element{ def contents: Array[String]} 위의 예제는 Element 라는 추상 클래스를 정의한 것이고, contents라는 매서드를 정의만 한 것이다. contents라는 매서드가 정의만 되었기 때문에 추상 맴버가 되고 (추상 맴버일 경우에는 맴버 앞에 abstract를 붙여주지 않아도 됨) 추상 맴버를 가진 class는 자연스럽게 추상 클래스가 된다. (class 앞에 abstract 붙여 줘야 한다.)이 Element를 상속 받기 위해서는 contents라는 매서드를 반드시 구현을 해주어야 한다. 상속은 자바와 마찬가지로 extends 키워드를 사용한다. 상속은 private 맴버를 .. 2015. 4. 25.
[11강] 코드 중복 줄이기와 Currying 파일의 마지막 이름이 입력된 문자와 일치하는지를 찾는 함수, 파일 이름에 해당 문자열이 포함되어 있는지를 찾는 함수가 아래와 같이 정의되어 있다고 가정하자. def fileEnding(query : String) = { for (file fileName.contains(query)) filesMatching((fileName:String, query:String) => fileName.endsWith(query)) 함수는 filesMatching 함수에서 인자 타입을 명시하였기 때문에 인자 타입을 생략할 수가 있다. def fileEnding(query:String) = filesMatching(query, (fileName, query) => fileName.endsWith(query)) 또한 file.. 2015. 4. 24.
[10강] 함수와 클로저 스칼라에서 함수 사용함에 있어 기본 C나 자바와 다른 몇가지 특징이 있어 이번 포스팅에서 설명하려 한다. 첫번째로 스칼라에서는 함수 내에서 함수를 선언하고 사용할 수가 있다. def processData(data: List, width: Int){ def processLine(line: String){ if (line.length > width) ..... } for (d x + 1 위의 함수 리터럴은 x를 입력으로 받아 1을 더해주겠다는 뜻이다. 스칼라에서는 이러한 함수 리터럴을 값으로 저장할 수 있다. var function = (x : Int) => x + 1 위와 같이 선언한 경우 함수 리터럴은 아직 소스코드인데 반해, 아래와 같이 값을 실행시키게 되면 객체로 변환이 된다. function(10).. 2015. 4. 22.