심화과정에서는 알아둬야할 중요한 정보들이 너무 많았고 오랫동안 두고 복습해야할 것 같다.
1. variable scope
JS를 공부할 떄도 스코프에 대해 자세히 공부한 기억이 있었다.
JS 떄에는 var,let,const 등으로 나누어서 하였지만 파이썬은 공간으로 구별해서 더 편했다.
전역상태에 대한 토론 부분중에 아래의 의미가 아직 잘 이해가 안된다.
나쁜건 알겠지만 현재로서는 성능부분에서 얼마나 영향을 끼치는지에 대해 모르겠다.
그리고 아래와 같은 부분에서처럼의 장점들을 위해 전역변수를 사용하기도 낯설다.
알고리즘 최적화, 복잡성 감소, 캐싱 및 메모화 또는 주로 명령형 코드베이스에서 발생하는 구조 포팅의 실용성을 위해 기능적 프로그래밍에서도 전역 상태를 올바르게 사용하는 것이 허용됨
관련 논쟁 : https://stackoverflow.com/questions/19158339/why-are-global-variables-evil
2. 자주 사용되는 모듈 및 패턴
type() - 값의 자료형 확인해보기
integer = 10
float_ = 1.23
list_ = [1, 2, 3]
tuple_ = (1, 2, 3)
set_ = {1, 2, 3}
dictionary = {"key": "value"}
print(type(integer)) # <class 'int'>
print(type(float_)) # <class 'float'>
print(type(list_)) # <class 'list'>
print(type(tuple_)) # <class 'tuple'>
print(type(set_)) # <class 'set'>
print(type(dictionary)) # <class 'dict'>
split() - string을 list로 변환하기
string = "hello/python/world!!"
string_list = string.split("/") # split() 안에 들어간 값을 기준으로 문자를 나눈다.
print(string_list) # ['hello', 'python', 'world!!']
join() - list를 string으로 변환하기
string_list = ["hello", "python", "world"]
string = "!! ".join(string_list)
print(string) # hello!! python!! world
replace() - 문자열 바꾸기
before_string = "hello world!!!"
after_string = before_string.replace("!", "~") # !를 ~로 변경
print(after_string) # hello world~~~
pprint() - 데이터를 더 예쁘게 출력
random - 랜덤한 로직이 필요할 때
import random
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
random.shuffle(numbers) # numbers를 무작위하게 섞기
print(numbers) # [2, 8, 6, 4, 3, 7, 1, 5]
random_number = random.randint(1, 10) # 1 ~ 10 사이의 무작위 번호 생성
print(random_number) # 4
datetime / 날짜 다루기
from datetime import datetime, timedelta
# 현재 날짜 및 시간 출력
print(datetime.now()) # 2023-02-22 15:55:32.277095
# datetime의 format code 더 제세한건 여기서 확인 가능합니다.
'''
%y : 두 자리 연도 / 20, 21, 22
%Y : 네 자리 연도 / 2020, 2021, 2022
%m : 두 자리 월 / 01, 02 ... 11 ,12
%d : 두 자리 일 / 01, 02 ... 30, 31
%I : 12시간제 시간 / 01, 02 ... 12
%H : 24시간제의 시간 / 00, 01 ... 23
%M : 두 자리 분 / 00, 01 ... 58, 59
%S : 두 자리 초 / 00, 01 ... 58, 59
'''
# string을 datetime 날짜로 변경하기
string_datetime = "23/12/25 13:20"
datetime_ = datetime.strptime(string_datetime, "%y/%m/%d %H:%M")
print(datetime_) # 2023-12-25 13:20:00
# datetime 날짜를 string으로 변환하기
now = datetime.now()
string_datetime = datetime.strftime(now, "%y/%m/%d %H:%M:%S")
print(string_datetime) # 22/09/04 04:04
# 3일 전 날짜 구하기
three_days_ago = datetime.now() - timedelta(days=3)
print(three_days_ago) # 2023-02-19 16:27:52.526502
3. 조건문
'''!= : 값이 일치하지 않는지 비교'''
0 != 1 # True
0 != 0 # False
'''>=, <= : 값이 크거나 같은지, 작거나 같은지 비교'''
1 >= 1 # True
'''in : 특정 값이 list / tuple / set에 포함되어 있는지 확인'''
4 in [1, 2, 3] # False
1 in (1, 2, 3) # True
print(bool(""))
print(bool(0))
print(bool([]))
print(bool("sample"))
print(bool([1, 2]))
print(bool(1))
print(bool(-1)) # 0이 아닌 숫자는 True로 판단
"""
False
False
False
True
True
True
True
"""
# all() : 요소들이 모두 True일 경우 True 리턴
if all([True, True, True, False, True]):
print("통과!") # False가 존재하기 때문에 분기문을 통과하지 못함
# any() : 요소들 중 하나라도 True일 경우 True 리턴
if any([False, False, False, True, False]):
print("통과!") # True가 1개 이상 존재하기 때문에 분기문을 통과함
4.함수의 인자와 리턴 타입
# sort
sample_list = [3, 2, 4, 1, 5]
sample_list.sort() # return data 없이 list 자체를 정렬
print(sample_list) # [1, 2, 3, 4, 5]
# sorted
sample_list = [3, 2, 4, 1, 5]
sorted_list = sorted(sample_list) # 정렬 된 list를 return
print(sorted_list) # [1, 2, 3, 4, 5]
# 잘못된 방법
sample_list = [3, 2, 4, 1, 5]
sorted_list = sample_list.sort() # .sort()의 return data는 None 입니다.
print(sorted_list) # None
5. try / exception을 활용한 에러 처리
number = input()
try:
int(number)
10 / number
except ValueError: # int로 변환하는 과정에서 에러가 발생했을 떄
print(f"{number}은(는) 숫자가 아닙니다.")
except ZeroDivisionError: # 0으로 나누면서 에러가 발생했을 때
print("0으로는 나눌수 없습니다.")
except Exception as e: # 위에서 정의하지 않은 에러가 발생했을 때(권장하지 않음)
print(f"예상하지 못한 에러가 발생했습니다. error : {e}")
6. 정규표현식(regex) - 문자열이 특정 패턴과 일치하는지 판단하는 형식 언어
정규표현식 사이트 : https://regexr.com/
#정규표현식을 사용해 이메일 검증하기
from pprint import pprint
import re
# rstring : backslash(\)를 문자 그대로 표현
# ^[\w\.-]+@([\w-]+\.)+[\w-]{2,4}$ : 이메일 검증을 위한 정규표현식 코드
email_regex = re.compile(r"^[\w\.-]+@([\w-]+\.)+[\w-]{2,4}$")
def verify_email(email):
return bool(email_regex.fullmatch(email))
test_case = [
"apple", # False
"sparta@regex", # False
"$parta@regex.com", # False
"sparta@re&ex.com", # False
"spar_-ta@regex.com", # True
"sparta@regex.co.kr", # True
"sparta@regex.c", # False
"sparta@regex.cooom", # False
"@regex.com", # False
]
result = [{x: verify_email(x)} for x in test_case]
pprint(result)
7. requests - http 통신을 가능하게 해주는 모듈
requests - 요청에는 크게 네가지 종류의 method가 존재합니다.
- GET : 데이터 정보 요청
- POST : 데이터 생성 요청
- PUT : 데이터 수정 요청
- DELETE : 데이터 삭제 요청
8. json - 데이터를 저장하거나 데이터 통신을 할 때 주로 사용
import json
import requests
# 해당 사이트는 요청에 대한 응답을 json 형태의 문자열로 내려줍니다.
url = "https://jsonplaceholder.typicode.com/"
r = requests.get(f"{url}users/1")
print(type(r.text)) # <class 'str'>
# 문자열 형태의 json을 dictionary 자료형으로 변경합니다.
response_content = json.loads(r.text)
print(type(response_content)) # <class 'dict'>
# dictionary 자료형이기 때문에 key를 사용해 value를 확인할 수 있습니다.
print(f"사용자 이름은 {response_content['name']} 입니다.")
# result output
"""
사용자 이름은 Leanne Graham 입니다.
"""
지금 당장 사용할 문법
1. glob - 활용한 파일 및 디렉토리 목록 확인
2. open - open을 활용한 파일 다루기
'내일배움캠프 > python' 카테고리의 다른 글
list와 array의 간단 비교 (4) | 2024.03.05 |
---|---|
중요 개념 (0) | 2024.02.24 |
파이썬 문법 (1) | 2024.02.20 |
TIL(데이터를 Flask로 받기,배포하기,listplz 사이드메뉴) (1) | 2024.01.30 |
파이썬-2일차 (1) | 2024.01.26 |