오늘의 강의
파이썬 문법 심화 1주차 1~8강
오늘의 난관
에러가 나타났다!
최신 버전이 쓰고 싶어서 python
을 새로 깔았는데
원래 쓰던 버전 : 3.8.6
새로 설치한 버전 : 3.11.2
가상환경을 설치하면
C:\Users\SCY\Desktop\DEV\python\lec2>python -m venv venv
Error: Command '['C:\\Users\\SCY\\Desktop\\DEV\\python\\lec2\\venv\\Scripts\\python.exe', '-m', 'ensurepip', '--upgrade ', '--default-pip']' returned non-zero exit status 1.
이런 에러가 뜬다. 근데 또 가상환경이 만들어지기는 한다.
대신 venv\Scripts
폴더 안에 activate
랑 기타 다른 파일 하나도 없이 얘네 둘만 있는 채로...
당연히 모듈 아무것도 안 깔리고 작동 안 한다! 근데 가상환경 안에 들어와지기는 한다!
가구 채워서 집 만들고 싶은데 자꾸 빈 집만 만들어지는 심즈 같다
어찌어찌 해결
매니저님으ㅣ 구글링으로 방법을 찾았다.
python -m venv venv --without-pip
하면 된다고 하는데 이게 뭔지 둘 다 모르겠어서 찾아보니까
애초에 오류가 pip
설치나 업데이트 과정에서 일어난 거라 가상환경 설치할 때 이걸 패스하고 하는 옵션이라고 한다.
😱
근데 .... pip
를 패스하고 가상환경을 만들어서 그런지 pip install
해서 설치해도 어딘가 다른 경로(아마 내 컴퓨터 로컬인 것 같던데)에 설치되고 모듈을 찾아서 가져오질 못 하더라고....
🥰
(이모티콘 그냥 한번 넣어보고 싶어서 ㅋㅋㅋㅋㅋㅋㅋ)
아무튼 그래서 또 구글링함
pip
패스하고 깔았으니까 수동으로 설치해주면 된다고 한다.
curl https://bootstrap.pypa.io/get-pip.py | python
쨘
잘되네!
근데 이게 왜 안 되는지 왜 되는지 제대로 설명하는 글이 한 개도 없다..
22:11 추가
새로오신 기술매니저님께도 여쭤보고 튜터님께도 여쭤봤는데 명확한 건 없고, 두 분 다 python이든 뭐든 삭제하고 남은 게 있을 수도 있다는 의견
그래서 재부팅도 하고 파이썬 삭제하고 남은 폴더도 지우고 다 해 봤는디
안됨!
강의 기억할 것
가상환경 비활성화는 처음 알았다
deactivate
코드 컨벤션
: 읽고, 관리하기 쉬운 코드를 작성하기 위한 일종의 코딩 스타일 규약
PEP-8 : 파이썬의 컨벤션 가이드
네이밍 컨벤션 표기법은 너무.... 익숙해
파스칼 👉 클래스
카멜 👉 자바
함수,변수 👉 스네이크
전역변수를 함수 안에서 변경해서 사용하기
👉 global
키워드 사용
변수 = ~~ #전역변수
def func():
global 변수
변수 = ~~ #전역변수 수정
but 전역변수는 웬만하면 쓰지말기
--> 코드가 길어지고 함수가 많아지면 헷갈릴 수도 있음
--> 대신 return
사용해서 함수값 사용하기
자주 사용되는 모듈 및 패턴
split()
: string
을 구분자를 기준으로 나눠서 list
에 저장하기
string = "hello/python/world!!"
string_list = string.split("/") # 구분자 : /
print(string_list) # ['hello', 'python', 'world!!']
join()
: split
의 반대, list
를 합쳐 string
으로 만들기
string_list = ["hello", "python", "world"]
string = "!! ".join(string_list)
print(string) # hello!! python!! world
replace
: 문자열 바꾸기
"변경할 문자".replace("변경 전 문자", "변경 후 문자")
pprint()
: pretty print
random
: 난수생성
time
: 시간
time
불러와야함
import time
start_time = time.time() # 현재 시간 저장
time.sleep(1) # 1초간 대기
end_time = time.time()
# 코드가 종료된 시간 - 코드가 시작된 시간으로 실행 시간 구하기 (단위 : 초)
print(f"코드 실행 시간 : {end_time-start_time:.5f}") # 코드 실행 시간 : 1.00100
# .5f : 소숫점 5자리까지
datetime
: 날짜
datetime
불러와야함
from datetime import datetime, timedelta
# 현재 날짜 및 시간 출력
print(datetime.now()) # 2023-02-22 15:55:32.277095
#출력한 값은 datetime 클래스임
# 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
비교연산자
👉 True/False로 출력
==
: 같은가?
cf) 1 == "1"
👉 False
, 값은 동일하지만 자료형이 다르기 때문!=
: 다른가?>
, <
: 큰가?, 작은가? >=
, <=
: 크거나 같은가? 작거나 같은가?in
: 특정 값이 list
/ tuple
/ set
에 포함되어 있는지
if
문
if condition:
elif not condition:
else:
👉 ""
, []
는 False
bool()
: True
인지 False
인지
print(bool(""))
--> False
any()
, all()
: 여러 값들에 대한 조건 판단하기
# 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개 이상 존재하기 때문에 분기문을 통과함
함수의 인자와 리턴 타입
비슷해보이는 함수일지라도 리턴 타입, 사용 방법등이 다를 수 있음.
ex) sorted , list.sort()
- sorted : 저장된 list를 그냥 정렬하는 함수. 따로 retrun 값이 없다.
- list.sort() : 정렬해서 새로운 변수에 담아 return 해주는 함수
리턴타입 확인하는 방법
1. 검색
2. docstring 확인
3. 함수 구현 코드 확인
CTRL+클릭!
요렇게 클릭하면
뭔가 뜬다,,,,,
요건 가장 권장되는 방식이라고 하시는데, 아직 쫌 어렵다 말로만 들으니까... 실제로 몇번 해 봐야 감이 좀 올 것 같다!
GitHub 댓글