본문 바로가기

Python

[Python] 파이썬 문법 - is 와 ==의 차이 | python is & == 출처: 파이썬 알고리즘 인터뷰, 박상길 파이썬의 비교연산자 중 is와 ==가 있다. 이 둘은 파이썬의 객체 구조와 관련이 깊다. is id() 값을 비교하는 함수이다. None은 null로서 값 자체가 정의되어 있지 않으므로 ==로 비교불가하다. if a is None: pass == 값을 비교하는 연산자이다. 예시 a = [1, 2, 3] a == a # True a == list(a) # True a is a # True a is list(a) # False 값은 동일하지만 list()로 한 번 더 묶어주면, 별도의 객체로 복사되고 다른 id를 갖게 된다. 따라서 is는 False가 된다. a = [1, 2, 3] a == copy.deepcopy(a) # True a is copy.deepcopy(.. 더보기
[Python] print | .join() | f-string print문을 이용해 python에서 출력하는 여러가지 방법들 정리 print('A1', 'B2') # A1 B2 p print('A1', 'B2', sep=',') # A1, B2 print('aa', end=' ' ) print('bb') # aa bb a = ['A', 'B'] print(' '.join(a)) # A B idx = 1 fruit = "Apple" print('{0}: {1}'.format(idx + 1, fruit)) # 2: Apple print('{}: {}'.format(idx + 1, fruit)) # 2: Apple print(f'{idx+1}: {fruit}') # 2: Apple - f-string은 파이썬 3.6+에서만 지원한다. 더보기
[Python] range | generator의 방식을 활용하는 대표적 함수 ragne는 제너레이터의 방식을 활용하는 대표적인 함수이다. 주로 for 문에서 쓰이며 쓰임은 다음과 같다. list(range(5)) # [0, 1, 2, 3, 4] range(5) # type(range(5)) type(range(5)) # for i in range(5): print(i, end= ' ') # 0 1 2 3 4 a = [n for n in range(1000000)] b = range(1000000) len(a) # 1000000 len(b) # 1000000 len(a) == len(b) # True b # range(0, 1000000) type(b) # sys.getsizeof(a) # 8697464 sys.getsizeof(b) # 48 둘다 동일한 100만 개.. 더보기
[파이썬] 타입 힌트 | Type Hint | PEP 484 파이썬은 대표적인 동적 타이핑 언어임에도, 타입을 지정할 수 있는 타입 힌트가 PEP484 문서에 추가되었다. 형태는 다음과 같다. # 변수 a: str = "1" b: int = 1 # 함수 def fn(a: int) -> bool: 타입 힌트를 명시적으로 선언하게 되면 가독성이 좋아지면 버그 발생 확률을 줄일 수 있다. 실제로는 강제 규약이 아니다 보니, 여전히 동적으로 할강될 수 있으므로 주의가 필요하다. mypy를 사용하면 타입 힌트에 오류가 있는지 자동으로 확인할 수 있다 pip install mypy mypy solution.py 더보기
[selenium] “Element Is Not Clickable at Point” 해결법 | 팝업창 전환 python에서 selenium으로 웹 크롤링을 할 때, “Element Is Not Clickable at Point”에러가 날 때가 있다 위의 예시 그림과 같이, 웹 페이지의 정보가 팜업형태로 나타날 때, 팝업 창 위의 element를 크롤링 할 때 나타나는 에러이다. 팝업창에 마우스를 가져다 대서, inspect element를 해봤다. 자세히 보면 팝업 창의 형태는 iframe 내에 새로운 html이 들어가 있는 모양임을 알 수 있다. # switch to iframe driver.switch_to.frame('jqxIframe1') time.sleep(3) selenium의 switch_to.frame을 이용해, 해당 frame의 id로 창을 전환한 뒤, 잠시 멈췄다가 창 내의 e.. 더보기
[윤성우의 열혈 파이썬 중급편] 34. __name __ & __main __ 출처 : 윤성우의 열혈 파이썬 : 중급 34. __name __ & __main __ __name __ # who_are_you.py def main(): print('file name: who_are_you.py') print('__name__: {0}'.format(__name__)) main() # importer.py import who_are_you print('play importer') print('__name__: {0}'.format(__name__)) # file name: who_are_you.py # __name__: who_are_you # play importer # __name_: __main__ 파이썬은 파일별로 각각 변수 name을 만든다 실행이 시작되는 스크립트 파일의 n.. 더보기
[윤성우의 열혈 파이썬 중급편] 33. 클래스 메소드와 static 메소드 33. 클래스 메소드와 static 메소드 클래스 변수에 대한 이해 class Simple: cv = 20 def __init__(self): self.iv = 10 Simple.cv # 20 s = Simple() s.cv # 20 s.iv # 20 첫 대입 연산에서 생성되는 변수를 가리켜 '인스턴스 변수'라고 한다 그리고 이는 각 객체별로 존재한다 즉, 객체에 속한 변수이다 변수를 클래스 안에도 둘 수 있다 이는 '클래스 변수'가 된다 클래스 변수는 클래스 이름을 통한 접근을 권한다 # count_instance.py class Simple: count = 0 def __init__(self): Simple.count += 1 def get_count(self): retu.. 더보기
[윤성우의 열혈 파이썬 중급편] 31. nested 함수와 closure 출처 : 윤성우의 열혈 파이썬 : 중급 31. nested 함수와 closure 함수를 만들어서 반환하는 함수 def maker(m) def inner(n) return m * n return inner f1 = maker(2) f2 = maker(3) f1(7) # 14 실제 변수 m을 참조하게 되는 순간, maker 함수의 밖이다 f2(7) # 21 파이썬의 함수는 객체이므로 다른 함수를 호출할 때 인자로도 전달이 가능하다 예제에서 정의한 inner 함수가 변수 m의 값을 어딘가에 살짝 저장해 놓고 쓴다 '안쪽에 위치한 네스티드 함수'가 자신이 필요한 변수의 값을 어딘가에 저장해 놓고 쓰는 테크닉을 가리켜 클로저라고 한다 저장된 위치 확인하기 def maker(m): def inner(.. 더보기
[윤성우의 열혈 파이썬 중급편] 30. property 출처 : 윤성우의 열혈 파이썬 : 중급 30. property 안전하게 접근하기 # natural.py class Natural: def __init__(self, n): if(n < 1): self.__n = 1 else: self.__n = n def getn(self): return self.__n def setn(self, n): if(n < 1): self.__n = 1 else: self.__n = n def main(): n = Natural(-3) print(n.getn()) n.setn(2) print(n.getn()) main() # natural2.py class Natural: def __init__(self, n): self.setn(n) def getn(self): return .. 더보기
[윤성우의 열혈 파이썬 중급편] 29. __slots __의 효과 출처 : 윤성우의 열혈 파이썬 : 중급 29. __slots __의 효과 __dict __의 단점과 그 해결책 # point_3d.py class Point3D: def __init__(sefl, x, y, z): self.x = x self.y = y self.z = z def __str__(self): return &#39;({0}, {1}, {2})&#39;.format(self.x, self.y, self.z) def main(): p1 = Point3D(1, 1, 1) p2 = Point3d(24, 17, 31) print(p1) print(p2) main() # point_slots.py class Point3D: __slots__ = (&#39;x&#39;, &#39;y&#39;, &#39;.. 더보기