반응형


1. 튜플의 연산

- 튜플은 임의의 객체의 순서를 가지는 모음으로 리스트와 유사한 면이 많다. 차이점은 변경 불가능 형이라는 것이다. 또한 튜플은 리스트가 가지고 있는 것과 같은 메소드를 쓰지 않는다. 튜플은  시퀀스 형이므로 시퀀스 형이 가지는 일반적인 연산을 모두 가진다. (인덱싱, 슬라이싱, 연결, 반복, 길이 연산 등) 튜플은 ()로 표현한다.

 

아래의 문법은 모두 튜플이다.

>>>t =()

>>>t=(1,2,3)

>>>t=1,2,3

>>>r=(1,)

>>>r=1,

 

튜플은 중복과 좌우변 복수개의 자료를 치환할 수 있다.

>>>t=(12345, 54321, 'hello!')

>>>u=t,(1,2,3,4,5)

>>u

((12345, 54321, 'hello!'),(1,2,3,4,5))

>>>x=1

>>>y=2

>>>x,y = y,x

>>>x,y

(2,1)

 

 

2. 패킹과 언패킹

t=1,2,'hello!'

x,y,z=t

a=['foo','bar',4,5]

[x,y,z,w] = a

 

 

3. 리스트와의 공통점과 차이점

 

3-1. 공통점

 - 임의의 객체를 저장할 수 있다는 것과 시퀀스 자료형이라는 것

 - 인덱싱,슬라이싱,연결,반복지원

3-2. 차이점

- 문자열과 같은 변경불가능 시퀀스형(튜플의 한 요소의 값을 인덱스 참조로 바꿀 수 없다.) 따라서, 튜플 아이템을 변경하려면 슬라이싱과 연결(Concate-nation)을 이용해야 한다.

- 메소드를 가지지 않는다.

- 튜플은 포맷 문자열 지원(문자열 부분 참조), 함수 호출시 가변 인수 지원 기능 등이 있다.

 

튜플과 리스트는 상호변환이 가능하다.

>>>T=(1,2,3,4,5)

>>>L=list(T)

>>>L[0]=100

>>>L

[100,2,3,4,5]

>>>T=tuple(L)

>>>T

(100,2,3,4,5)

 

4. 튜플을 사용하는 경우

 - 함수에 있어서 하나 이상의 값을 리턴하는 경우

 - 문자열 포매팅

 - 튜플에 있는 값들을 함수 인수로 사용할 때

 - 그 이외에 고정된 값을 표현하기 위하여 튜플을 사용한다.

 

5. 경로명 다루기

 os.path 모듈의 경로명(pathname)을 다루는 함수(split)가 튜플을 사용한다. 

 

6. url 다루기

urlparse(), urlunparse(), urljoin() 

반응형
반응형


1. 파이썬 리스트

- 리스트는 순서를 가지는 객체들의 집합으로, 파이썬 자료형들 중에서 가장 유용하게 활용된다. 리스트는 시퀀스 자료형이면서 변경 가능형이다.(내장 자료형 중 변경 가능 자료형은 리스트와 사전뿐이다.)따라서 시퀀스 자료형의 일반적인 특징(인덱싱, 슬라이싱, 연결, 반복, 멤버십 테스트 등)을 지원하며, 변경이 가능한 특성에 따라 자료의 크기를 동적으로 임의 조절하거나, 내용을 치환하여 변경할 수 있다. 리스트는 []로 표현된다.

 

 

2. 중첩리스트

>>>s=[1,2,3]

>>>t=['begin',s,'end']

>>>t

['begin',[1,2,3],'end']

>>>t[1][1]

2

 

3. 리스트의 메소드들

 - append, insert, index, count, sort, reverse, remove, pop, extend(리스트를 추가)

 

4. 리스트의 정렬

- 기본적으로 오름차순 정렬

>>>L=[1,5,3,9,8,4,2]

>>>L.sort()

>>>L

[1,2,3,4,5,8,9]

- 내림차순정렬

>>>L=[1,6,3,8,6,2,9]

>>>L.sort(reverse=True)

>>>L

[9,8,6,6,3,2,1]

 

5. 리스트 내장

- range(x) 함수 # 0부터 x보다 작은 수의 정수 리스트 반환

>>>L=[k*k for k in range(10)]

>>>print L

[0,1,4,9,16,25,36,49,64,81]

 

6. 지역적으로 사용 가능한 이름 리스트 얻기

- 인수 없이 dir()하면 현재 지역적으로 사용 가능한 심볼 테이블(사용 가능한 이름 목록)의 내용을 알 수 있다. dir 인수에 임의의 객체를 전달하면, 그 객체 내에서 활용할 수 있는 어트리뷰트(함수,변수 등의 이름들)의 리스트를 리턴한다. 모듈에 어떤 함수나 변수가 정의되어 있는가, 클래스에 어떤 메소드를 활용할 수 있는가 등의 정보를 손쉽게 얻을 수 있다.

 

 

 

반응형
반응형


1. 시퀀스 자료형

 시퀀스 자료형이란, 여러 객체들을 저장하는 저장 자료형이며, 각 객체들은순서를 가진다. 그로인해 각 요소들은 첨자(Index)를 이용하여 참조가 가능하다. 특성을 정리하면 다음과 같다.

 - 여러 개의 객체를 저장할 수 있다.

 - 각 객체들은 순서를 갖는다.

 - 각 객체들은 첨자를 이용하여 참조 가능하다.

 

예)

>>>s = 'abcdef'

 

>>>s[0]    # 인덱싱(indexing)

>>>s[1:3]  # 슬라이싱(slicing)

 

>>>ss = 'abc' + 'def' # 연결하기(concatenation)

 

>>>ss * 4 #  반복하기(repetition) ss+ss+ss+ss 와 동일

 

>>> c in ss  # 멤버쉽 테스트 어떤 객체가 시퀀스 객체에 포함되었는지 검사

True

 

 

반응형
반응형


예전 블로그 복사 - http://blog.daum.net/7dbwnckd/7972577


1. 파이썬 수치 자료형의 표현 범위

 

 데이터형비트 수표현 범위 
 int32비트 -2147483648 ~ 2147483647
 long 무제한(메모리가 허용하는 한) 무제한
 float 64비트 유효자리 15자리, 약 10의+-308승
 complex 실수부 및 허수부 각각 64비트 유효자리 15자리, 약 10의+-308승

 

2. Decimal 클래스의 활용 : 오차 없는 계산 결과를 얻어야 한다면 사용하라.

반응형
반응형


* 예전 블로그 복사. - http://blog.daum.net/7dbwnckd/7972575


Eric Raymond씨도 "How To Become A Hacker"란 글에서 프로그래밍을 배우고 싶다면 python을 배우라고 쓴 적이 있습니다. 저도, 꽤 많은 언어를 쓰고 있다고 생각하지만, Python만큼 강력하며, 쉽게 배울 수 있는 언어를 본 적이 없습니다. Python 언어에 대한 자세한 사항은 Python 관련 책이나 문서에서 충분히 얻을 수 있을 것이므로, Python에 대한 특징을 바라보는 입장에서 정리해 보았습니다. 여가 시간이 있거나, 배우고 싶은 언어를 찾고 있다면, Python을 익혀보기를 강력하게 추천합니다.

 

Programming에 대한 경험이 없는 사람의 경우

  • 복잡한 문법(어느 정도 주관적인 기준으로 바라본 것이긴 하지만)을 필요로 하는 Perl이나 C, C++에 비해 문법이 간단하다. 따라서 배우기 쉽다는 장점이 있다.
  • C와 비교했을 때, 포인터와 같은 배우기 힘든 개념이 없기 때문에, 상대적으로 많은 시간을 프로그램 구조와 디자인 등에 투자할 수 있다.
  • C++과 비교했을때, OOP의 기본적인 사항들은 더욱 빠르게 배울 수 있다.
  • 기본적으로 인터프리터 방식이기 때문에, 코드의 결과를 바로바로 확인해 볼 수 있고, 다양한 운영체제를 지원한다. 또한 원할 경우, 바로 실행 파일(.exe)을 만들어 낼 수도 있다.
  • 다양한 라이브러리를 지원하기 때문에, 상대적으로 적은 양의 코드만으로도 GUI 프로그램, game, CGI 프로그램등을 빠르게 만들 수 있다.

C/C++ 프로그래머인 경우

  • C/C++ 그리고 Bourne shell과 유사한 문법을 가지고 있기 때문에, 기타 다른 스크립트 언어에 비해 익히는 속도가 매우 빠르다.
  • OS에 관련된 기능들은 (예: POSIX interface) 대부분 C/C++에서 제공되는 함수와 같은 이름을 쓰고, 심지어 인자 타입이나 의미까지 비슷한 경우가 많기 때문에, 익혀야하는 함수들이 타 스크립트 언어와 비교할 때 많지 않다.
  • class, virtual function, 제한적인 operator overloading을 지원하기 때문에 C++에서 썼던 디자인 방식 그대로 적용할 수 있다.
  • Mixed language programming -- Python은 기타 다른 스크립트 언어에 비해 C/C++로 python module을 작성하기가 매우 쉽다. (어느 정도 주관적인 견해 포함)
  • 제한적이나마 lambda expression을 제공하기 때문에, LISP/Scheme 등에 익숙한 사람들도 비슷한 코드를 쉽게 만들 수 있다. map(), apply() 함수 제공, closure 제공
  • 다른 스크립트 언어에 비해 문서화가 잘 되어 있으며 (Tutorial, Library Reference, Language Reference 제공), 문법 자체에 LISP/Scheme과 마찬가지로 documentation string을 집어 넣을 수 있고, built-in 함수인 dir()을 쓰면, 함수, 모듈, 오브젝트가 제공하는 심볼 테이블을 바로 볼 수 있기 때문에 다른 스크립트 언어를 쓸 때에 비해, 따로 문서를 찾아보는 빈도가 낮아진다.
  • 함수, 클래스 또는 변수에 Decorator를 직접 제작할 수 있다. Decorator란 C/C++ 문법상 qualifier에 해당하는 것으로 다양한 wrapper를 만들거나 class인 경우 static, class method를 지정할 수 있다. Python 2.4 Decorators 참고

기타 사항

  • Dictionary (Postscript의 dictionary나 다른 언어의 associative array에 해당) 타입이 제공된다. 또한 immutable list에 가까운 tuple 타입이 제공되며, 서로 대입이 가능하기 때문에, 한 줄의 코드로 변수 값을 치환할 수도 있다.
  • 모든 타입은 repr() 연산을 써서 문자열로 변경할 수 있다. 또한 eval() 연산을 써서 문자열을 평가한 후 python type으로 불러 올 수 있다. 따라서 이 기능과 여러 DB 모듈을 잘 활용하면, 모든 Python type을 DB에 저장/로드하는 것이 가능해진다.
  • GTK+ binding이 제공되며, GTK+ C API 또는 C++ API(gtkmm)에 비해 훨씬 간단하게 GUI application을 작성할 수 있다. 또한 이미 GTK binary가 MS Windows 용으로 제공되기 때문에, 간단하게 Windows application도 만들 수 있다. (Pygtk 참고)
  • Python은 SDL binding을 제공하기 때문에, 게임을 만들어 보고 싶은 개발자에게도 최적의 언어라고 할 수 있다. (PyGame 참고)
  • Python 자체적으로 cgi, urllib, httplib 등의 모듈을 제공하며, 다양한 XML parsing module도 제공하며, Berkeley DB, GDBM, sqlite, oracle, ODBC등의 DB 모듈도 제공하기 때문에, Web application을 쉽게 만들 수 있다.
  • zlib, bz2, gzip, zipfie, tarfile등의 모듈을 자체적으로 제공하기 때문에 압축 파일 관련 처리가 매우 쉽다.
  • 다양한 os 기능과 함께 curses 모듈도 제공, terminal에서 실행되는 installer나 administrative tool을 만들기가 편리하다.
  • Built-in source debugger인 pdb를 제공한다.
  • 실제 개발할 때 Emacs(Pymacs, python-mode package 활용)에서 완벽하게 interpreter를 지원하며, 다양한 형태의 (buffer, region)등을 python 실행 결과를 확인할 수도 있다. 또한 Emacs 내부에서 디버거를 실행할 수 있으며(M-x pdb), Web browser w3m package를 쓰면 따로 도움말을 보기 위해 browser를 띄울 필요도 없기 때문에 매우 편리하다! (python-mode, w3m, emacs-w3m 참고)


반응형
반응형


* 예전 블로그 복사 - http://blog.daum.net/7dbwnckd/2759562


1. 새로운 기능을 추가해야 하는데 프로그램의 코드가 새로운 기능을 추가하기 쉽도록 구조화 되어

   있지 않은 경우에는 먼저 리팩토링을 해서 프로그램에 기능을 추가하기 쉽게 하고, 그 다음에 기

   능을 추가한다.

 

2. 리팩토링을 시작하기 전에 견고한 테스트 셋을 가지고 있는지 확인하라. 이 테스트는 자제 검사

   여야 한다.

 

3. 리팩토링은 작은 단계로 나누어 프로그램을 변경한다. 실수를 하게 되더라도 쉽게 버그를 찾을

   수있다.

 

4. 컴퓨터가 이해할 수 있는 코드는 어느 바보나 다 짤 수 있다. 좋은 프로그래머는 사람이 이해할

   수 있는 코드를 짠다.

 

5. 리팩토링(Refactoring) 명사 - 소프트웨어를 보다 쉽게 이해할 수 있고, 적은 비용으로 수정할 수

   있도록 겉으로 보이는 동작의 변화 없이 내부 구조를 변경하는것.

 

6. 리팩토링(Refactoring) 동사 - 일련의 리팩토링을 적용하여 겉으로 보이는 동작의 변화 없이 소

   프트웨어의 구조를 바꾸다.

 

7. 스트라이크 세 개면 리팩토링을 한다. (스트라이크 - 중복성 작업)

 

8. 주석을 써야 할 것 같은 생각이 들면, 먼저 코드를 리팩토링 하여 주석이 불필요 하도록 하라.

 

9. 패턴은 우리가 있고 싶은 곳이고, 리팩토링은 그곳에 이르는 방법이다.

 

기타.

1. 여러분이 print 문장 또는 debugger 표현으로 어떤것을 작성하려 할때 마다, 대신에 test로서 그것을 작성하여라!

반응형
반응형

jQuery.parseJSON()





보통 javascript 에서 JSON.parse 를 사용하는데, ie7 이하에서 지원을 하지 않아 오류를 발생시킨다.

따라서 jQuery 를 쓴다면 jQuery 에서 지원하는 함수를 사용하길...

$.parseJSON , jQuery.parseJSON


끝...

반응형
반응형

JSON Tutorial



JSON

JSON: JavaScript Object Notation.

JSON is syntax for storing and exchanging text information. Much like XML.

JSON is smaller than XML, and faster and easier to parse.



 페이지에서 json_encode 된 값을 JSON.parse 로 받아서 처리하던 도중 ie7 포함 이하 버전에서 지원되지 않는 이슈를 발견하게 되었다.

그래서... jQuery 를 사용함...


결론은  JSON.parse  대신  $.parseJSON 사용함.


끝...


반응형
반응형

addslashes

(PHP 4, PHP 5)

addslashes — Quote string with slashes

Description ¶

string addslashes ( string $str )

페이지에서 json 으로 parsing 하는 일이 있어서 작업을 하던 중.

텍스트에 double quote 가 들어가 있는 경우 오류를 발생하여... 


php 에서 값을 셋팅할 때부터 '\' 를 붙여서 처리하게 되면 문자를 인식하게 되는 것을 확인 한 후에

str_replace 를 사용하여 간단히 하려 하였으나 addslashes 라는 더 좋은 함수를 알게 되었다.


str_replace('"', "\"", $my_string);  을 addslashes($my_string); 로 하게 되면 double/single queto 뿐만 아니라 '\' 와 NUL 까지 처리해 준다는 사실!!!



참고)

http://kr1.php.net/manual/en/function.str-replace.php

http://kr1.php.net/manual/en/function.addslashes.php


반응형
반응형

money_format() 을 쓰려다가 number_format() 있길래 사용함.


number_format

(PHP 4, PHP 5)

number_format — 천의 단위로 숫자를 포맷팅한다.

Description ¶

string number_format ( float $number [, int $decimals = 0 ] )
string number_format ( float $number , int $decimals = 0 , string $dec_point = '.' , string $thousands_sep = ',' )

이 함수는 1개나 2개 또는 4개의 파라미터만 사용한다.(3개 안됨):

한 파라미터만 주어진다면, number (첫번째 param)  decimals(2번째 param) 없이 포맷팅 될 것임, 여튼 천 단위별로 콤마(,)가 찍힐거다.

두 개의 파라미터가 주어진다면, number 는 decimals dot (".") 으로 구분되는 소숫점을 가진, 천의 단위로 콤마를 가질 것이다.

4개의 파라미터가 주어진다면, number will be formatted with decimals decimals, dec_point instead of a dot (".") before the decimals andthousands_sep instead of a comma (",") between every group of thousands.

Parameters ¶

number

The number being formatted.

decimals

Sets the number of decimal points.

dec_point

Sets the separator for the decimal point.

thousands_sep

Sets the thousands separator.

그래서 ... 확인해보니 number_format($number, '0', '.', ','); 랑 number($number) 가 기본 숫자 사용 시에는 같은 결과를 나타냈다.

반응형
반응형

1. PHP rand() vs mt_rand()


둘다 PHP 에서 난수를 발생시켜주는 함수입니다. 이름을 보면 알겠지만 당연히 rand() 가 먼저 사용되고 있었구요.


 먼저 기본적인 사용은 rand(), mx_rand() 를 호출하거나 시작값과 끝값을 주어 rand(1,10) , mt_rand(1,10) 과 같이 동일하게 사용하면 됩니다. 


 이렇게 외형적으로는 비슷하나 똑똑한 개발자들이 mt_rand() 를 추가적으로 만든 이유가 있을텐데 그 이유에 대해서 알아보도록 하겠습니다. 앞서 기능을 살펴보면 rand() 와 mt_rand() 는 모두 0부터 시스템에서 제공하는 범위의 난수를 반환하는데(각각 getrandmax(), mt_getrandmax() ), rand() 의 경우엔 운영체제에 따라 max 의 범위가 32,767 이라고 합니다. 따라서 더 큰 수를 사용해야 한다면 mt_rand() 를 사용해야 합니다.


 그리고 내부적인 알고리즘에서 차이가 있습니다. rand() 의 경우에는 LCG(Linear Congruential Generator) 를 사용하고, mt_rand() 는 Mersenne Twister 를 사용합니다. 각각 생성가능한 수의 범위는 다음과 같으며  232  , 219937 − 1  속도 또한 4배나 빠르다고 합니다.


 그래서 아래와 같이 테스트를 해 보았습니다.


<?php

    $mt_rand_start = microtime(true);

    for ($i=0; $i<1000000; $i++)

    {

        $tm_random = mt_rand(0, mt_getrandmax());

    }

    $mt_rand_end = microtime(true);

    $runtimeMtRand= $mt_rand_end - $mt_rand_start;

    echo "Runtime mt_rand(): ".$runtimeMtRand." seconds! \n";


    $rand_start = microtime(true);

    for ($i=0; $i<1000000; $i++)

    {

        $random = rand(0, getrandmax());

    }

    $rand_end = microtime(true);

    $runtimeRand= $rand_end - $rand_start;

    echo "Runtime rand(): ".$runtimeRand." seconds! \n";

?>


결과는... 이론과는 달랐네요. ㅠㅠ 왜?


 실제 사용 시 난수 발생은 rand() 보다 mt_rand() 가 더 확실한 random() 범위를 나타내나 이상하게 속도에서는 앞서거니 뒤서거니 하는 결과를 보였습니다. 인터넷 검색을 해보니 뭐 시스템에 따란 다른 결과를 보이느니 하는데요. 4배까지는 아니더라도 평균적으로 빠른 결과를 보이는 것 같습니다. 



참조>

http://us1.php.net/manual/en/function.rand.php

http://us1.php.net/manual/en/function.mt-rand.php

http://en.wikipedia.org/wiki/Linear_congruential_generator

http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html

http://golearnphp.com/php-rand-vs-mt_rand-and-openssl_random_pseudo_bytes/


반응형
반응형

jQuery event Binding.


어떤 요소들에 이벤트를 등록하는 작업을 binding 이라 합니다. 그렇게 하면 이벤트 리스너는 자바스크립트 해석기에 어떤 함수를 넘겨줘야 할지 알게 됩니다. 두 가지 방법으로 요소에 이벤트를 등록할 수 있습니다.



1. 페이지를 불러올 때는 이런 방법으로 요소에 이벤트를 등록할 수 있습니다.

  이런 방법을 단축 mothod 라고 합니다.

$("#myElement").click(function(){

alert($(this).text());

});



2. 이 방법도 첫번째 방법과 마찬가지지만, DOM 요소를 새로 만들었을 때처럼 페이지를 불러온뒤에 추가된 요소에도 이벤트 리스너를 등록할 수 있습니다.

$("#myElement").bind('click', function(){

alert($(this).text());

});



 첫 번째 방법은 두 번째 방법의 단축 mothod 지만 DOM 요소가 이미 존재할 때만 쓸 수 있습니다. jQuery 에는 이런 단축 method 가 많아서 코드를 깔끔하게 쓸 수 있습니다. 하지만 단축 method 에는 한계가 있습니다. 클릭할 수 있는 이미지를 추가했거나 대화형 목록에 항목을 추가하는 등 코드로 DOM 요소를 추가했다면 두 번째 방법을 사용해야 합니다.


반응형
반응형

1. jQuery ready() Method


 ready()는 기본적으로 Dom 이 준비된 이후에 또는 Dom이 완전히 로드되었을 때 실행되는 함수입니다. window.onload 와의 차이는 window.onload 는 페이지의 모든 자원들이 로드된 후 실행되므로 ready() 를 사용했을 때 Dom 이후에 다운되는 자원에 대한 접근을 하게 되면  오류?가 발생할 수 있다는 점을 알고 있어야 할 것입니다.

 보통의 Dom 이라면 <body></body> 안에 존재할 것이기 때문에 jquery 를 사용하는 스크립트를 <body></body> 안의 하단에서 사용한다면 ready() 를 굳이 사용하지 않아도 같은 방법이 될 것입니다. 그리고 평균적으로 스크립트를 페이지 하단에 심는게 속도면에서 좋기 때문에 좀 더 나은 사용방법이라 말 할 수 있을 것 같습니다.



<참조>

- http://www.w3schools.com/jquery/event_ready.asp

- http://api.jquery.com/ready/


반응형
반응형

1. jQuery 란?.


jQuery 란?

- jQuery 는 자바스크립트 라이브러리로 html 코드로부터 자바스크립트를 분리하기 위한 unobtrusive 자바스크립트 입니다.


브라우저와 자바스크립트.

- 기본적으로 브라우저의 레이아웃 엔진이 html 과 css를 읽어본 다음에 html dom 을 사용해서 document 를만듭니다. 

- 자바스크립트는 웹  페이지를 바꿀 때 dom을 참조하므로 페이지를 새로고침하지 않아도 됩니다.

- 자바스크립트 인터프리터는 원래 있던 html 과 css 파일을 바꾸지 않습니다. 단지 브라우저 메모리에 들어 있는 페이지의 dom 표현을 바꾸는 겁니다.


jQuery 의 기초.

- jQuery() 는 $() 와 동일합니다. () 안에는 html 문자열, css 선택자(selector), 자바스크립트객체가 들어갈 수 있습니다.


반응형
반응형

1. php 문자열에서 lastIndexOf 가 없는 것 같아 다른 함수들을 이용하여 만들어 봤다.

public function lastIndexOf($str, $cmp)
{
    return strrev(substr(strrev($str),strpos(strrev($str),$cmp)));
}

반응형

+ Recent posts