본문 바로가기

Programming

2장 파이썬 문과 기본 자료형

출처 : 열혈강의 파이썬

posted by _cham

   

@연속 라인

백슬래시(\)를 이용하면 현재 라인과 다음 라인을 하나의 라인으로 간주한다.

and 다음에 그냥 엔터를 치면 에러가 뜬다. \를 붙이니까 에러가 안나고 자~알 된다.

   

   

   

@콘솔 입 출력

   

우선 가장 기본적인 입력받는 방법은 input( )을 사용하는 것이다.

input( ) 괄호안에 문자를 집어넣으면 입력받을 때 그 문자열을 출력해준다. 그 예는 바로 밑 그림에 같이 있다.

   

만약 정수나 실수 등의 값을 원한다면 raw_input( )을 사용해서 문자열을 받은 후 수치 형으로 변환하거나 input을 이용한다.

한글도 입력이 가능하다. k를 그대로 출력해보면 이상한 16진수 값으로 되어있다.

이것을 print로 출력하면 한글이 제대로 보인다.

   

이제 출력하는 가장 기본적인 print함수를 보자

맨 윗줄에서 보다시피 콤마(,)로 print를 쭉 이어서 출력할 수 있다. 자동으로 스페이스로 구분을 해준다.

세미콜론(;)으로 나눠주면 자동으로 개행을 해준다.

   

   

@자료형

자료형

설명

예 

 수치형(Numbers)

정수, 롱형, 실수, 복소수 등 표현 

 1,13L, 14.2, 1+2j

 문자열(Strings)

 문자

 'aa' "bb"

 리스트(Lists)

 순서를 가지는 임의 객체의 집합

 ['aa','bb']

 사전(Dictionaries)

 순서를 가지지 않는 객체의 집합. 키 값으로 꺼냄. 자바의 Map 과 비슷.

 {'aa':1, 'bb':2}

 튜플(Tuples)

 순서를 가지는 임의의 객체의 집합.

리스트와 기본적으로 같지만 내용변경이 안됨

('aa', 'bb') 

 파일(Files)

파일에 자료를 입출력하기 위한 객체

f = open('aa') 

   

   

@@문자열

우선 문자열(Strings)은 문자들(텍스트)를 표현하기 위한 자료형이다. 문자열들은 단일 싱글쿼터 ' ' 나 더블쿼터 " " 안에 묶여진 문자들의 모임이다.

   

@@@Indexing과 Slicing

문자열을 표현하는 방법에는 크게 Indexing과 Slicing 2가지가 있다.

   

우선 Indexing을 살펴보자

그냥 s를 출력하면 전체를 출력

[0]부터 인덱스로 출력 가능

[-1]은 맨 뒤를 가리킴

[-2]는 맨 뒤에서 하나씩 앞으로 오는것

   

이제 Slicing을 살펴보자

Slicing은 세 가지 값을 가질 수 있다. (Start:Stop:Step) 이렇게 정의되어 있다.

만약 생략되었을 경우에 Start는 0, Stop은 자료형의 크기, Step은 1의 값을 가진다.

   

H e l l o W o r l d !

0 1 2 3 4 5 6 7 8 9 10 11

s에는 'Hello World!'의 값이 들어있다.

이걸 보면 Slicing에 대해 대충 이해가 되는가?

   

연결(+)과 반복(*)의 연산도 적용 가능하다.

   

문자열은 값이 변경되지 않는다.

따라서 문자열 변경을 원하면 슬라이싱과 연결하기를 이용하면 된다.

'H' 가 'h' 로 변경되었다.

   

문자열의 길이는 len 내장 함수를 이용한다.

멤버십테스트(이게뭐지…;;여튼..)를 이용하여 부분 문자열의 존재를 확인할 수 있다.

   

@@리스트

[ ]를 사용하는 리스트는 임의의 객체를 저장하는 집합적 자료형이다. 각 자료는 순서를 가지고 있고, 순서에 따라 접근 가능하다.

   

문자열과 같이 Slicing과 Indexing이 가능하다

   

   

리스트는 이와 같이 다양한 메소드를 가지고 있다.

   

물론 중간에도 삽입 가능하다

   

   

@@튜플

튜플도 문자열이나 리스트와 같지만 차이라면, 튜플은 값의 변경이 안 되고, 리스트는 가능하다는 것이다.

   

@@사전

사전은 offset이 아닌 key를 사용하여 값을 얻는 자료형이다. 어떤 key를 주면 value 값을 돌려주는 구조이다.

사전을 초기화 할때 { } 를 사용하고, 초기 값은 '키':'값' 의 형태로 준다.

뽑아내고 싶은 값의 key값을 이용하여 value값을 뽑아낸다.

key값이 없을 때에는 항목이 추가된다.

key값이 존재할 때에는 value값이 변경된다.

   

사전을 리스트나 튜플로 변환하는 것도 가능하다.

   

   

   

@내장 자료형의 분류

   

@@자료 저장 방법에 따른 자료형의 분류

자료형

설명

직접 자료형(Direct)

직접 자료를 표현하는 자료형이다.

수치 형이 여기에 속한다.

정수, 실수, 롱형 정수, 복소수

시퀀스 형(Sequence)

다른 자료를 포함하는 자료형이다.

순서를 가지는 집합적 자료형이다

리스트, 문자열, 튜플

매핑 형(Mapping)

다른 자료를 포함하는 자료형이다.

순서를 가지지 않는 집합적 자료형이다.

사전

   

@@변경 가능성에 따른 자료형의 분류

자료형

설명

변경 가능 형(Mutable)

자료의 값을 변경할 수 있다.

리스트, 사전

변경 불가능 형(Immutable)

자료의 값을 변경할 수 없다.

수치 형, 문자열, 튜플

   

한 가지 종류의 객체만 저장할 수 있는가(리터럴 형) 다른 여러 가지 객체를 저장할 수 있는가(저장 형)에 따라서 분류할 수도 있다.

@@자료 저장 개수에 따른 자료형의 분류

자료형

설명

리터럴 형(Literal/Scalar)

한 가지 객체만 저장한다

문자열, 수치 형

저장 형(Container)

여러 가지 다른 객체를 저장한다.

리스트, 튜플, 사전

   

@@전체 자료형의 분류

자료형

저장 모델

변경 가능성

접근 방법

수치 형

리터럴

불가

직접

문자열

리터럴

불가

시퀀스

리스트

저장

가능

시퀀스

튜플

저장

불가

시퀀스

사전

저장

가능

매핑

   

@변경 가능성

자료형을 구분하는 중요한 구분 기준중에 하나는 자료의 값을 변경할 수 있는가이다.

변경할 수 있는 자료형을 '변경 가능하다Mutable'고 하고, 그렇지 않으면 '변경 가능하지 않다.(Immutable)'고 한다.

자세한 건 위 표를 보자

   

예를 들어 리스트는 이렇게 변경이 가능하다.

   

하지만 문자열이나 튜플은 예외를 발생시킨다.

   

이걸 보면 값이 바뀐게 아니냐는 생각을 할 수도 있을 것이다.

이것은 실제로 값이 바뀐 것이 아니다. 1은 변경되지 않고 다만 a가 다른 객체 2 를 참조할 뿐이다. 이것을 이해하기 위해서는 객체와 이름이라는 개념을 이해해야 한다. 파이썬에서는 객체와 이름은 별도로 관리된다. 이름에 직접 값이 저장되는 것이 아니고, 이름은 언제나 객체를 참조(Referencing)하게 되어 있다.

   

결국, 숫자 객체 1은 값이 변경되지 않았다. 이름 a가 다른 객체를 참조하게 된 것 뿐이다. 이때 객체 1은 참조되지 않으므로 메모리에서 제거된다.

리스트의 예에서도 리스트 내부의 값을 변경했을 경우에는 값이 변경이 된다. 하지만 리스트 자체를 변경하였을 경우에는 객체 전체를 변경하는 것이 아니며, 새로운 객체를 할당하는 것이다. 객체 변경의 의미는 객체 내부의 값을 변경할 수 있는가이다.

   

@자료형 확인과 기타 자료형

파이썬 전체 자료형의 종류를 알아보려면 모듈 types를 이용해보자

   

@메모리 관리

파이썬에서는 특별히 사용자가 관리해야 할 메모리는 없다. 모두 자동으로 생성되고 자동으로 환원된다.

파이썬은 모든 것이 객체로 관리되며, 모든 객체는 레퍼런스 카운트(Reference Count)라는 값을 가지고 있다. 이것은 얼마나 많은 부분에서 객체를 참조하고 있는가를 나타내 주는 정수이다. 만약 이 값이 0이라면 자동으로 메모리에서 제거된다.

   

>>> x=y=z=500

여기서 객체 500은 레퍼런스 카운트 값이 3이다.

>>> del x

여기서 객체 500은 레퍼런스 카운트 값은 2가 된다. x로부터의 링크를 없앴기 때문이다.

>>> y=1

>>> z=2

이렇게 해서 객체 500의 모든 링크가 없어졌다. 레퍼런스 카운트가 0이 된다. 따라서 이 시점에 객체 500은 메모리에서 제거된다.

   

@레퍼런스 카운트 얻는 법

여기서 레퍼런스 카운트가 2가 된 것은 getrefcount 함수가 이 객체를 처리하기 위해서 새로운 카운트 값을 1 증가시켰기 때문이다. 따라서 실제의 카운트 값은 getrefcount 함수가 넘겨주는 값보다 1 작게 생각하면 된다.

   

@객체의 신원 식별하기

평소에는 필요 없겠지만 id 내장 함수를 이용하면 객체의 주소를 식별할 수 있다. 두 객체의 id가 동일하다면, 같은 객체를 참조하고 있는 것이다.

위와 같이 'a is b' 를 이용하여 같은 객체를 참조하고 있는지 알 수 있다.
b=a 이런식으로 초기화했다면 b와 a는 같은 객체를 참조하고 있다.

하지만 c=500 처럼 새로운 객체로 초기화하면 다른 객체를 참조하게 된다.

   

   

@파이썬 제어문

@@if문

기본형태->

   

if 조건식1:

문1

elif 조건식2:

문2

else:

문3

   

c언어나 다른 언어와 다르게 중괄호 묶지 않고 : (콜론) 을 사용한다. 콜론은 다음 문들이 현재의 문 내부 블록에 속한다는 것을 알려준다. 그리고 그것을 구분하는 것은 들여쓰기이다. 들여쓰기가 끝나면 블록이 끝나는 것이다

예를 한번 보자

   

만약 if블록 내의 문이 1개만 존재할 경우에는 한 줄에 붙여 쓸 수도 있다.

   

@@들여쓰기와 제어문

파이썬은 들여쓰기에 대단히 민감한 언어이다. 처음 쓰기에는 좀 불편할지도 모르나, 이 기능으로 인해 프로그램은 깔끔하게 정렬되고 누구나 보기 쉬운 코드를 작성하게 된다.

파이썬은 for나 while문이나 함수 사용시 {} 중괄호가 존재하지 않는다

모든 구분은 공백으로 구분하기 때문에 tab이나 space로 구분을 해줘야 한다.

주의할 점은 모두 같은 사이즈로 공백을 구분해줘야 한다는 것이다.

  1. 가장 바깥쪽에 있는 블록의 코드는 반드시 1열부터 시작해야 한다.
  2. 내부 블록은 같은 거리만큼 들여쓰여져야 한다.
  3. 블록의 끝은 들여쓰기가 끝나는 부분으로 간주한다.
  4. 탭과 공백을 섞어서 쓰는 것은 좋지 않다.
  5. 들여쓰기 간격은 일정하기만 하면 된다

   

   

@@for문

for 타겟 in 객체:

문1

else:

문2

   

객체는 시퀀스 형 자료여야 한다.

예제를 보자

   

객체가 리스트라면 각 항목이 x로 하나씩 치환되면서 print문을 수행한다

   

객체를 range로 사용하여 순차적으로 숫자를 반복할 수 있다.

x뒤에 콤마를 쓰면 개행을 하지 않는다.

   

   

   

for문을 사용할때 요소의 값 뿐만 아니라 인덱스 값도 함께 필요하다면 enumerate( ) 내장함수를 이용하자

   

   

for 에서의 else 문

for에서 else문은 for문이 break문으로 중단됨이 없이 종료했을 때 수행된다. break문으로 중단되었다면 for문 바깥으로 제어가 이동한다.

 

   

   

@@while문

while문도 for와 같이 else부분은 break로 빠져나올 때는 수행되지 않고, 조건식이 거짓이 되어 while문을 빠져나올 때 수행된다.

while 조건식:

문1

else:

문2

   

for와 같으므로 한가지 예만 보고 넘어가겠다

   

   

@함수

함수(Function)란 하나의 이름으로 코드를 묶은 단위이다.

어떤 결과값을 함수 호출 측으로 되돌려주려면 return 결과 값을 사용한다.

=>함수를 정의하는 방법

def 함수명(가인수들(파라미터들)):

문들

   

예제를 보자

가장 일반적인 add함수 구현

   

파라미터를 지정해서 넣을 수도 있다. 다른 파라미터를 넣으면 에러를 일으킨다.

   

파라미터에 디폴트 값을 줄 수도 있다. 만약 파라미터를 넘기지 않으면 디폴트 값이 들어가게 된다.

   

   

   

휴 이래서 2장 끝!!!!!!!!!1

정리한다고 죽는줄 알앗네…….ㅠㅠ

'Programming' 카테고리의 다른 글

gcc 기본  (0) 2014.07.01
5장 리스트  (0) 2011.08.13
4장 문자열  (0) 2011.08.13
3장 수치 자료형과 연산자  (0) 2011.08.08
1장 파이썬 시작하기  (2) 2011.08.06