Python 266

[Python] 중첩 함수

중첩 함수 함수 안에 생성한 함수. 즉, Python은 함수 정의 안에 다름 함수를 정의할 수 있다. def print_hello(): hello = 'Hello, world!' def print_message(): print(hello) print_message() print_hello() print_hello() 함수 내에서 정의한 중첩 함수 print_message()는 선언한 함수 내에서 호출해도 실행되지 않는다. 바깥의 print_hello()가 호출되어야 중첩 함수가 실행된다. 지역 변수 범위 중첩 함수 print_message()는 print_hello()의 지역 변수 hello를 사용할 수 있다. nonlocal 전역 변수와 비슷하게, 중첩된 함수의 바깥쪽 함수의 지역 변수를 안쪽 함수에서..

Python 2022.10.03

[Python] 전역/지역 변수와 범위

전역 변수와 지역변수 전역 변수(global variable) 함수를 포함해 스크립트 전체에서 접근할 수 있는 변수. 전역 변수에 접근할 수 있는 범위를 전역 변수(global scope)라고 한다. x = 10 # 전역 변수 def foo(): print(x) # 전역 변수 출력 foo() print(x) # 전역 변수 출력 지역 변수(local variable) 변수를 선언한 블록 내에서만 접근할 수 있는 변수. 지역 변수를 접근할 수 있는 범위를 지역 범위(local scope)라고 한다. def foo(): x = 10 # 지역 변수 print(x) # 지역 변수 출력 foo() print(x) # 지역 변수 출력 foo() 밖에서 변수 x에 접근하려고 하면 오류가 발생한다. global 키워드 ..

Python 2022.10.01

[Flask] 요청(Request) 데이터 접근

Request Flask에서 요청 데이터에 접근할 때는 Request의 하위 클래스인 flask.request 모듈을 사용한다. 요청 데이터를 파싱 하여 전역 객체로 데이터를 접근하게 해 주며, 내부적으로 다중 스레드 환경에 있더라도 활성화된 요청 스레드에 대해 적절한 데이터를 얻는 것을 보장한다. 2022.09.17 - [Flask] REST API 만들기에서 요청 데이터에 접근하는 방법에 대해 별다른 설명이 없었는데, 아무래도 간단히 적어두는 것이 좋을 것 같아 정리한다. 요청 데이터에 접근하여 그 값을 텍스트 또는 JSON 형식으로 응답해보자. reqeust 모듈 import flask.request 모듈을 사용하기 위해서 먼저 모듈을 import 해야 한다. from flask import req..

Python 2022.09.23

[Flask] REST API 만들기

개요 2022.09.16 - [Flask] 웹 애플리케이션 만들기 에서 여러 개의 URL을 가지고, 동적 URL을 지원하는 웹 애플리케이션을 만들어봤다. 이 글에서는 간단한 REST API를 만들어보려고 한다. 먼저 개념적인 내용부터 간단히 정리한다. REST와 REST API REST Representational State Transfer의 약자. 자원의 이름을 기반으로 하여 상태를 주고받는 것을 의미한다. JSON, XML을 통해 데이터를 주고받는다. REST API API(Application Programming Interface)란 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 의미한다. 즉, REST API는 REST 기..

Python 2022.09.17

[Flask] 웹 애플리케이션 만들기

Flask Python으로 작성된 마이크로 웹 프레임워크로, Werkzeug 툴킷과 Jinja2 템플릿 엔진을 기반으로 한다. Python 웹 프레임워크는 대표적으로 Django와 Flask를 사용한다. Django : 풀 스택 프레임워크. 강력한 모듈이 기본적으로 탑재되어 있어 완성도가 높다. 하지만 사용하지 않는 모듈도 포함되어 있어 다소 무겁고, 프레임워크 학습에 시간이 필요하다. 참고로 발음 기호는 ˈdʒæŋɡoʊ(쟹고)로 표기된다. Flask : 웹 애플리케이션 개발에 필요한 모듈만 포함된 경량 프레임워크. 다양한 웹 엔진과 붙여 사용할 수 있고, 가벼워 Django와 함께 사용할 수도 있다. Flask는 코드가 단순하고 API 관련 확장 기능이 많아 API 서버를 만들기에 편리하다. 이 글에서..

Python 2022.09.16

[정규 표현식] sub - 문자열 치환

sub(pattern, repl, string, count=0, flags=0) sub 함수를 사용하면 정규 표현식과 일치한 부분을 다른 문자로 치환할 수 있다. 이름, 전화번호 등 개인 정보를 마스킹하는 경우에 활용할 수 있다. 사용 방법 매개변수로 패턴과 치환 문자열(repl), 치환 대상 문자열(string)을 전달받는다. 패턴을 찾지 못하면 전달받은 string을 변경하지 않고 반환한다. 예로 들어, 아래와 같은 휴대전화 번호 목록이 있다고 하자. 010-1234-5678 010-0000-0000 010-9876-5432 휴대전화 번호는 개인을 식별할 수 있는 정보이기 때문에 가운데 4개 숫자만 ****로 마스킹하고자 한다. sub 함수에서도 그룹 재참조가 가능하다. 따라서 첫 번째 자리와 세 번..

Python 2022.08.31

[정규 표현식] Group

() : Group 특정 문자가 아니라, 특정 문자열이 반복되는지 확인할 때에는 () 메타 문자를 이용해 문자열을 그룹화하여 확인할 수 있다. import re g = re.search('(ABC)+', 'ABCABCABC OK?') print(g) re.groups() () 메타 문자로 확인한 문자열 목록을 튜플 형태로 반환한다. import re g = re.search(r'(\d{2})-(\d{3,4})-(\d{4})', '02-123-1234') print(g.groups()) re.group(int) () 메타문자로 확인한 문자열을 반환한다. 매개변수로 전달된 값이 없거나 0인 경우에는 일치한 모든 문자열을 반환한다. 매개변수로 전달된 값이 0이 아닌 숫자 n인 경우에는 n번째 그룹에 일치한 문..

Python 2022.08.29

[Python] re - 정규 표현식을 이용한 문자열 검색

re 파이썬의 기본 라이브러리 중 하나로 정규 표현식을 지원하기 위한 모듈이다. re는 regualr expression의 약자다. 사용법 기본 라이브러리이므로 별도 설치 없이 import하여 사용할 수 있다. import re p = re.compile('ab*') re 모듈은 4개의 문자열 검색 모듈을 제공한다. match 문자열의 처음부터 시작해서 정규식이 일치하는지 확인한다. match 객체 또는 None을 반환한다. import re print(re.match('[a-z]+', 'python')) print(re.match('[a-z]+', '3 python')) 문자열 "3 python"의 경우, 처음에 위치한 3이 [a-z]+을 만족하지 않아 None을 반환한다. search 문자열 전체를 ..

Python 2022.08.26

[Python] if __name__ == '__main__'

개요 Python 코드를 보다 보면 아래와 같은 부분을 발견하게 된다. if __name__ == '__main__': ... 이 글에서는 이 코드에 대한 의미와 왜 사용하는지에 대해 정리하려고 한다. __name__ 모듈의 이름이 저장되는 변수로 import로 모듈을 가져왔을 때는 모듈의 이름이 들어간다. 하지만 모듈을 직접 실행하면 __main__이 들어간다. 예시로 아래와 같은 plus 함수를 가진 calc 모듈이 있다고 하자. 그리고 이 모듈을 직접 또는 import해 실행하여 __name__ 변수를 출력해보았다. def plus(*args): return sum(args) print(f"__name__ : {__name__}") 직접 실행한 경우 import 한 경우 import calc pri..

Python 2022.08.21

[Python] requests.exceptions.SSLError: [Errno 1] _ssl.c:510: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

개요 시스템을 사용하는 사용자 목록을 확인하기 위해 아래와 같은 코드를 이용해 api 요청을 보내고자 한다. import os import requests if __name__ == "__main__": HOST = 'www.example.com' token = 'TOKEN' headers = {'Authorization': 'token %s' % token} LIST_USER = os.path.join(HOST, 'api/users') r = requests.get(LIST_USER, headers=headers) 그러나 실행하니 requests.exceptions.SSLError 에러가 발생했다. 조치 1. 인증 비활성화 자체 서명한 인증서를 사용하여 인증서를 신뢰할 수 없을 때, 가장 간단한 조치 ..

Python 2022.08.10