`object` 는 repr(object) 함수와 같은 기능을 한다.

즉, 같은 결과물을 보여준다.


repr() 함수는 객체를  출력할 수 있는 문자열 형태로 변환하여 돌려주는 함수이다. 이 변환된 값은 주로 eval 함수의 입력으로 쓰인다.

 

※ str() 함수와의 차이점: str으로 변환된 값을 eval의 입력값이 될 수 없는 경우가 있다는 것이다.


Backticks는 python의 repr() 이라는 내장함수의 alias 이다.

그런데 Backticks는 더 이상 사용하지 말라는 deprecated가 적용되었다.


str은 실제 객체의 값과 다를 수가 있다.

eval(repr(obj))는 실제 obj와 동일한 값을 생성할 수 한다.

하지만 eval(str(obj))는 실제 obj와 동일한 값이 아니거나, 오류를 내는 경우가 있을 수 있다.


>>> f = 0.3

>>> f

0.29999999999999999

>>> print f

0.3

>>> print repr(f)

0.29999999999999999

>>> print str(f)

0.3




'Programming > Python' 카테고리의 다른 글

관계 연산자(<,>,<=,>=,==,!=)  (0) 2012.11.26
Decimal 자료형  (0) 2012.11.26
함수  (0) 2012.11.26
예약어 pass  (0) 2012.11.26
Python 제어문(if, for, while)  (0) 2012.11.25
Posted by scii
:

함수

Programming/Python 2012. 11. 26. 01:00 |

함수(Function) 란 하나의 이름으로 코드를 묶는 단위이다 함수로 작성된 프로그램은 디버깅이 간단하고, 수정이 쉬우며 관리하기 쉽다. 

함수는 반복적인 코드를 없애 주며 짧은 시간에 효과적으로 프로그램을 작성할 수 있게 해 준다.


함수를 정의하는 법

def 함수명(가인수들):

문들

(파라미터에 디폴트 값 줄 수 있음)


여기서, 가인수들이란 함수 호출 측에서 넘겨주는 파라미터를 받는 이름들을 의미한다. 함수를 호출할 때 넘겨주는 인수를 실인수라고 한다. 

즉, 실인수를 가인수한테 넘겨주는 것이다. 


파이썬은 동적인 인수 전달을 하므로 함수 선언 시에 인수의 형을 지정할 필요가 없다. 어떠한 형의 인수도 받을 수 있으며, 그 형에 맞는 + 연산이나 등등을 수행해준다. 

이러한 기능을 동적인 형 결정(Dynamic Typing)이라고 한다. 이러한 점은 python의 큰 장점이며, 다른 언어에서는 추가로 작성해야 할 많은 코드를 줄여 주는 요소이기도 하다.





C++의 Template 으로 만들어진 함수와 똑같다... 좋다!! 

이 기능만해도 코드라인 확 줄여주겠네

'Programming > Python' 카테고리의 다른 글

Decimal 자료형  (0) 2012.11.26
python의 Backticks ( repr() )  (0) 2012.11.26
예약어 pass  (0) 2012.11.26
Python 제어문(if, for, while)  (0) 2012.11.25
메모리 관리(쓰레기 수집) // 객체의 신원 식별  (0) 2012.11.25
Posted by scii
:

예약어 pass

Programming/Python 2012. 11. 26. 00:19 |

The pass statement does nothing. It can be used when a statement is required syntactically but the program requires no action. For example:

>>> while True: ... pass # Busy-wait for keyboard interrupt ... pass 는 아무것도 실행하지 않는다.

실행할 필요는 없는데 아무것도 넣지않으면 구문적인 오류가 발생할경우에 
사용하게 된다.

즉, pass 는 어떤 코드를 넣어야 하는데 그냥 지나가고 싶을 때 사용할 수 있다.

'Programming > Python' 카테고리의 다른 글

python의 Backticks ( repr() )  (0) 2012.11.26
함수  (0) 2012.11.26
Python 제어문(if, for, while)  (0) 2012.11.25
메모리 관리(쓰레기 수집) // 객체의 신원 식별  (0) 2012.11.25
파이썬의 객체 자료형  (0) 2012.11.25
Posted by scii
:

if 문

- if 문을 조건문이라고 한다. 어떤 조건에 맞으면 문들을 수행하고 그렇지 않으면 건너뛴다.


※ C / C++ 의 형식과 똑같다. 단지 else if가 elif로 바뀐 것 뿐.


if문의 일반적인 형식.

if 조건식1:

<문들1>

elif 조건식2:

<문들2>

else:

<문들3>

조건식 1이 참이면 <문들1>이 수행, 그렇지 않으면 조건식2를 검사해서 참이면 <문들2>가 수행된다. 그렇지 않으면 <문들3>이 수행된다.


주의할 점은 조건식이나 else 다음에 콜론( : )을 잊지 말고 입력해야 한다. 

콜론( : )은 다음 문들이 현재의 문 내부 블럭에 속한다는 것을 알려준다. (if, for, while 제어문들과 def, class와 같이 내부 블럭을 가지는 문들에서만 콜론이 사용된다.)


여기서 if-elif-else 는 줄(열)이 잘 맞아야 한다. 그렇지 않으면 에러가 발생한다. 또한, 문들도 줄이 일정하게 맞아야 한다.


선택문에 있어서 때로는 사전을 이용하는 것이 더 편할 때도 있다. if문을 이용한 것과 사전을 이용한 것과 동일한 결과를 보여준다.






for 문

- foreach 문하고 상당히 비슷하다.

for <타겟> in <객체>:

<문1>

else:

<문2>

<객체>는 시퀀스 형 자료여야 한다. <객체>의 각 항목은 <타겟>에 치환되어 <문1> 혹은 <문2>를 수행한다. 반복 횟수는 <객체>의 크기가 된다.


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

enumerate() 내장 함수는 (인덱스, 요소 값) 튜플 자료를 반복적으로 넘겨준다. 즉, iterate 한다.


ex) enumerate() 활용 예제.



for문의 else

for 문에서 else 블록은 for 문이 break 문으로 중단됨 없이 종료했을 때 수행된다. 







while 문

- for 보다 일반적인 반복 제어문이다. 헤더 부분의 조건식 테스트 결과가 참인동안 내부의 블록은 반복적으로 수행된다. 

else 부분은 조건식이 거짓이 되어 while 문을 빠져나올 때 수행된다. break로 빠져나올 때는 else 블록을 수행하지 않는다.

while <조건식>:

<문1>

else:

<문2>



Posted by scii
:

쓰레기 수집

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

추가로 필요한 메모리가 있으면 시스템에서 알아서 확장해 준다. 더 이상 사용되지 않는 객체들은 자동적으로 사라진다. 이러한 작업을 쓰레기 수집(Garbage Collection)이라 한다.

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



레퍼런스 카운트를 얻는 법

- sys 모듈의 getrefcount 함수를 이용하면 된다.


여기서 레퍼런스 카운트가 1씩 증가되서 출력되는 것은 getrefcount 함수가 이 객체를 처리하기 위해서 새로운 카운트 값을 1 증가시켰기 때문이다.

따라서, 실제의 카운트 값은 getrefcount 함수가 넘겨주는 값보다 1 작다.






객체의 신원 식별하기

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

a, b는 모두 같은 id의 객체를 가리키고 있다.

만일 두 이름 a, b가 같은 객체를 참조하고 있는가를 알려면 a is b를 이용한다.


여기서 a = 1, b = 1 했는데... 와우.. 이 결과를 보기 전까지 나는 a, b가 서로 다른 객체를 가리키고있지 않을까? 하며 생각했었다....

그런데 여기 결과는 같은 객체를 이름 a,b가 가리키고있다..

곰곰히 생각해보니 당연한 결과였다. 왜냐하면, 똑같은 객체를 굳이 다시 한번 만들필요없으니 말이다... 아항!!!

'Programming > Python' 카테고리의 다른 글

예약어 pass  (0) 2012.11.26
Python 제어문(if, for, while)  (0) 2012.11.25
파이썬의 객체 자료형  (0) 2012.11.25
변경 가능성 (python에서 정말 중요하다고 생각하는 개념)  (0) 2012.11.25
리스트, 튜플, 사전  (0) 2012.11.25
Posted by scii
:

'BooleanType'                                 -    부울 자료형

 'BufferType'                                   -    buffer() 함수로 생성된 버퍼 객체 형

 'BuiltinFunctionType'                        -    len(), sys.exit()와 같은 내장 함수의 이름

 'BuiltinMethodType'                         -    BuiltinFunction의 또 다른 이름

 'ClassType'                                   -    사용자 정의 클래스 자료형

 'CodeType'                                   -    compile() 함수에 의해 리턴되는 코드 객체 형

 'ComplexType'                              -    복소수형

 'DictProxyType'                            -    

 'DictType'                                    -    사전 형

 'DictionaryType'                            -    DictType의 또 다른 이름

 'EllipsisType'                                -    Ellipsis 자료형

 'FileType'                                    -    sys.stdout과 같은 오픈된 파일 객체 형

 'FloatType'                                  -    실수 형

 'FrameType'                                -    traceback 객체 tb 안의 tb.tb_frame과 같은 프레임 객체 형

 'FunctionType'                             -    사용자 정의 함수, 람다 함수 형

 'GeneratorType'                           -    발생자 객체

 'GetSetDescriptorType'                  -    

 'InstanceType'                            -    사용자 정의 클래스 인스턴스 형

 'IntType'                                    -    정수 형

 'LambdaType'                            -    FunctionType의 또 다른 이름

 'ListType'                                  -    리스트 형

 'LongType'                                -    롱 형

 'MemberDescriptorType'               -        

 'MethodType'                            -    사용자 정의 클래스 인스턴스의 메쏘드 형

 'ModuleType'                            -    모듈 형

 'NoneType'                              -    None 객체 자료형

 'NotImplementedType'                -    

 'ObjectType'                            -    

 'SliceType'                              -    slice()에 의해 리터된 자료형

 'StringType'                            -    문자열 형

 'StringTypes'                           -    StringType과 UnicodeType을 모두 포함하는 타입. 일반 문자열, 유니 코드 문자열을 

같이 취급하고자 할 때. (ex : isinstance(s, StringTypes))

 'TracebackType'                      -    sys.exc_traceback과 같은 traceback 객체 형(1.5 이후에 사용하지 않음)    

 'TupleType'                            -    튜플 형

 'TypeType'                            -    type 객체의 자료형(type()으로 리턴되는 자료형)

 'UnboundMethodType'             -    MethodType의 또 다른 이름

 'UnicodeType'                        -    유니 코드 문자열 형(ex: u'Spam')

 'XRangeType'                         -    xrange()에 의해 리턴된 range 형

 '__builtins__'                          -    

 '__doc__'                              -    

 '__file__'                               -    

 '__name__'                            -    

 '__package__'                        -    



Posted by scii
:

python 자료형의 분류


 자료형

저장 모델 

변경 가능성 

접근 방법 

수치 형 

리터럴(scalar) 

불가 

직접 

문자열 

리터럴 

불가 

시퀀스 

튜플 

저장 

불가

시퀀스 

리스트 

저장 

가능 

시퀀스 

사전 

저장 

가능 

매핑(mapping) 






















자료형들을 구분하는 또 다른 중요한 구분 기준.

- 자료 값을 변경할 수 있는가? 이다.


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


변경 가능한 자료형 - 리스트, 사전

변경 가능하지 않은 자료형 - 숫자, 문자열, 튜플




ex) >>> a = 1

>>> a = 2

이렇게 있다고 생각한다면...

결론부터 말해서 a는 숫자 2로 변경된 것이 아니다. 

1은 변경되지 않고 다만 a가 다른 객체(2)를 참조할 뿐이다.

※ python 에서는 객체와 이름은 별도로 관리된다. 이름에 직접 값이 저장되는 것이 아니고, 이름은 언제나 객체를 참조(Referencing) 하게 되어 있다.


a    --->    1    # a=1 한 후

a    --->    2    # a=2 한 후 ( 객체 1은 참조되지 않으므로 버려진다.)


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

즉, 이름에 의해 참조만 바뀌는 것.


ex) >>> L1 = [1,2]

>>> L2 = [3,4]

이것도 마찬가지로 이름에 의해 참조만 바뀌는 것이다. 

그러나 객체 내부의 값을 변경할 때에, 리스트는 값을 변경할 수 있다.


즉, 어떠한 이름으로 객체 전체를 바꾸는 것은 객체 전체를 변경하는 것이 아니며, 새로운 객체를 할당하는 것이다.


객체 변경의 의미는? 객체 내부의 값을 변경할 수 있는가이다.





python의 이름이라는 것이 c/c++의 포인터와 참조자의 개념과 정말 똑같다. 이름(변수)를 포인터 혹은 참조자라고 인식하면 될 것 같다.

Posted by scii
:

리스트

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


리스트는 메쏘드(객체 함수)를 가진다.




튜플

()를 사용하는 튜플도 문자열과 리스트와 유사한 특정을 가진다.


튜플과 리스트의 차이라면, 튜플은 값의 변경이 안 되고, 리스트는 가능하다는 것이다.


또한, 리스트는 다양한 메쏘드를 가지지만, 튜플은 그렇지 않다.




사전

사전은 옵셋이 아닌 키를 사용하여 값을 얻는 자료 구조이다. 이것은 사상 함수와 같은 역할을 한다. 

함수 f는 f:x -> y와 같이 x를 y로 사상시킨다. 사전의 역할이 이와 동잃다. 사전에 x라는 키(key)를 주면 값 y를 돌려준다.

또한 키에 대응하는 값(value)을 저장할 수도 있다.

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



Posted by scii
: