인프런 파이썬 입문 수업을 듣고 중요한 내용을 정리했습니다.
개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다.
파이썬 기본 문법
파이썬의 기본 문법 중에서 중요한 내용을 추가로 정리했습니다.
변수 선언, 변수명
snake = 1
case = 2
snake_case = 3
snake1 = 4
case1 = 5
snakecase = 6
# 1snake = 7 : 에러 발생
print(snake, case, snake_case, snake1, case1, snakecase)
# 결과 : 1 2 3 4 5 6
변수를 선언할 경우, 변수명은 영어를 사용하고 언더바(_) 이외의 기호는 사용하지 않는 것을 추천한다.
변수명이 영단어 2개 이상일 경우에는 단어와 단어 사이에 언더바(_)를 사용할 것을 권장한다. (ex. snake_case = 3)
변수명이 숫자로 시작하면 에러가 발생한다. (ex. 1snake = 7)
File "<ipython-input-6-38e4f61322b9>", line 1 1snake = 8
^
SyntaxError: invalid syntax
입력(input), 출력(print)
name = input("What is your name? ")
print("Hi!", name)
# 결과 :
# What is your name? Kim (입력)
# Hi! Kim (출력)
input() 으로 입력한 값의 데이터 타입은 문자열 자료형이 된다.(주의)
위의 예시에서 입력 값(Kim)의 데이터 타입 : <class 'str'>
digit1 = int(input())
digit2 = int(input())
print(digit1 * digit2)
# 결과 :
# 50 (입력)
# 60 (입력)
# 3000 (출력)
위에서 언급한 것 처럼, input()으로 입력한 값은 문자열 자료형이다.
따라서, input()으로 입력한 값을 가지고 숫자 연산을 하기 위해서는 반드시 정수형으로 형 변환을 해야한다.
문자열
article = "Hello World!"
article = 'Hello World!'
변수에 문자열을 담을 수 있다.
article = "Netflix subscriptions picked up in the third quarter of 2021 as non-English language shows continued to be the streaming platform's best performers.
The US firm added 4.4 million users in the three months to 30 September, more than double the previous quarter.
Korean TV series Squid Game was its biggest hit, watched by 142 million households in its first four weeks.
It comes as some Netflix staff prepare to walk out on Wednesday amid a backlash over comedian Dave Chappelle."
변수에 문자열을 담는 경우, 문자열이 한 줄 이상이면 에러가 발생한다.
File "<ipython-input-2-56539f354bc4>", line 1 article = "Netflix subscriptions picked up in the third quarter of 2021 as non-English language shows continued to be the streaming platform's best performers.
^
SyntaxError: EOL while scanning string literal
article = """Netflix subscriptions picked up in the third quarter of 2021 as non-English language shows continued to be the streaming platform's best performers.
The US firm added 4.4 million users in the three months to 30 September, more than double the previous quarter.
Korean TV series Squid Game was its biggest hit, watched by 142 million households in its first four weeks.
It comes as some Netflix staff prepare to walk out on Wednesday amid a backlash over comedian Dave Chappelle."""
이처럼 한 줄 이상의 문자열을 변수에 담기 위해서는 문자열을 """ """ 혹은 ''' '''로 감싸야 한다.(에러 발생X)
문자열 내장함수
some_string = " computer "
print(some_string) # 결과 : computer
print(some_string.strip()) # 결과 : computer
some_string2 = ",,,computer..."
print(some_string2) # 결과 : ,,,computer...
print(some_string2.strip(",")) # 결과 : computer...
print(some_string2.strip(".")) # 결과 : ,,,computer
strip() 함수는 인자가 없는 경우, 해당 문자열의 앞·뒤 공백을 모두 제거해준다.
만약, strip() 함수의 인자가 존재하는 경우에는 문자열에서 해당 인자를 모두 제거해준다.
name = "I have a {} and I have an {}"
print(name.format("pen", "apple"))
print("I have a {} and I have an {}".format("pen", "apple"))
print("I have an {1} and I have a {0}".format("pen", "apple"))
print("I have a {0} and I have a {0}".format("pen", "apple"))
# 결과 :
# I have a pen and I have an apple
# I have a pen and I have an apple
# I have an apple and I have a pen
# I have a pen and I have a pen
format() 함수는 문자열에 존재하는 {}안에 순차적으로 인자를 넣어주는 함수이다.
또한, {}안에 숫자를 부여함으로써 format() 함수의 인자를 원하는 순서대로 넣을 수 있다.
interest = 0.95833
print(format(interest, ".2f"))
# 결과 : 0.96
interest2 = 0.23432429438
print(format(interest2, ".3f"))
# 결과 : 0.234
format() 함수의 두 번째 인자를 사용하면, 해당 변수 값의 소수점 이하 자리수를 조정할 수 있다.
format() 함수의 두 번째 인자인 ".2f"는 해당 변수 값을 소수점 이하 두 번째 자리까지 표시하는 것을 의미한다.
동일한 원리로 ".3f"는 해당 값을 소수점 이하 세 번째 자리까지 표시하는 것을 의미한다.
(단, 정해진 소수점 이하 자리수를 맞출 때 반올림이 함께 적용된다.)
문자열 관련 참고내용
print("I have a %s, I have an %s." % ("pen", "apple"))
print("I have a %c, I have an %s." % ("z", "apple"))
print("I have a %d, I have an %s." % (10, "apple"))
print("I have a %f, I have an %s." % (1.23, "apple"))
# 결과 :
# I have a pen, I have an apple.
# I have a z, I have an apple.
# I have a 10, I have an apple.
# I have a 1.230000, I have an apple.
각 데이터 타입에 맞게 원하는 자료형을 문자열에 넣을 수 있다.
```
%s - string(문자열)
%c - character(한 글자)
%d - int(정수형)
%f - float(실수형 : 부동소수점)
```
리스트 관련 함수
python_is_easy = "python is easy"
print(python_is_easy.split())
# 결과 : ['python', 'is', 'easy']
split() 함수는 인자가 없는 경우, 해당 문자열을 공백을 기준으로 잘라서 리스트의 각 요소로 반환해준다.
조건문
age = int(input("나이는? "))
if age >= 19:
print("당신은 성인입니다.")
# 결과 :
# 나이는? 20
# 당신은 성인입니다.
조건문에서 실행코드를 작성할 때에는 반드시 들여쓰기(indent)를 해야한다.(주의)
만약, 들여쓰기(indent)를 하지 않거나 코드 앞에 불필요한 공백이 존재하면 에러가 발생한다.
age = int(input("나이는?"))
if age >= 19:
print("당신은 성인입니다.")
elif age >= 13:
print("당신은 청소년입니다.")
else:
print("당신은 아동입니다.")
# 결과 :
# 나이는? 18
# 당신은 청소년입니다.
elif문의 조건을 age >=13 and age < 19로 작성하지 않아도 된다.
이미 if문의 조건 age >= 19를 만족하지 못했기 때문에, 파이썬은 자동으로 입력 값이 19 미만이라는 것을 알고 있다.
이중 조건문
cash = int(input("현금은?"))
if cash > 100000:
print("레스토랑")
else:
if cash > 50000:
print("밥집")
else:
print("집")
# 결과 :
# 현금은? 60000
# 밥집
else문 안에도 if-else문을 넣을 수 있다.
cash = int(input("현금은?"))
if cash > 100000:
print("레스토랑")
else:
if cash > 50000:
if cash > 70000:
print("밥집")
elif cash > 60000:
print("분식집")
else:
print("빵집")
else:
print("집")
# 결과 :
# 현금은? 110000
# 레스토랑
# 현금은? 71000
# 밥집
이처럼 조건문 안에 조건문을 넣어서 이중 조건문을 만들 수 있다. (위의 예시는 else문에 if-elif-else문을 넣은 경우임)
반복문
while 1:
print("Hello world")
# 결과 :
while문의 조건이 1인 것은 while문의 조건이 True인 것과 동일하다. (0이 아닌 숫자는 True 값을 가지기 때문)
즉, while 1:의 코드는 while True:의 코드와 동일한 기능을 하며, 조건이 항상 만족하기 때문에 반복문이 무한히
실행된다. (*이러한 코드를 실행할 때에는 조심해야 한다.)
함수
def func1(data1, data2):
return data1 + data2
y = func1(1, 2)
print(y)
# 결과 : 3
return은 함수의 코드 실행 결과 값을 반환해준다.
즉, 위의 예시에서 return은 data1 + data2의 값을 반환하여 변수 y에 할당하기 때문에, print문을 통해 3이
출력되는 것이다.
def id_check(id):
if id == "admin":
print("invalid id : admin")
return # 코드 중지기능
print("valid id : ", id)
id_check("admin")
# 결과 : invalid id : admin
id_check() 함수의 인자가 "admin"이기 때문에, if문의 조건이 충족되고 if문의 코드가 실행된다.
이 경우에 print문과 return의 코드가 함께 실행되는데 return이 실행되면, return 이후의 코드는 실행되지 않는다.
따라서, print("invalid id : admin")코드 이후에 print("valid id : ", id)코드가 실행되지 않는 것이다.
def mul_return(a):
b = a + 1
return a, b
print(mul_return(1))
# 결과 : (1, 2)
원칙적으로 return은 오직 한 개의 값을 반환한다.
하지만, 파이썬에서는 복수의 값을 return을 통해 한 번에 반환할 수 있다.(ex. return a, b)
정확히는 복수의 값을 한 번에 반환하는 것이 아니라, 복수의 값을 튜플 형태로 묶어서 한 개의 값으로 반환하는 것이다.
튜플
data = (1, 2, 3)
data[2] = 10
data[3] = 4
# 결과 : 에러 발생
튜플은 데이터를 추가·수정·삭제하는 것이 불가능하다.(선언 및 읽기는 가능)
TypeError Traceback (most recent call last) <ipython-input-6-5371583b6fc8> in <module> 1 data = (1, 2, 3) 2 ----> 3 data[2] = 10 4 data[3] = 4 5
TypeError: 'tuple' object does not support item assignment
data1 = (1, 2, 3)
data2 = (4, 5, 6)
print(data1 + data2)
print(data1 * 3)
# 결과 :
# (1, 2, 3, 4, 5, 6) : 덧셈
# (1, 2, 3, 1, 2, 3, 1, 2, 3) : 곱셈
튜플 데이터 간의 연산은 가능하다. (단, 덧셈과 곱셈만 가능함)
x = 1
y = 2
x, y = y, x
print(x, y)
# 결과 : 2, 1 (x = 2, y = 1)
x, y = y, x의 코드는 변수 x와 y의 값을 스왑한다.
참고로 x, y = y, x의 코드는 (x, y) = (y, x)의 코드와 동일한 원리이다.(튜플 형태)
data1 = (1, 2, 3)
print(type(data1))
print(list(data1))
print(type(list(data1)))
print()
data2 = [1, 2, 3]
print(type(data2))
print(tuple(data2))
print(type(tuple(data2)))
# 결과 :
# <class 'tuple'>
# [1, 2, 3]
# <class 'list'>
# <class 'list'>
# (1, 2, 3)
# <class 'tuple'>
리스트와 튜플은 서로 형 변환이 자유롭다.
따라서, 튜플의 데이터를 수정·삭제·추가하고자 한다면 튜플을 리스트로 형 변환하여 해당 기능을 사용하면 된다.
딕셔너리 내장함수
data_dict = {'한국': 'KR', '일본': 'JP', '중국': 'CN'}
print(data_dict.keys())
print(data_dict.values())
print(data_dict.items())
# 결과 :
# dict_keys(['한국', '일본', '중국'])
# dict_values(['KR', 'JP', 'CN'])
# dict_items([('한국', 'KR'), ('일본', 'JP'), ('중국', 'CN')])
keys() 함수는 딕셔너리에서 키 만을 리스트 형태로 가져오는 함수이다.
values() 함수는 딕셔너리에서 벨류 만을 리스트 형태로 가져오는 함수이다.
items() 함수 딕셔너리에서 키와 벨류 모두를 리스트 형태로 가져오는 함수이다.
집합
data = set()
data_set = {'data1', 'data2', 'data3'}
data = set('data1')
data = set({'data1', 'data2', 'data3'})
집합을 선언하는 방법은 다음과 같다. (다양한 방법이 존재)
빈 집합의 경우에는 변수명 = set() 으로 선언한다.
집합안에 데이터가 있는 경우에는 아래의 세 가지 방법으로 선언한다.
- 변수명 = {데이터1, 데이터2, 데이터3, ...}
- 변수명 = set(데이터1)
- 변수명 = set({데이터1, 데이터2, 데이터3, ...})
단, 주의할 점은 2번 방식으로 집합을 선언할 경우에는 반드시 데이터가 1개일 경우에만 가능하다.
```
참고 :
집합은 다른 데이터 구조와 달리 데이터 간의 순서가 없고, 중복을 허용하지 않는다.
```
data1 = set()
print(type(data1))
# 결과 : <class 'set'>
data2 = {}
print(type(data2))
# 결과 : <class 'dict'>
위의 결과처럼 변수명 = set()은 빈 집합을 선언하지만, 변수명 = {}은 빈 집합이 아니라 빈 딕셔너리를
선언하는 것이다.(주의)
data1 = {'apple', 'samsung', 'LG'}
data2 = {'samsung', 'LG', 'SKT', 'Hyundai'}
print(data1 & data2) # 교집합
print(data1 | data2) # 합집합
print(data1 - data2) # 차집합
print(data1 ^ data2) # 합집합에서 교집합을 뺀 나머지 집합부분
위의 예시처럼 집합 기호를 사용하여, 두 집합간의 합집합·교집합·차집합 등을 구할 수 있다.
data_list = ['apple', 'samsung', 'LG', 'samsung', 'LG', 'SKT', 'Hyundai']
print(set(data_list))
# 결과 : {'apple', 'Hyundai', 'SKT', 'LG', 'samsung'}
리스트를 집합으로 형 변환할 경우, 집합의 특성을 따라 리스트의 중복된 데이터는 모두 제거된 후에 집합으로
형 변환된다.
객체지향 프로그래밍(Object Oriented Programming)
def print_string(data):
print(data)
print(print_string("Fun Coding"))
# 결과 : Fun Coding
일반적인 함수의 코드이다.
string = 'Fun Coding'
print(string.split())
# 결과 : Fun Coding
객체지향 프로그래밍의 함수 코드이다. (동일한 결과)
```
객체지향 프로그래밍이란?
객체지향을 통해 냉장고 안에 코끼리를 넣기 위해서는 아래와 같은 절차를 따라야 한다.
- 코끼리라는 사물의 기능과 정보에 관한 설계도를 만든다.
- 이러한 설계도를 기반으로 코끼리1의 객체를 만든다.
- 냉장고라는 사물의 기능과 정보에 관한 설계도를 만든다.
- 이러한 설계도를 기반으로 냉장고1의 객체를 만든다.
- 냉장고1의 객체 기능을 호출하여, 냉장고1의 객체 문을 연다.
- 코끼리1의 객체 기능을 호출하여, 냉장고1의 객체 안에 코끼리1을 넣는다.
- 냉장고1의 객체 기능을 호출하여, 냉장고1의 객체 문을 닫는다.
정리하자면, 특정 사물의 설계도를 만들고 해당 설계도를 기반으로 사물의 객체를 만든 후에 객체 기능을 호출하여
원하는 결과를 얻는다.
여기서 설계도는 class이고 객체는 object이며, 객체의 기능은 attribute와 method이다.
(단, attribute : 객체의 변수, method : 객체의 함수)
참고로 JAVA와 C++은 객체지향 프로그래밍 언어이기 때문에 반드시 객체지향에 기반을 둔 코드를 작성해야 한다.
반면에, 파이썬은 내부적으로 객체지향을 쓰고 객체지향 문법도 지원하지만 반드시 객체지향에 기반을 둔 코드를
작성해야 하는 것은 아니다. (특정 분야에서 주로 사용됨)
```
클래스 선언
class Quad:
height = 0 # attribute
width = 0 # attribute
color = '' # attribute
# method
def get_area(self):
return self.height * self.width
method의 인자가 필요 없어도, self 인자를 넣어줘야 한다.(self 관련 내용은 추후에 다룰 것)
class Quad():
height = 0
width = 0
color = ''
name = 'Quad'
def quad_name(self):
return self.name
class 안의 attribute를 method에서 호출할 때에는 self.attribute(속성)의 형태로 호출해야 한다.
class의 이름은 일반적으로 대문자로 시작하고, method(함수)의 이름은 일반적으로 소문자로 시작한다.
```
[클래스의 선언 구조]
class 클래스이름:
attribute(변수) 선언
method(함수) 선언
```
객체 생성
quad1 = Quad()
quad2 = Quad()
quad1과 quad2라는 객체 두 개를 생성한 것이다.
객체 기능 호출
quad1.width = 10
quad1.heigt = 10
quad1.color = 'blue'
quad1.name = 'blue 사각형'
quad2.width = 5
quad2.height = 5
quad2.color = 'yellow'
quad2.name = 'yellow 사각형'
print(quad1.color, quad2.height)
# 결과 : blue, 5
객체의 attribute를 호출한 코드 예시이다.
참고로 quad1 객체와 quad2 객체는 동일한 class를 기반으로 생성되었지만, 서로 다른 객체이다.
print(quad1.quad_name())
print(quad2.quad_name())
# 결과 :
# blue 사각형
# yellow 사각형
객체의 method를 호출한 코드 예시이다.
객체와 클래스 예시
# 클래스 선언
class Quad():
height = 0
width = 0
color = ''
name = 'Quad'
def quad_name(self, argument1, argument2):
print(argument1, argument2)
return self.name
# 객체 생성
quad1 = Quad()
quad2 = Quad()
# 객체기능 호출(attribute)
quad1.width = 10
quad1.heigt = 10
quad1.color = 'blue'
quad1.name = 'blue 사각형'
quad2.width = 5
quad2.height = 5
quad2.color = 'yellow'
quad2.name = 'yellow 사각형'
print(quad1.name, quad2.color)
# 결과 : blue 사각형 yellow
# 객체기능 호출(method)
print(quad1.quad_name(1, 2))
print(quad2.quad_name(4, 5))
# 결과 :
# 1 2
# blue 사각형
# 4 5
# yellow 사각형
클래스 생성 시, method에서 인자(argument1, argument2)를 받는 코드를 쓸 경우에는 self를 앞에 붙이지 않고
인자 이름을 그대로 쓰면 된다. [ex. print(argument1, argument2)]
일반코드 VS 함수 코드 VS 라이브러리 활용 코드(파이썬)
print(3 ** 3)
# 결과 : 27
일반적인 연산 코드이다.
def exponential(digit, exponent):
value = digit ** exponent
return value
print(exponential(3, 3))
# 결과 : 27
함수를 사용한 코드이다. (연산 기능)
import math
num = math.pow(3, 3)
print(num)
# 결과 : 27
math 라이브러리를 활용한 코드이다. (연산 기능)
math는 수학관련 함수를 모아놓은 라이브러리이다.
라이브러리 사용법(파이썬)
import math
math.factorial(7)
# 결과 : 5040
```
[라이브러리 사용법 1]
import 라이브러리명
라이브러리명.함수명()
```
참고로 math 라이브러리의 factorial() 함수는 팩토리얼을 계산해준다. (ex. math.factorial(7) : 7!)
from math import sqrt, factorial
num = sqrt(5)
print(num)
num2 = factorial(5)
print(num2)
# 결과 : 120
```
[라이브러리 사용법 2]
from 라이브러리명 import 함수명
변수명 = 함수명()
```
'from 라이브러리명 import 함수명' 코드는 해당 라이브러리에 존재하는 함수 중에서 특정 함수를 가져와서
사용하겠다는 의미이다. (import 뒤에 함수명은 복수로 기재 가능)
from math import *
num = sqrt(5) + factorial(5)
print(num)
# 결과 : 122.23606797749979
```
[라이브러리 사용법 3]
from 라이브러리명 import *
변수명 = 함수명()
```
'from 라이브러리명 import *' 코드는 해당 라이브러리에 존재하는 모든 함수를 가져와서 사용하겠다는 의미이다.
여기서 import 뒤에 *는 해당 라이브러리의 모든 함수를 뜻한다.
import math as m
num = m.factorial(5)
print(num)
# 결과 : 120
```
[라이브러리 사용법 4]
import 라이브러리명 as alias
변수명 = alias.함수명()
```
라이브러리명의 길이가 긴 경우에는 alias를 사용하여, 간단한 코드로 method(함수)를 호출할 수 있다.
from math import factorial as f
num = f(5)
print(num)
# 결과 : 120
```
[라이브러리 사용법 5]
from 라이브러리명 import 함수명 as alias
변수명 = alias()
```
위의 예시(사용법 4)처럼 라이브러리명이 긴 경우에 alias를 사용하여 간단한 코드로 method(함수)를 호출할 수 있다.
[단, 이 경우에는 함수명도 생략가능 하다.(alias만 써주면 됨)]
라이브러리 관련 참고내용
```
라이브러리에는 어떤 함수가 있고, 어떻게 사용하는지?
1. 특정 라이브러리는 해당 함수를 익히는데 굉장한 시간을 소요한다.
2. 대부분의 라이브럴리는 구글을 통해 검색하면 사용법을 찾을 수 있다.
3. 대부분의 라이브러리들이 사용법을 웹을 통해 가이드한다.
4. 때로는 블로그에 설명된 글이 더 이해하기 쉬운 경우가 많다.
마지막으로, 라이브러리를 사용하려면 반드시 해당 라이브러리가 설치되어있어야 한다.(주의)
```
'Python' 카테고리의 다른 글
Python - HTML·CSS 이해와 크롤링 (0) | 2021.10.28 |
---|---|
Python - crawling pattern (0) | 2021.10.28 |
Python - File Write (0) | 2021.10.20 |
Python - External functions (0) | 2021.10.18 |
Python - Built in functions (0) | 2021.10.18 |
댓글