7월, 2014의 게시물 표시

자료형 - 리스트와 튜플 그리고 딕셔너리

파이썬 언어의 리스트와 튜플은 다른 프로그래밍 언어에 존재하는 배열(array) 등과 유사한 역할을 한다. tuple1 = (1,2,3) print(type(tuple1), tuple1)
list1 = [1,2,3] print(type(list1), list1) list1.append(5) print(list1) list1.insert(0,0) print(list1)
리스트와 튜플은 모두 1차원 자료 구조로써 배열과 비슷하다. 이 둘의 차이점은 값을 할당할 때 리스트는 []를 사용하고 튜플은 ()를 사용한다는 것 외에도, 리스트는 값을 삽입, 수정, 삭제 등 변경할 수 있는 mutable 객체인 반면, 튜플은 그 값을 변경할 수 없는 immutable 객체라는 것이다. 너무나도 당연하겠지만, 일반적으로 속도는 튜플쪽이 조금 더 빠르다고 한다. list2= [1,2, [4,5]] 리스트 안에 리스트를 넣어서 다차원 리스트를 만드는 것도 가능하다.



파이썬 언어의 딕셔너리는 타 언어의 연관배열 혹은 해쉬와 유사하다. 즉, 키와 값의 쌍을 가지며, 순서에 무관하다. 값을 변경할 수 있는 mutable이다. dict1 = {'one':1,'two':2,'three':3,'four':4} print(type(dict1), dict1)
dict2 = dict(         one=1, two=2, three=3, four=4     )
위 코드의 dict2에서와 같이 생성자를 통해서 할당하는 것이 좀 더 편리하다.

자료형 - 문자열

string ="This is a string." print(type(string), string)# <class 'str'> This is a string.
문자열은 따옴표(" 또는 ')로 감싸서 표현한다.

string="She's back." string='"Hello", he said.'
PHP와 마찬가지로, 이중 따옴표(") 또는 단일 따옴표(')를 모두 사용할 수 있는데, 이중 따옴표 안에는 단일 따옴표를 포함시킬 수 있으며, 단일 따옴표 안에는 이중 따옴표를 포함시킬 수 있다. 필요에 따라 상황에 맞게 골라쓰면 된다.

string="두번째,\n문자열이다."
줄바꿈 이스케잎 문자(\n)을 써서 여러 줄로 만들 수도 있다. \t, \\, \", \" 등등 그 외에도 다양한 이스케잎 문자들을 사용할 수 있다.


    number =14 string="숫자는 {}이다." print(string.format(number))# 숫자는 14이다.
문자열 객체의 format() 메서드를 통해서, 문자열 내에 변수를 삽입할 수 있다. 위의 코드는 python 3 이상에서 사용되는 스타일이며 python 2에서는 "숫자는 %s이다." % number 와 같은 방식으로 사용해야 한다.

    multiline ='''\ 안녕, 블라블라~ 끝. ''' print(multiline)
따옴표를 세번 겹쳐 쓰면(''' 또는 """) 여러 줄 문자열을 표현할 수도 있다. 코드 내의 줄바꿈이나 들여 쓰기 등이 보존되므로 가독성이 높아진다는 장점이 있다.  덧으로, 위 코드에서는 시작하는 따옴표 바로 뒤에 백슬래쉬(\)가 있는데, 다음 줄부터 시작된다는 의미로 이해하면 된다. 시험삼아 백슬래쉬를 지우고 출력해보면 차이점을 …

자료형 - 숫자

number =17 print(type(number), number)# <class 'int'> 17 number =17.0 print(type(number), number)# <class 'float'> 17.0
파이썬의 숫자형에는 크게 두 종류가 있는데, 정수형(int)과 부동소수형(float)이다.  물론, 이 글의 맨 아래에 등장하는 복소수형(complex)도 있다.

number =17/3 print(type(number), number)# <class 'float'> 5.666666666666667
number =4/2 print(type(number), number)# <class 'float'> 2.0
정수형을 나눗셈 연산하면 부동소수형이 된다.

number =17//3 print(type(number), number)# <class 'int'> 5 number = round(17/3) print(type(number), number)# <class 'int'> 6 number = round(17/3,2) print

변수, 객체, 그리고 값

파이썬에서는 모든 것이 객체다. 변수도 객체고, 함수도 객체고, 심지어 코드도 객체다.
모든 객체는 ID, 타입, 그리고 값을 가진다. ID는 객체의 인스턴스가 자지는 고유 식별자이며 변경될 수 없는 값이다. 타입은 객체의 자료형이며 이 또한 변경될 수 없다. 값은 객체의 내용이다.  a =3 print(id(a))# ID print(type(a))# 타입 print(a)#값


값을 변경할 수 있는 것을 mutable 객체라 하고, 값을 변경할 수 없는 것을 immutable 객체라고 한다. 대부분의 기본 타입들은 immutable 이다. 숫자, 문자열, 튜플은 변경할 수 없는 객체이고, 리스트, 딕셔너리 등은 변경가능한 객체이다. a =3 print(id(a))# 1799077480 a=4 print(id(a))# 1799077496 a =3 print(id(a))# 1799077480
위 코드와 같이 변수의 값을 변경하는 경우에, 실제로는 변수가 가르키는 대상이 바뀌는 것이다.  3을 가리키면 '그것'은 3이되고 4를 가리키면 '그것'은 4가 되는지라, 3은 3이요 4는 4이니라.


명시적으로 변수를 메모리에서 해제하려면 del() 함수를 사용하면 되는데, 파이썬에서는 가비지컬렉션이 작동하므로 굳이 쓸 일은 없다.

클래스

#!/usr/bin/python3 # 클래스 # byElex(http://python.elex.pe.kr/)

classMyObject: # 생성자 def__init__(self, param1=0): self.param1= param1 # 메서드 defgetParam1(self): returnself.param1
defmain(): # 인스턴스 생성     obj1 = MyObject() obj2= MyObject(7) print(obj1.getParam1())

if__name__ =="__main__": main()

파이썬에서는 class 키워드를 사용해서 클래스를 정의할 수 있다. 클래스의 생성자 메서드는 __init__이다.  모든 메서드의 첫 번째 매개변수는 self인데, 이것의 용법은 타 언어의 this와 같다. 클래스의 인스턴스를 생성하는 경우, 다른 프로그래밍 언어와는 달리 new 키워드를 사용하지 않고, 그냥 변수에 할당하면 된다.

함수

#!/usr/bin/python3 # 함수 # byElex(http://python.elex.pe.kr/)

defmain():     funcOne() deffuncOne(): foriinrange(10): print(i, end=' ') print()
if__name__ =="__main__": main()

파이썬에서 함수는 def라는 키워드를 사용해서 정의한다. 함수를 호출할 때에는 당연히 함수 이름을 사용해서 호출하면 된다.

deffuncOne(a): foriinrange(a,10): print(i, end=' ') print() deffuncTwo(a=0): foriinrange(a,10): print(i, end=' ') print()
당연히, 함수에 매개변수를 사용할 수도 있다. funcTwo(a=0)처럼 매개변수 생략시의 기본값을 지정해 줄 수도 있다.

참고로, range() 함수는 주로 반복문에서 사용되며, 일련의 가상 수열을 반환한다. range(10)은 0~9, range(3, 10)은 3~9를 나타낸다. 또 참고로, print()함수는 기본적으로 맨 끝에 줄바꿈 문자(\n)를 붙이는 데, end 매개변수를 지정해서 다른 문자로 변경할 수 있다.

조건문

#!/usr/bin/python3 # 조건문 # byElex(http://python.elex.pe.kr/)

defmain():     a, b =2,1 ifa > b: print("a가 b보다 더 크다") elifa < b: print("a가 b보다 더 작다") else: print("a는 b와 같다")
if__name__ =="__main__": main()


파이썬의 조건문은 if, elif, else 키워드를 사용한다. elseif가 아니다. 입 맛에 맞게 elif나 else를 생략할 수 있는 것은 다른 프로그래밍 언어와 동일하다.

하아~! 그런데, 파이썬에는 s = (a>b) ? "크다" : "크지 않다"  같은 삼항 조건 연산자가 없다.  대신, 파이썬에서는 다음과 같이 사용한다.     s ="크다"ifa > belse"크지 않다" 영어권 프로그래머에겐 합리적인 어순일지도 모르겠으나, 적어도 내겐 영 그렇다. 이리 쓸 바에야 차라리 평범한 if-else 구문을 쓰는 게 낫지.

변수

선언 / 할당a=1 b="Hello" 변수를 선언하기 위한 키워드 같은 건 없다. var라거나 int라거나 float 같은 그런 거 없다. 그냥 새로운 변수 이름을 쓰면 알아서 변수가 생성된다.

다중 할당     a = b =1 이런 식의 할당은 다른 프로그래밍 언어에서도 가능하다.
    a, b =0,1 그런데, 특이하게도 파이썬에서는 여러 개의 변수를 한 번에 할당할 수도 있는데, 위와 같이 할당하면 a=0, b=1이 된다.
    a, b = b, a 위 문장은 a, b의 값을 서로 바꾸는 동작을 한다. 즉, 스왑.

변수명 다른 언어와 비슷한 규칙이 적용된다. 대소문자를 구분한다거나, 숫자로 시작할 수 없다거나, 키워드는 사용할 수 없다거나 등등. 참고로 파이썬의 키워드는 다음과 같은 코드를 통해서 확인할 수 있다.
importkeyword
defmain(): print(keyword.kwlist)#키워드 목록 (튜플) print(len(keyword.kwlist))#키워드 목록의 갯수
if__name__ =="__main__":     main()



메인 스크립트

#!/usr/bin/python3 # 가장 기본적인 메인 스크립트 템플릿 # byElex(http://python.elex.pe.kr/)

defmain(): print("Hello")
if__name__ =="__main__":     main()

파이썬 스크립트의 맨 첫 줄에는 파이썬 인터프리터의 경로를 지정한다. 현재 스크립트가 메인 모듈로써 실행되는 경우에는 __name__ 변수의 값이 "__main__"이 된다. 따라서, 이 스크립트는 메인 모듈로써 실행되는 경우에만 main() 함수를 처리하게 된다.