[TIL] 200311, Wed: python 개념 짤막 정리 (Data type, List & Tuple, Dictionary, Function, Conditionals, Module )

rimu·2020년 3월 12일
0

TIL (Today I Learned)

목록 보기
4/4

Done today

파이썬 기초 이론 공부
(Data type, List & Tuple, Dictionary, Function, Conditionals, Module)

New learning

0. Why Python?

세계에서 가장 인기있는 언어.
웹개발, Graphic User Interface Development, 소프트웨어 개발, 과학적 연구, 머신러닝, 데이터 시각화, 데이터 사이언스등 다양한 분야에서 다양한 목적을 위해 사용하고 현재 유투브, 구글, 드롭박스 등 세계의 많은 곳에서 파이썬을 사용하고 있음.
초보자가 이해하기 쉬운 언어
자동화, 데이터를 얻고 데이터를 정리, 문서를 압축하거나 데이터베이스를 migrate하거나, 유투브 다운 오디오 압축, 이미지를 폴더에서 다른곳으로 옮기거나 등 모든곳에서 쓸 수 있음.

1. Data type

변수(variable) : 데이터를 저장하는 곳
변수를 선언하는 규칙 : Snake style
ex) super_long_variable

변수에 넣을 수 있는 데이터 타입
숫자(integer), 텍스트(string: 문자열), 불리언(True/False) , Float, List, Tuple, Dictionary
// 그 외에도 더 있지만 초보자가 시작하기 좋은 수준은 여기까지.

a_string = 'Like this'
a_number = 3
a_float = 3.12
a_boolean = False
a_none = None
(존재하지 않는다 null 과 비슷한 의미)

2. Mutable vs Immutable Sequence

Sequence type; 열거되어 있는 데이터
시퀀스 타입에는 두가지가 있는데 List, Tuples(튜플)이라고 한다.

1) List - Mutable Sequences
많은 데이터를 저장하고 이 데이터를 이용해서 연산을 하기 위해서 사용된다.
많은 데이터 값들을 열거하는 방식의 데이터타입

days = ["Mon", "Tue", "Wed", "Thu", “Fri"]

데이터값을 출력해보면
print(type(days)) 결과는 <class ‘list'>가 나온다.

python standard library의 공식 문서를 참고.
그중에 list를 살펴보면 common과 mutable operation으로 나옴.
1)common
x in s
print ("Man" in days)
결과: False

s[i] index로 원하는 값을 얻게 해준다.
print(days[3])
결과: Thu
컴퓨터는 0부터 숫자로 인식하여 인덱스 3을 입력하면 시퀀스의 네번째 아이템이 출력된다.

len(s) list의 길이값을 알려준다.
print(len(days))
결과: 5
그 외에 많은 operations가 있다.

[ Mutable Operations ]
mutable sequence : 값을 변경할 수 있다
immutable sequence : 값을 변경할 수 없다
그렇기때문에 값을 바꾸고싶지 않을때는 immutable sequence를 사용해야한다. list는 mutable sequence라서 값을 변형할 수 있다.

s.append(x) 시퀀스에 x라는 값을 추가한다.

days.append('Sat')
print(days)
결과 ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', ‘Sat']

s.reverse() 시퀀스의 값들의 순서를 역으로 바꾼다.

days.reverse()
print(days)
결과 ['Sat', 'Fri', 'Thu', 'Wed', 'Tue', ‘Mon’]

2) Tuples - Immutable Sequence
Tuple은 common operations만 가능(변형이 불가능)
대괄호 대신 소괄호를 사용하면 Tuple sequence가 생성된다.
Tuple을 변형하지 않는 시퀀스 길이값, 인덱스 위치 출력 등의 작업을 할 수 있다.

days = ("Mon", "Tue", "Wed", "Thu", "Fri")
print(type(days))
결과: <classtuple'>

3. Dictionary

단순히 데이터를 열거하는 형식이 아니라 특성에 따라 정리된 형태로 데이터를 저장하고싶을때 Dictionary를 사용한다.
각각의 ‘key’와 ‘value’가 사전의 내용처럼 짝을 맞춰 정리된다.

sori = {
  "name": "sori",
  "age": 27,
  "korean": True,
  "fav_food": ["kimhchi", "sushi"]
}

새로운 키밸류값을 추가할때는 다음 방식을 쓴다.

sori["pretty"] = True
결과: {'name': 'sori', 'age': 27, 'korean': True, 
'fav_food': ['kimhchi', 'sushi'], 'pretty': True}

딕셔너리 안에는 모든 데이터타입을 이용해서 데이터를 저장할 수 있다.

4. Function(함수)

4-1. 개념
Function은 어떤 행동(기능)을 가지고 반복할 수 있는 것을 의미한다.
즉 적용하고자 하는 행동을 넣어놓고 계속 반복하는것.
이게 바로 프로그래밍이기 때문에 Function은 정말 중요하다.
우리는 컴퓨터를 이용해서 반복된 행동을 효율화하기 위해 Function으로 행동(기능)을 작성하고 반복해서 재사용하려고 한다.

4-2. 함수를 정의하는 규칙

def say_hello():
  print("hello")

python은 다른언어와 다르게 indentation(들여쓰기)로 function의 시작과 끝을 판단한다. 초보자들이 파이썬을 사용할때 가장 많이 하는 실수가 바로 여기서 발생한다. def는 definition의 약자이다.

사용할때는 say_hello()
function 이름 다음에 괄호를 쓰는것의 의미는 이 function을 실행한다는것. 실행 버튼을 누르는것처럼 지금 당장 이 함수가 실행이 된다.

4-3. 함수의 인자 (function argument)
function을 정의할때 이 function에서 포함시키길 원하는 외부 정보(input)가 있는 경우 argument에 추가한다.
함수를 사용할때 이 argument에 바꾸고싶은 정보만 넣으면 반복해서 사용할 수 있기 때문에 효율적이다.

def say_hello(name):
  print("hello", name)

say_hello("sori")
결과: hello sori

# argument에 기본값(default value)을 입력할수도 있다.
def plus(a,b):
  print(a + b)

def minus(a, b=0):
  print(a - b)

plus(2,5) # 결과: 7
minus(2)  # 결과: 2

대부분의 함수들은 외부에서 input(데이터)를 받아서 사용하게 된다.
위의 예시의 경우 name이라는 외부 input이 있는 것이고
plus, minus의 경우 a,b에 들어가는 데이터가 외부 input이다.
argument에 기본값을 입력해두면 함수를 argument 없이 호출해도 오류가 나지않는다.

def say_hello (name="annoymous"):
  print("hello", name)

say_hello() # 결과: hello annoymous

# 그리고 기본값 인자가 있어도 새로운값을 넣을 수 있다.
say_hello(“nico”)  # 결과: hello nico

참고: Built-in Function

print(), type()과 같은 함수들은 파이선에 이미 작성된 함수라서 정의하지 않고 언제든 사용가능하다.

int() 문자열을 숫자(정수)로 변환
print() 콘솔에 데이터값을 출력한다
len() 데이터값의 길이를 알려준다

두가지 이상의 함수를 한번에 사용할 수도 있다.
print(len(“hello world”))

4-4. Return
Return은 함수가 실행될때 그 값을 콘솔로 출력(print)하는게 아니라 반환(return)한다. 그리고 리턴 후 함수를 종료시킨다는 특징이 있다. 파이썬에서는 리턴을 하고 난 후 함수가 종료되기 때문에 하나의 함수에 하나의 값만 리턴할 수 있다.
Return means ‘Finish the function’ and send this value.

print와 return의 결과를 비교해보면 쉽게 알 수 있다.

def p_plus(a,b):
  print (a + b) 

def r_plus(a,b):
  return a + b 

p_result = p_plus(2, 4)
r_result = r_plus(2, 4)
print(p_result, r_result)

# 결과는 6 None 6 이 출력된다.

return의 결과가 None인 이유는 r_plus 함수에서 실행된 내용을 단지 반환했을뿐이지 프로그램 내에서는 아무것도 아닌 상태이다. 그래서 None이라고 나온다.

4-5. Keyworded Arguments
앞서 살펴본 Argument는 positional Arguments라고 한다. 이말인즉슨 위치에 의존적인 argument라는 것. 위치에 따라서 함수와 쌍을 이루어 실행된다. 위의 예시에서 a는 2, b는 4와 짝을 이룬다.
하지만 keyworded argument는 위치가 아니라 이름에 영향을 받는다.

def plus(a,b):
  return a - b 

result = plus(b=30, a=1)
print(result)

위의 예시를 보면 인자의 위치에 상관없이 이름에 따라 인자가 결정된 것을 볼 수 있다. 인자가 여러개가 되면 순서를 기억하기 어려워지기때문에 아주 유용한 특징이다.

그 밖에 인자를 string과 함께 출력하고싶을때는 두가지 방법이 있다.
(How to format string)

1) f”Hello {name} you are {age} years old”
2) "Hello" + name + "you are" + age + "years old"

def say_hello(name, age):
  return f"Hello {name} you are {age} years old"

hello = say_hello("nico", 12)
# hello = say_hello(age="12", name=“nico”) 
# 앞서말했듯이 이것도 가능 
          
print(hello)

# 결과: Hello nico you are 12 years old

5. Conditionals

5-1. Conditionals- if
조건에 따라 다른 결과를 가져오는 함수를 만들고 싶다면 조건문을 사용하면 된다. 다음은 인자로 들어가는 값이 숫자가 아닐 경우 에러를 보여주는 조건문이다.

def plus(a, b):
  if type(b) is str:
    return None
  else:
    return a + b

print(plus(12, 10)) # 결과는 22 

1개 이상의 조건문을 논리 연산자(and, or)를 통해 연결할 수도 있다.

def plus(a, b):
  if type(b) is str or type(b) is float:
    return a + b
  else:
    return None

print(plus(12, 1.2)) # 결과는 13.2

5-2. Conditionals - if / else and or
조건문은 elif(else if의 축약형)를 사용하여 무한대로 늘어날 수 있다.

def age_check(age):
  print(f'you are {age} years old')
  if age < 18:
    print ('You cant drink.')
  elif age == 18:
    print ('You are new to drink!')
  elif age > 18 and age < 25:
    print ('You are still kind of young')
  else:
    print ('Enjoy your drink')

age_check(30)  #결과: you are 30 years old. Enjoy your drink

6. Loop - for in

어떤 명령을 순차적으로 반복해서 실행할때 for loop를 유용하게 사용한다.
(python standard library에는 loop에 대한 설명을 이렇게 말한다.
string, tuple 또는 list 같이 배열의 요소(아이템)을 순차적으로 가리킨다.)

요일 데이터가 담겨있는 tuple를 생성하고 이 아이템을 하나씩 출력하고 싶다고 해보자.다음과 같이 for in 을 사용하면 된다.

days = ("Mon", "Tue", "Wed", "Thu", "Fri")

for x in days:
  print (x)

결과는 Mon Tue Wed Thu Fri 가 출력된다.

여기서 x는 작업되는 배열의 아이템을 가리키는데 아무거나 입력해도 실행에는 문제가 없지만 코드의 문맥에 요일의 경우 day처럼 아이템을 대표하는 단어를 입력한다.

만약 내가 원하는 결과를 얻었을때 루프를 중단하고 싶다면 조건문break를 사용한다.

days = ("Mon", "Tue", "Wed", "Thu", "Fri")

for x in days:
  if x is "Wed":
    break
  else:
   print (x)

결과는 Mon Tue만 출력되어 루프가 중간에 중단되었다는 것을 알 수 있다.

7. Module

python에는 기본으로 내장된 module이라는 어떤 기능들의 집합이 있어서 필요에 따라 프로그램에 import하여 사용할 수 있다.
웹에서 이미 만들어진 기능이나 웹에서 다운로드 받은 다른사람의 코드를 import를 통해 가져올 수도 있다. import 방법은 다음과 같다.

import math
print(math.ceil(1.2))

math 모듈을 사용하기 위해 math를 import하고 그 중에서 ceil이라는 올림 기능을 사용했다.
이렇게 python에는 기본으로 내장된 모듈이 정말 많은데 math, datetime, csv(comma separate value의 약자), logging, json 등 이 모든걸 사용할 수 있다.
주의할 점은 import를 할 때 어떤 묶음 모듈 전체를 import하지 않는 것이다. 왜냐면 한 묶음의 모듈 안에 정말 많은 기능들이 존재하는데 내가 사용할 것은 단 몇개뿐이기 때문에 필요한 module만 import 하는 것이 바람직한 방향이다.

from math import ceil, fsum

print(ceil(1.2))
print(fsum([1,2,3,4,5]))

또, import한 모듈의 이름을 임의로 설정할 수도 있다.

from math import fsum as sexy_sum
print(sexy_sum([1,2,3,4,5]))

다음은 다른 파일에서 정의한 모듈을 import하여 사용하는 예시다.
calculator.py 파일을 생성하고 다음을 추가한다. 방법은 위에서 사용한 방법과 동일하다.

# calculator.py
def plus(a, b):
  return a + b 
  
# main.py
from calculator import plus 
print(plus(1,2))

Feelings & Thoughts

안녕 파이썬
드디어 내 생애 두번째 프로그래밍 언어를 배운다. 이제 기초 이론만 한 번 훑어본 게 전부지만 확실히 파이썬은 다른 언어에 비해 수식같은게 깔끔하고 직관적이다. 그래서 오히려 더 헷갈릴 것 같은 불안한 예감은 모다....😳
이제 practice파트로 넘어가서 내일부터 웹스크래핑하는걸 배워본다. 재밌을거같음!


올 것이 오고있다
그리고 드디어 위코드 슬랙에 초대되었다. 흡...두근쓰.
개강 날짜가 다가옴과 동시에 지금 이 시간을 충분히 활용해서 기반을 잘 잡아야겠다는 생각과 막연한 걱정이 커져만 간다. 다른 부트캠프를 다니고 개발자가 된 친구는 지금 혼자 공부할 시간 있을때 진짜 최대한 많이 해놔야한다고 말해주었다. 왜냐면 자기가 그렇게 안하고 가서 울고싶은 순간들이 너무 많았다고 한다. 백엔드부터 거의 따라가지 못했다고 하는데... 무서워 😂 개발 공부시작하기 전에는 그저 하루빨리 부트캠프 들어가서 시키는대로 공부하고 취업하고싶었는데 내 계획보다 시작 시기가 늦어져 좀 우울했었다. 하지만 그건 지금 생각해보니 차라리 지금처럼 혼자 공부할 시간 3개월정도 두고 시작하는게 천만 다행 인 것 같다. 이제 공부시작한지 고작 한달 반 정도밖에 안된 쪼렙이지만 지금까지 공부한 바로 느껴지는 건 프로그래밍은 내 지식의 수준에 따라 받아들이는 수준이 엄청 달라진다는거다. 아무것도 모르는 채로 보면 그냥 외계어인데 뭐라도 주워들은게 생기면 신기하게도 그 외계어의 의미가 느껴진다. 얼마나 공부하고가든 물론 좌절과 멘붕과 울고싶은 순간들이 어떻게 없겠냐만 그래도 좀 더 지금 시간을 소중하게 보내야겠다고 다짐 또 다짐한다. 💪 이래놓고 맨날 TIL쓰기 밀리지만... (먼산)

To-do tomorrow

파이썬 웹스크래핑 공부
CSS masterclass 공부시작..? (불확실)

profile
Perfectly imperfect ✨

0개의 댓글