240718 파이썬반
1. 모듈이란
1) 정의
한 파일로 묶인 변수와 함수의 묶음
즉, 특정한 기능들이 모여있는 파일
2) 모듈 예시
- math 내장 모듈 : 파이썬이 미리 작성해둔 수학 관련 변수와 함수가 작성된 모듈
3) 모듈 가져오는 방법
- import 문
import math
print(math.sqrt(4)) # 제곱근 함수 # 2.0
- from 절
from math import sqrt
print(sqrt(4))
- 그럼 둘중 어느 코드가 보기에 좋을까?
- import 문이 좋다
4) dot(.) 연산자
점의 왼쪽 객체에서 점의 오른쪽 이름을 찾아라~라는 의미이다.
ex. print(math.pi)
5) 만일 서로 다른 모듈이 같은 이름의 함수를 제공할 경우
문제발생~ 마지막 import만 살아난다
이럴 때는 'as' 키워드를 넣어 별칭을 정하기
6) 사용자 정의 모듈
.py 형태
7) 모듈 내부 살펴보기
- 내장함수 help를 사용해 모듈에 무엇이 들어있는지 확인 가능
ex. help(math) 실행해보기
2. 파이썬 표준 라이브러리
1)정의 : 파이썬 언어와 함께 제공되는 다양한 모듈과 패키지의 모음
3. 패키지란 ?
1) 정의 : 연관된 모듈들을 하나의 디렉토리에 모아 놓은 것
- 정리 : 패키지(여러 .py가 담김) < 모듈 < 라이브러리
2) 패키지 종류
- PSL 내부 패키지 : 설치없이 바로 import하여 사용
-외부 패키지 : pip을 사용하여 설치 후 import 필요
*pip : 설치된 외부 패키지들 관리 시스템
*pip : 인터넷 연결 필수(웹에 있는 외부 패키지 다운이니까)
3) 패키지 설치
- 최신버전/특정버전/최소버전 명시 가능
$ pip install SomePackage
$ pip install SomePackage == 1.0.5
$ pip install SomePackage>= 1.0.4
4) 가장 중요한 패키지는?
$ pip install requests #외부 api 요청 패키지
5) 패키지 사용 목적
- 묘듈듈의 이름공간을 구분하여 충돌을 방지
- 모듈들을 효율적으로 관리하고 재사용되도록
4. 제어문
1) 정의 :
코드의 실행을 제어(control)함
2) 종류 :
- 조건문, 반복문, 반복문 제어
3) 조건문
- 주어진 조건식 평가하여 해당 조건이 참(True)인 경우에만 코드 실행을 하거나, 건너뜀
- 예시 코드
a = 5
if a > 3:
print('3 초과') # 3 초과
else :
print('3 이하')
print(a)
- 중첩 조건문
#간결하게 한줄 코드
# 삼항 연산자 조건문
# 변수 = 참값 if 조건식 else 거짓인 경우 값
# 1) 숫자의 짝수 , 홀수 판별해서 타입을 얻음
num = 5
num_type = "짝수" if num % 2 == 0 else "홀수"
#if else까지만 가능
#동일코드(파이썬만의 특징)
if num % 2 ==0:
num_type = "짝수"
else:
num_type = "홀수"
4) 반복문
- for : 특정 작업 반복 수행,
- while : 주어진 조건이 참인 동안 반복해서 수행
* 반복가능한 객체란(iterable) ? 반복문에서 순회할 수 있는 객체(시퀀스 객체 + dict ,set도 포함)
*시퀀스 객체 예시 : 문자열
- for문 예시
my_dict = {
'x': 10,
'y': 20,
'z': 30,
}
for key in my_dict:
print(key) #key
print(my_dict[key]) #value
#출력
x
10
y
20
z
30
numbers = [4, 6, 10, -8, 5]
for i in range(len(numbers)): #인덱스 가져오기
numbers[i] = numbers[i] * 3
print(numbers) #요소 3배 #
모든 for문은 while문으로 표현 가능하다(반대도 가능), 그 관계를 예제로 살펴보자
for문과 while의 리스트 순회
fruits = ['사과', '포도', '귤']
#1) for문을 통한 순회
for fruit in fruits :
print(fruit)
#2) while문을 통한 순회
i=0
while i < len(fruits) :
print(fruits[i])
i+=1
- while문 :
반드시 종료 조건이 필요하다(주어진 조건이 거짓이 될 때까지 반복한다)
사용자의 입력을 받아서 특정 조건이 충족될 때까지 반복하는 경우에 많이 씀
- 반복 제어 :
for문과 while문은 매 반복마다 본문 내 모든 코드를 실행하기에 때때로 일부만 실행하도록 하는 게 필요함
-> break ,continue, pass
아 헷갈리넹 ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
# break
for i in range(10):
if i == 5:
break
print(i)
# break
for i in range(10):
if i == 5:
break
print(i)
# continue
for i in range(10):
if i % 2 ==0:
continue #짝수 #넘어감 #아래 실행안하고 다음 loop 으로
print(i)
# pass
for i in range(10):
pass # 패스하게끔 쓰는 것
def my_func(a):
pass # 아무런 기능은 없음
*플래그 변수란?
# break 예시 2 - "리스트에서 첫번째 짝수만 찾은 후 반복 종료하기"
numbers = [1, 3, 5, 6, 7, 9, 10, 11]
found_even = False
for num in numbers:
if num % 2 ==0:
print(f'첫번째 짝수 {num}을 찾았습니다')
found_even =True
break
if found_even == False:
print('짝수 아닙니다')
# continue 예시 - "리스트에서 홀수만 출력하기"
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
found_even = False #flag varibale 플래그 : 깃발을 꽂아놓다 (기준점이 되는 변수)
4. List Comprehension
1) 정의 : 간결하게 리스트를 생성하는 방법 -> 남용은 하지말자 -> 이유는? 아래 참고!
아 헷갈리넹 ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
# List Comprehension 활용 예시 - "2차원 배열 생성 시 (인접행렬 생성 시)"
data1 = [[0] * (5) for _ in range(5)]
print(data1)
#출력
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
# 또는
data2 = [[0 for _ in range(5)] for _ in range(5)]
print(data2)
#출력 결과 같음
#_ 언더바 : 변수를 쓸일없을 때 반복횟수만 중요할 때
#어떤 코드가 가독성이 좋은가?
#모든 문제를 comprehension으로 바꾸려하지말자
#comprehension의 목적은 리스트 생성
result = []
for i in range(10):
if 1 % 2 == 1:
result.append(i)
#위 코드를 list comprehension으로 바꿔보면?
#내 도전 # 틀림
[if i % 2 == 1 for i in range(10)]
# 답 (순서 잘보기)
[i for i in range(10) if i % 2 ==1]
[expression for 변수 in iterable if 조건식]
특정 조건 하에 특정 값을 넣다
#리스트 comprehension
nums = list(range(10))
nums = ['짝수' if n% 2 ==0 else "홀수" for n in nums]
print(nums)
#['짝수', '홀수', '짝수', '홀수', '짝수', '홀수', '짝수', '홀수', '짝수', '홀수']
nums =[]
for n in nums :
if num % 2 == 0:
nums.append('짝수')
else:
nums.append('홀수')
## 앞 if믄 값자체 , 뒤 if는 필터(갯수를 바꿀 수 있음)
nums = list(range(10))
nums = ['짝수' if n% 2 ==0 else "홀수" for n in nums if n >= 5]
print(nums)
nums2 =[]
for n in nums :
if n>=5 :
if num % 2 == 0:
nums2.append('짝수')
else:
nums2.append('홀수')
# 리스트를 생성하는 방법 비교(3가지)
# 다 결과가 같다
# 1. loop
result1 = []
for i in range(10):
result1.append(i)
# 2. list comprehension
result2 = [i for i in range(10)]
# result2 = list(i for i in range(10))
# 3. map ✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔
result3 = list(map(lambda i: i, range(10))) #이거어케해석함
print(result1)
print(result2)
print(result3)
"""
성능 비교
1. list comprehension
- 대부분의 경우 가장 빠르고 파이썬스러운(Pythonic) 방법
- 파이썬스러운이란? [] -> 리스트라 부름. 다른 언어는 배열(array)이라 부름
2. map
- 특정 상황(예: 기존 함수를 사용할 때)에서 리스트 컴프리헨션과 비슷하거나 약간 더 빠를 수 있음
- 즉 케바케, 천차만별
3. loop
- 일반적으로 가장 느리다고 알려져 있지만,
python 버전이 올라가면서 다른 방식과 비슷하거나 때로는 더 나은 결과를 보이기도 함✔✔✔✔✔
- 복잡한 로직이 필요한 경우에는 여전히 유용하게 사용될 수 있음(직관적 코드 작성 가능)✔✔✔✔✔
- 코드가 길어진다고 해서 나쁜 코드가 아님. 명시적 코드가 더 좋은 코드
결론
- 성능 차이는 대부분의 경우 미미하므로, 코드의 가독성,유지보수성 고려할 것!
"""
- 모든 map 함수, list comprehension으로 표현 가능
- 둘의 공통점은 새로운 리스트 생성에 필요하다
5. enumerate 내장함수
1) enumerate란
enumerate(iterable , start = 0)
start =0 은 기본 인자 ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
즉 반복돌면서 idx값 같이 필요할 때 씀
'SSAFY' 카테고리의 다른 글
[1학기 1주차 수업 후기] 주말이당 (0) | 2024.07.19 |
---|---|
[관통프로젝트 1주차] API 개념 (0) | 2024.07.19 |
[수업기록] 파이썬 함수의 모든 것 (1) | 2024.07.17 |
[수업기록] 파이썬 기초 문법(2) (4) | 2024.07.16 |
[수업복습] 슬라이싱 팬다. (1) | 2024.07.15 |