Python #5

jjewqm·2019년 11월 23일
0
post-thumbnail

is

python의 비교 연산자는 아래와 같다. isis notpython에만 있다.

isis not==, !=과 비슷하지만 다르다.
==, !=변수의 값을 비교한다.
isis not은 레퍼런스(C언어로 설명하자면 변수의 포인터)를 비교한다.
python의 변수는 내부적으로 데이터 그 자체를 가리키는게 아니라 인스턴스 포인터(값이 저장되어 있는 메모리의 주소, 즉 레퍼런스)를 가리킨다.
물론 C언어가 아니기 때문에 변수를 포인터처럼 엑세스 할 수는 없다.

a = 123
b = 123
a is b # True
id(a) #44464280
id(b) #44464280

하지만 위 코드를 보면 메모리 주소가 같고 True가 출력된다. 왜 그럴까?

Python은 자주 쓰이는 값이 미리 정의되어 있다.
숫자 123 은 자주 쓰이는 데이터여서 메모리에 고정되어 저장된다.
개발자가 이 데이터를 이용하려 할 때 새로운 데이터 공간이 할당되는게 아니라 미리 할당된 '자주 쓰이는 데이터가 저장된 공간'의 포인터를 매칭시킨다.

a = 'this is string. this is string this is string this is string'
b = 'this is string. this is string this is string this is string'
a is b # False
id(a) # 45021280
id(b) # 45021192

긴 문자열을 저장해 메모리에 새로운 데이터 공간이 할당되었다.
id() 함수를 사용해 확인결과 ab 변수의 메모리주소가 다르다.
반대로 1, 123, None 등의 값은 상수이거나 자주 쓰이는 값이므로 언제나 동일한 포인터가 할당된다.

결론

is, is not은 상수(None, True, False)와 자주 쓰이는 값에 쓰도록 하자.

if-else

다른 언어의 조건문과 마찬가지로 if-else로 조건을 판단한다.
Python의 특별한 점이 있다면 elif이다. elifelse if라는 뜻이다.

def age_check(age):
    print(f"you r {age}")
    if age < 18:
      print(f"you r {age}")
    elif age == 18 or age == 19:
      print(f"you r {age}")
    elif age > 20 and age < 24:
      print(f"you r {age}")
    else:
      print(f"you r {age}")

age_check(19)

for

for syntax : for [target list] in [expresiion list]
모든 값을 for in 반복문에 사용할 수 있는 것은 아니다.
string, tuple, list, dict, set 등이 가능하며 이 타입들은 iterable한 객체들이다. iterable한 객체란 반복가능한 객체를 의미한다.
요소들을 하나씩 리턴할 수 있는 객체들만 가능하다.

expr_list = [1,2,3,4,5]

for target_list in expr_list:
    print(target_list)

1 
2   
3
4
5

target_list 변수는 반복문이 실행될 때 생성된다.

module

모듈은 다른 파이썬 프로그램에서 불러와 사용하게 만든 파일로서 함수나 변수 또는 클래스를 모아 놓은 파일이다.
다른사람들이 만든 모듈을 불러와 사용할 수 있고 직접 만들어 공유할 수도 있다.

import math
print(math.floor(3.9) # 3
print(math.ceil(3.6) # 4

사용하려는 모듈을 import 해서 사용한다. math 모듈에서 floor, ceil 함수만 사용하는데 모든 함수를 import 하는건 비효율적이다.
이럴 경우 아래와 같이 작성한다.

from math import floor, ceil
print(floor(3.9) # 3
print(ceil(3.6) # 4

만약 사용하려는 함수의 이름을 바꾸고 싶으면 아래처럼 작성한다.

from math import floor, ceil as test_ceil
print(test_ceil(3.6) # 4

본 글은 노마드 코더의 Python으로 웹 스크래퍼 만들기를 정리합니다.

참고자료 :
http://seorenn.blogspot.com/2011/04/python-is.html
http://www.songtory.com/post/001001/1/264
https://docs.python.org/3/library/stdtypes.html#boolean-operations-and-or-not

profile
글쓰기를 좋아합니다.

0개의 댓글