Python
#혼공파 #혼공단
리스트 / 딕셔너리 / 튜플
리스트 : 인덱스를 기반으로 값을 저장하는 것 딕셔너리 : 키를 기반으로 값을 저장하는 것
리스트
list_a = [273, 32, 103, "문자열", True]
요소 추가하기
리스트명.append(요소)
무조건 맨 뒤 추가되며, 한번에 한 요소만 추가 가능
자료는 비파괴적으로 사용하는것이 편리하다
*리스트와 같이 원본에 어떠한 영향도 주지 않는 것을 비파괴적이라 하고,
append, insert, extend 함수처럼 원본에 직접적인 영향을 주는 함수 혹은 연산을 파괴적이라 표현
요소 제거하기
del 리스트명[인덱스]
특정 인덱스에 있는 요소 제거
범위를 지정해 리스트의 요소를 한꺼번에 제거할 수도 있다.
del list_b.[3:6]
인덱스 3,4,5 번이 삭제된
리스트 내부에 있는지 확인하기: in/not in 연산자
값 in 리스트 / 값 not in 리스트 결과는 True/False로 나타난다.
for 반복문 : 리스트와 함께 사용하기
for 반복자 in 반복할 수 있는 것 : 코드
{딕셔너리}
dict_a = {"name" : "어벤져스 앤드게임", "type" : "히어로 무비"}
딕셔너리 내부의 값에 문자열, 숫자, 불, 리스트, 딕셔너리 값을 넣을 수 있다.
딕셔너리를 선언할 때는 {}를 쓰지만 요소에 접근할 때는 []를 쓴다.
ex)dict_a["name"] (O) , dict_a{"name"} (X)
값 추가/제거하기
딕셔너리[새로운 키] = 새로운 값
만일 이미 재하고 있는 키를 지정하고, 값을 넣으면 기존 값은 새로운 값으로 대치된다
딕셔너리 내부에 키가 있는지 확인
in 키워드
if key in dictionary :
코드
없는 경우 error 발생
for 반복문 : 딕셔너리와 함께 사용하기
for 키 변수 in 딕셔너리 : 코드
Range 반복문
for 숫자 변수 in 범위 : 코드
While 반복문
멈추는 구문이 없을 때, 무한 생성되기도 한다. Break : 키워드의 반복문을 벗어날 때 Continue : 조건값이 False 이면 넘어간다.
관련 함수
min( ) max( ) sum( )
리스트 안에 반복문
리스트 이름 = [표현식 for 반복자 in 반복할 수 있는 것]
ex) 0부터 20 사이의 짝수를 구한 뒤 제곱해서 새로운 리스트 만들기
array = [i * i for i in range (0,20,2)]
리스트 이름 = [표현식 for 반복자 in 반복할 수 있는 것 if 조건문]
ex) array = ["사과","자두","초콜릿","바나나","체리"]
output = [fruit for fruit in array if fruit!="초콜"]
이터레이터
for 반복자 in 반복할 수 있는 것 이터러블(iterable) : 반복할 수 있는 것. 내부에 있는 요소들을 차례대로 꺼낼 수 있는 객체. (리스트, 딕셔너리, 문자열, 튜플등) 이터레이터 : 이터러블 중에서 next( ) 함수를 적용해 하나씩 꺼낼 수 있는 요
함수
매개변수 : 함수의 괄호 내부에 넣는 것을 의미 리턴 : 함수의 최종적인 결과를 의미 참조 : 변수에 접근하는 것
*가변 매개변수 : 매개변수를 원하는 만큼 받을 수 있다 -1. 가변 매개변수 뒤에는 일반 매개변수가 올 수 없다 -2. 가변 매개변수는 하나만 사용할 수 있다.
def 함수 이름(매개변수, 매개변수, ...,*가변 매개변수): 코드 실행
def print_n_times(n,*values) : for i in range(n): for value in values: print(value) print()print_n_times(3, "hello")> hello hello hello #print_n_times("hello",3) > error
기본 매개변수 : 뒤에 일반 매개변수가 올 수 없다
def print_2_times(value, n=2): for i in range(n): print(value) print_n_times("hi")> hi hi
키워드 매개변수 : 기본 매개변수 n을 지정했지만, 매개변수 이름을 재지정해서 사용하는 것.
def print_n_times(*values,n=2): for i in range(n): for value in values: print(value) print()print_n_times("hello","fighting", n=3)> hello fighting hello fighting hello fighting # def에서 매개변수 n을 2로 지정했지만, 코드를 실행할 때 n=3으로 바꾸었기 때문에 3번 실
손코딩 연습문제

재귀함수 : 자기 자신을 호출하는 것 상황에 따라 기하급수적으로 많이 반복하는 문제 있음>메모화로 해결 가능 ex) 팩토리얼 연산자 < n! = n * (n-1) * (n-2) * ...*1 > 구하는 방법 1. 반복문으로 팩토리얼 구하기 2. 재귀 함수로 팩토리얼 하기
def factorial(n) : output = 1 for i in range(1, n+1) : output*=i return output
피보나치 수열 메모화 : 딕셔너리를 사용해서 한 번 계산한 값을 저장. 다시 계산하지 않고 저장된 값을 활용하므로 속도 빨라짐
counter = 0 def fibonacci(n) : counter +=1 if n==1 : return 1 if n==2 : return 1 else : return fibonacci (n-1) + fibonacci(n-2) >> UnboundLocalError
튜플 : 함수와 함께 많이 사용되는 리스트와 비슷한 자료형. 단, 한번 결정된 요소는 바꿀 수 없다. 람다 : 함수를 단하고 쉽게 선언하는 방법. 'lambda 매개변수 : 리턴값'
filter () , map () : 함수를 매개변수로 전달하는 대표적인 표준함수
파일 처리 파일 열기 : 파일 객체 = open( 문자열 : 파일 경로 , 문자열 : 읽기 모드 ) (모드 : w - write. 새로 쓰기 모드 / a - append . 뒤에 이어 쓰기 모드 / r - read. 읽기) 파일 닫기 : 파일객체.close( ) with 구문 : with 구문이 종료될 때 자동으로 파일 닫힌다. with open (문자열: 파일 경로, 문자열 : 모드) as 파일 객체 : 문장 코드
제너레이터 : 이터레이터를 직접 만들때 사용하는 코드. yield 키워드 사용. 제너레이터 객체는 next() 함수 사용해 함수 내부 코드 실행
def test () : print("A 지점 통과") yield 1 print("B 지점 통과") yield 2 print("C 지점 통과 ")output =test () print("D 지점 통과")a=next(output)print(a) print("E 지점 통과")b=next(output)print(b)print("F 지점 통과")c=next(output)print(c)next (output ) >> D 지점 통과 A 지점 통과 1 E 지점 통과 B 지점 통과 2 F 지점 통과 C 지점 통과 Stopiteration Error
ERROR
-프로그램 실행 전에 발생하는 오류(구문오류) : syntax error
-프로그램 실행 중에 발생하는 오류(예외오류) : exception, runtime error
예외를 해결하는 모든 것을 예외처리라고 한다.
1. 조건문 사용
2.try 구문 사용
try :
예외가 발생할 가능성이 있는 코드
except :
예외가 발생했을 때 실행할 코드
(구문 내부에 아무것도 넣지 않으면 오류 발생하므로 'pass'를 넣어서 코드를 지나치게 할 수도 있다.
else:
에외가 발생하지 않았을 때 실행할 코드
finally :
무조건 실행할 코드
# try - except / try - except - else / try - except - finally
try - finally / try - except - else - finally 으로 사용 가능
user_input_a=input("정수입력>") if user_input_a.isdigit() : number_input_a=(int(user_input_a) print("원의 둘레" , number_input_a 2 3.14 )
else : print("정수를 입력하지 않았습니다" ) #input에 정수가 아닌 자료형이 들어왔을 때, else 구문으로 처리하면서 오류 생성 방지
Index Error : 리스트 / 문자열의 수를 넘는 요소/글자를 선택할 때 발생 (=index out or range) Type Error : 서로 다른 자료 연산할 때 발생.ex) 숫자 타입 + 문자열 타입 함수를 호출할 때 매개변수를 넣지 않거나, 더 많이 넣었을 때. Value Error : '변환할 수 없는 것'을 변환하려고 할 때 발생
NameError : 딕셔너리를 만들 때 키 값에 단순한 식별자를 입력하면 변수로 인식해서 발생하는 오류. 식별자를 ' ' 해주면 오류 해결. 다른 자료형도 마찬가지로 명명이 되어 있지 않은 것을 부르면 이 error가 뜬다. KeyError : 딕셔너리에 존재하는 않는 키에 접근했을 때 발생 UnboundLocalError : 재귀함수를 사용할 때 나타날 수 있는 error. global 키워드 사용해야함. StopIteration : 제너레이터 함수를 사용하는데 next() 함수 호출한 이후 yield키워드를 만나지 못하고 함수가 끝나면 발생.
예외 구분하기
try :
예외가 발생할 가능성이 있는 구문
except 예외의 종류 A :
예외 A가 발생했을 때 실행할 구문
except 예외의 종류 B :
예외 B가 발생했을 때 실행할 구문
except 예외의 종류 C :
예외 C가 발생했을 때 실행할 구문
# 예외 종류인 예외가 발생하면 위 구문들이 실행되지만, A,B,C가 아닌 ERROR가 발생하면 코드는 죽는다.
except Exception as exception :
을 해주면 모든 예외에 대해서 잡을 수 있다.
raise NotlmplementError : '아직 구현하지 않은 부분'을 표시하기 위해 해당 부분에서 오류 강제로 표시해주는 방법. 코드의 실행은 정상적으로 작동된다.
모듈
표준 모듈 : 파이썬에 기본적으로 내장되어 있는 모듈 외부 모듈 : 다른 사람들이 만들어서 공개한 모듈
모듈에 있는 함수를 쓸 때 모듈이름.함수() 를 사용한다. ex) math.cos()
from 모듈이름 import 가져오고 싶은 변수 또는 함수
를 작성하면 함수를 바로 쓸 수 있다.
ex) from math import sin, cos, tan, floor, ceil sin(1)
모듈 설치하기
cmd창에서 pip install 모듈이름
ex) pip install numpy
BeautifulSoup 모듈로 날씨 가져오기 (크롤링)
http://www.weather.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=108 링크의 xml 파일을 urllib 모듈을 사용하여 가져온 후 내부의 city, wf, tmn, tmx 태그를 찾아 출력. 태그 여러개를 가져올 때는 select() 함수, 하나만 선택할 때는 select_one() 지역이 표시된 location을 찾고, location 내부에 있는 city, wf, tmn, tmx태그 내용 추출.

Flask 코드 실행시키는 방법은 명령창 또는 powershell 에서
set Flask_APP=파일이름.py
flask run
제어역전 : 개발자가 모듈의 함수를 호출하는것이 일반적인 제어흐름이나, 이와 반대로 개발자가 만든 함수를 모듈이 실행하는 것
라이브러리 : 정상적인 제어를 하는 모듈. 개발자가 모듈의 기능을 호출하는 형태 ex) math 프레임워크 : 제어 역전이 발생하는 모듈. 개발자가 작성한 코드를 실행하는 형태의 모듈 ex) Flask
데코레이터 : 함수 앞뒤에 꾸밀 부가적인 내용 or 반복한 내용을 데코레이터(@)로 정의해서 사용 함수 데코레이터, 클래스 데코레이터가 있다 ex1) @test def hello() : print("hello") ex2) @app.route("/") def hw(): return "hello world"
패키지 : 모듈이 모여서 구조를 이루는 것
텍스트 데이터 : 숫자, 글자등으로 이루어진 데이터. 사람이 쉽게 읽을 수 있다 바이너리 데이터 : 텍스트 에디터로 열었을때 의미를 알 수 없는 데이터 ex)이미지, 동영상
클래스
파이썬은 객체 지향 프로그래밍 언어(객체를 우선으로 생각해서 프로그래밍). 클래스 기반의 객체 지향 프로그래밍 언어(클래스를 기반으로 객체를 만들고, 그러한 객체를 우선으로 생각해서 프로그래밍 하는 것)
ex) 딕셔너리로 학생을 표현하고 이를 리스트로 묶어 학생들을 표현
students=[{"name":구지연, "korean":76, "math":97, "english":84, "science":91}]
여러가지 속성을 가질 수 있는 대상을 객체라고 하며, 위 코드에서는 학생이 객체.
클래스 선언
class 클래스 이름:
클래스 내용
클래스는 클래스 이름과 같은 함수(생성자)를 사용해서 객체를 만든다.
인스턴스 이름(변수 이름) = 클래스 이름() (<-생성자 함수라고 부른다.)
클스를 기반으로 만들어진 객체를 인스턴스라고 한다.
생성자 : 클래스 이름과 같은 함수 클래스 내부에 __init__ 라는 함수를 만들면 객체를 생성할 때 처리할 내용을 작성할 수 있다.
class 클래스 이름:
def __init__ (self, 추가적인 매개변수) :
pass
클래스 내부의 함수는 첫번째 매개변수로 반드시 self를 입력해야한다. 다만 self가 가지고 있는 속성과 기능에 접근할 때는 self.<식별자>형태로 접근 (self는 키워드가 아닌 단순한 식별자이므로, 변수 이름으로 활용해도 된다) 소멸자 : 인스턴스가 소멸될 때 호출되는 함수 del(self) 형태로 함수 선언
메소드 : 클래스가 가지고 있는 함수
class 클래스 이름 :
def 메소드 이름 (self, 추가적인 매개변수) :
pass
어떤 클래스를 기반으로 그 속성과 기능을 물려받아 새로운 클래스를 만드는 것을 상속이라 한다. isinstance(인스턴스, 클래스) : 객체(인스턴스)가 어떤 클래스로부터 만들어졌는지 확인할 수 있다.
인스턴스가 속성 기능을 가질 수 있지만, 클래스 역시 속성(변수)과 기능(함수)을 가질 수 있다.
클래스 변수
클래스 변수 만들기
class 클래스 이름 :
클래스 변수 = 값
클래스 변수에 접근하기
클래스 이름. 변수 이름
클래스 함수 생성 @classmethod 부분을 데코레이터라고 한다. 데코레이터 : @ 로 시작한다. 데코레이터는 만드는 방법에 따라 함수 데코레이터, 클레스 데코레이터로 나뉜다.
클래스 함수 만들기
class 클래스 이름 : @classmethod
def 클래스 함수(cls, 매개변수) :
pass
클래스 함수 호출하기
클래스 이름.함수 이름(매개변수)
Last updated
Was this helpful?