본문 바로가기

파이썬

(62)
[python] nonlocal 키워드 그리고 global 와의 차이점 파이썬 코딩 테스트를 풀다가 문제가 안풀려서 찾다보니 nonlocal 키워드라는 것을 알게 되었다. nonlocal 키워드를 알기 전에 내가 겪게된 문제 상황을 먼저 설명하는 것이 좋을것 같다. 문제 상황 def test(): a = 3 def sum(): a = 7 return True sum() return a result = test() # 3이 출력됨 print(result) 일단 파이썬 함수 안에서는 함수를 따로 정의할 수 있고, 내부에 정의된 함수는 자신을 정의한 함수의 변수에 접근할 수 있다. (이런 기능을 클로저라고 한다) 원래 의도는 sum 함수 내에서 a 값을 7로 변경하고 이를 test 함수에서 return 하는 것이다. (물론 실제 겪었던 문제는 훨씬 복잡했지만 이해를 위해 간단한 ..
[python] 두 변수의 값 비교 및 같은 객체인지 확인하는 assert문 파이썬을 쓰다보면 두 변수의 값과 가리키는 객체가 같은지를 비교해야 할 떄가 있다. 보통 값을 비교할 떄는 == 을, 객체를 비교할 때는 is를 쓴다. >>> a = [1,2,3] >>> b = [1,2,3] >>> a is b False >>> a == b True a와 b 리스트의 값은 같지만, 두 변수는 가리키는 객체가 다르다. 만약 '두 변수의 값이 같고 두 객체는 서로 달라야 한다'라는 조건이 필요하면 아래와 같이 assert를 통해 해당 경우가 아닐떄 에러를 유발시킬 수 있다. >>> assert b == a and b is not a >>> a = [1,2,3] >>> b= a >>> assert b == a and b is not a Traceback (most recent call las..
[python] 파이썬 버전 확인하기 파이썬 버전을 알아보는 방법은 다음과 같다. CLI를 통해서 버전 확인하기 $ python --version Python 2.7.17 $ python -V Python 2.7.17 --version 그리고 -V 두개 옵션으로 파이썬 옵션을 확인할 수 있다. 현재 2.7.17인 것을 알 수 있다. 참고로 버전은 각각의 자리에 따른 의미가 있다. 앞에서 순서대로 * Major 버전 * Minor 버전 * Micro 버전 을 뜻한다. 코드를 통해서 버전 확인하기 >>> import sys >>> print(sys.version) 2.7.17 (default, Feb 27 2021, 15:10:58) sys 모듈의 version을 확인하면 파이썬 버전을 코드로 확인할 수 있다. 또 다른 방법으로는 sys.ver..
[python] 파이썬에서 전역 변수 사용하기 - global 파이썬에서 전역변수를 사용하다가 예상대로 코드가 실행되지 않는다는 것을 발견했다. 전역변수 사용의 잘못된 코드 # 전역 변수 val = False def change_val(): # 아래 val은 함수내의 '지역변수'다. val = True change_val() print(val) >> False val이라는 전역 변수를 change_val 이라는 함수내에서 변경하려고 했으나 변경되지 않고 False 값이 그대로 출력되었다. 이는 C언어의 문법을 기반으로 생각했기 때문에 함수 내에서 변수값이 변경될거라 생각했다. 하지만 파이썬 함수 내에서 전역 변수를 수정하려면 global 키워드를 통해서 전역변수임을 명시해주어야 한다. 그렇지 않으면 그저 함수내에 지역 변수로 인식될 것이다. 전역변수를 사용할래요 -..
[python] pip와 python 버전이 다를때 pip 설치하기 파이썬에서 pip 를 이용해 requests 모듈을 설치했는데, 정작 파이썬 스크립트를 돌리니 requests 모듈을 찾을 수 없다. $ pip install requests Requirement already satisfied: requests in /usr/local/lib/python3.7/dist-packages (2.26.0) Requirement already satisfied: charset-normalizer~=2.0.0 in /usr/local/lib/python3.7/dist-packages (from requests) (2.0.9) Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-pac..