파이썬이란?
- 인터프리터 언어
- 간결한 문법
용도
- 시스템 유틸리티 제작
- GUI 프로그래밍
- C/C++와의 결합
- 웹 프로그래밍
- 수치 연산 프로그래밍(NumPy)
- 데이터베이스 프로그래밍(pickle)
- 데이터 분석, 사물 인터넷(Pandas)
문법
- 들여쓰기 필수
- 중괄호 x
- 대소문자 구분
//
: 나눗셈 후 몫을 반환하는 연산자- str() → 문자열로 변환
- 불린은 첫 글자 대문자 True/False
- bool() → 불린으로 변환
- type() → 타입 반환
- id() → 객체 주솟값 반환
- [a] is [b] → a,b 주솟값 동일한지 불린 반환
- copy() → 객체 복사
- a, b swap
>>> a = 3
>>> b = 5
>>> a, b = b, a
>>> a
5
>>> b
3
- input() → 사용자 입력 받기
- range(start, end) → start 포함 end 미포함 리스트 생성
문자열
문자열 만드는 법
‘문자열’
“문자열”
“””문자열“””
(multiline 만드는 데 사용 가능)‘’’문자열‘’’
(multiline 만드는 데 사용 가능)
문자열 연산
“python” * 2
→ “pythonpython”print("=" * 3)
→ “===”
문자열 길이 구하기
len()
문자열 슬라이싱
>>> a = "Life is too short, You need Python" >>> a[0:4] 'Life'
포맷팅
왼쪽 정렬, 10 스페이스, %s
>>> "%-10sjane." % 'hi' 'hi jane.'
10 스페이스, 오른쪽 정렬, 소수점 네 번째자리
>>> "%10.4f" % 3.42134234 ' 3.4213'
format함수 사용
인덱스로 넣기
>>> number = 10 >>> day = "three" >>> "I ate {0} apples. so I was sick for {1} days.".format(number, day) 'I ate 10 apples. so I was sick for three days.'
이름으로 넣기
>>> "I ate {number} apples. so I was sick for {day} days.".format(number=10, day=3) 'I ate 10 apples. so I was sick for 3 days.'
오른쪽 정렬
>>> "{0:>10}".format("hi") ' hi'
가운데 정렬
>>> "{0:^10}".format("hi") ' hi '
공백 채우기
>>> "{0:=^10}".format("hi") '====hi====' >>> "{0:!<10}".format("hi") 'hi!!!!!!!!'
소수점
>>> y = 3.42134234 >>> "{0:0.4f}".format(y) '3.4213'
f 문자열 포맷팅(≥ 3.6version )
>>> name = '홍길동' >>> age = 30 >>> f'나의 이름은 {name}입니다. 나이는 {age}입니다.' '나의 이름은 홍길동입니다. 나이는 30입니다.'
딕셔너리
>>> d = {'name':'홍길동', 'age':30} >>> f'나의 이름은 {d["name"]}입니다. 나이는 {d["age"]}입니다.' '나의 이름은 홍길동입니다. 나이는 30입니다.'
- 문자열 관련 함수들
- .count() → 개수 세기
- .find() → 위치 반환
- .index() → 위치 반환(없으면 오류)
- .join() → 문자열 삽입
- .upper() → 대문자로 변환
- .lower() → 소문자로 변환
- .lstrip() → 왼쪽 공백 제거
- .rstrip() → 오른쪽 공백 제거
- .strip() → 양쪽 공백 제거
- .replace(바뀔 문자열, 바꿀 문자열) → 값 치환
- .split(구분자, optional) → 쪼개기
리스트
- list() → 빈 배열 생성
- 인덱싱, 슬라이싱, 연산 → 문자열과 동일
- del() →- 들여쓰기 필수
- 중괄호 x
- 대소문자 구분
//
: 나눗셈 후 몫을 반환하는 연산자- str() → 문자열로 변환
- 불린은 첫 글자 대문자 True/False
- bool() → 불린으로 변환
- type() → 타입 반환
- id() → 객체 주솟값 반환
- [a] is [b] → a,b 주솟값 동일한지 불린 반환
- copy() → 객체 복사
- a, b swap
>>> a = 3
>>> b = 5
>>> a, b = b, a
>>> a
5
>>> b
3
input() → 사용자 입력 받기
range(start, end) → start 포함 end 미포함 리스트 생성 요소 삭제
>>> a = [1, 2, 3] >>> del a[1] >>> a [1, 3]
>>> a = [1, 2, 3, 4, 5] >>> del a[2:] >>> a [1, 2]
append() → 요소 추가
>>> a.append([5,6]) >>> a [1, 2, 3, 4, [5, 6]]
sort() → 정렬
reverse() → 뒤집기
index() → 위치 반환
insert(위치, 요소) → 위치에 요소 삽입
remove(x) → 첫번째 x 삭제
pop(위치) → 위치의 요소 꺼내기(mutate)
count(요소) → 요소 갯수 세기
extend(리스트) → 리스트 연결(concat)
튜플
- ( )으로 둘러싼다.
- 값을 바꿀 수 없다.
>>> t1 = ()
>>> t2 = (1,) //요소 1개면 콤마 필수
>>> t3 = (1, 2, 3)
>>> t4 = 1, 2, 3 //괄호 생략 가능
>>> t5 = ('a', 'b', ('ab', 'cd'))
딕셔너리
- key-value 자료형
>>> grade = {'pey': 10, 'julliet': 99}
>>> grade['pey']
10
>>> grade['julliet']
99
- key에 리스트는 쓸 수 없지만 튜플은 쓸 수 있음 (변하지 않기에)
- keys() → dict_keys 객체 반환
for k in a.keys():
→ 처럼 순회 가능
- values() → dict_values 객체 반환
- items() → dict_items 객체 반환
- clear() → 모든 요소 삭제
- get(key) → value 얻기(없으면 None 반환)
- get(key, ‘디폴트 값') → (없으면 디폴트 값 반환)
- [key] in [딕셔너리] **** → 있는지 불린 반환
set
- 중복 허용 x
- 순서 x
- s1.intersection(s2) / s1 & s2 → s1과 s2의 교집합
- s1.union(s2) / s1 | s2 → s1과 s2의 합집합
- s1.difference(s2) / s1 - s2 → s1에서 s2 뺀 차집합
- add() → 값 추가
- update() → 여러 값 추가
- remove() → 값 제거
조건문
or → || (js)
and → && (js)
not → ! (js)
[요소] in / not in [리스트, 튜플, 문자열] → 요소가 해당 자료형에 있는지
pass → 암것도 안 함
elif → else if(js)
조건부 표현식
message = "success" if score >= 60 else "failure"
for, range()
marks = [90, 25, 67, 45, 80] for number in range(len(marks)): if marks[number] < 60: continue print("%d번 학생 축하합니다. 합격입니다." % (number+1))
리스트 내포
>>> a = [1,2,3,4] >>> result = [num * 3 for num in a] >>> print(result) [3, 6, 9, 12]
>>> a = [1,2,3,4] >>> result = [num * 3 for num in a if num % 2 == 0] >>> print(result) [6, 12]
함수
*args → 여러 개의 입력값을 받는 함수
>>> def add_many(*args): ... result = 0 ... for i in args: ... result = result + i ... return result ... >>>
>>> def add_mul(choice, *args): ... if choice == "add": ... result = 0 ... for i in args: ... result = result + i ... elif choice == "mul": ... result = 1 ... for i in args: ... result = result * i ... return result ... >>>
**kwargs → keyword arguments
딕셔서리로 저장
>>> print_kwargs(a=1) {'a': 1} >>> print_kwargs(name='foo', age=3) {'age': 3, 'name': 'foo'}
global → 전역 변수 사용
lambda → def보다 간결
>>> add = lambda a, b: a+b >>> result = add(3, 4) >>> print(result) 7
클래스
- self → 메서드의 첫 번째 매개변수명(컨벤션)
__init__
→ 생성자 메서드class 클래스 이름(상속할 클래스 이름)
→ 상속 클래스 생성
모듈
import [모듈(파일명)]
→[모듈].함수
로 모듈 내 함수 사용from [모듈명] import [모듈함수]
→ 바로 함수명으로 사용if __name__ == "__main__"
→import [모듈]
하면[모듈].__name__
에 모듈명이 할당됨. 하지만 직접 파일 실행 시__name__
변수에는__main__
이 저장됨- 다른 파일에서 모듈 불러올 때
sys.path.append(모듈 저장한 디렉토리)
PYTHONPATH
환경 변수 사용 →set PYTHONPATH=[모듈 저장한 디렉토리]
패키지
__init__.py
→ 해당 디렉토리가 패키지의 일부임을 알려주는 역할__all__
→ 특정 디렉터리의 모듈을*
를 사용하여 import할 때에는 해당 디렉터리의__init__.py
파일에__all__
변수를 설정하고 import할 수 있는 모듈을 정의해 주어야 한다.from ..sound.echo import echo_test
처럼 relative하게 import 가능
예외 처리
try, except문
try: ... except [발생 오류[as 오류 메시지 변수]]: ...
[]
는 괄호 안의 내용이 optional이라는 뜻예시
try: 4 / 0 except ZeroDivisionError as e: print(e)
여러 개도 사용 가능
try: a = [1,2] print(a[3]) 4/0 except ZeroDivisionError: print("0으로 나눌 수 없습니다.") except IndexError: print("인덱싱 할 수 없습니다.")
try.. finally
f = open('foo.txt', 'w') try: # 무언가를 수행한다. finally: f.close()
try… else
try: age=int(input('나이를 입력하세요: ')) except: print('입력이 정확하지 않습니다.') else: if age <= 18: print('미성년자는 출입금지입니다.') else: print('환영합니다.')
raise → 오류 발생시키기
Bird 클래스를 상속받는 자식 클래스는 반드시 fly라는 함수를 구현하도록 만들고 싶은 경우
class Bird: def fly(self): raise NotImplementedError
Expection 클래스 상속 → 직접 예외 만들기
class MyError(Exception): pass
def say_nick(nick): if nick == '바보': raise MyError() print(nick)
__str__
메서드 → 오류 메시지 출력class MyError(Exception): def __str__(self): return "허용되지 않는 별명입니다."
참고:
점프투파이썬