20210604 TIL

Breadman·2021년 6월 5일
0

항해99

목록 보기
6/28
post-thumbnail

Python 문법

문자열

  • 문자열은 리스트로 관리된다.
  • len(string): 문자열 길이. (리스트 동일)
  • upper() / lower(): 대문자 변환 / 소문자 변환
  • replace(): 특정 문자 바꾸기
name = '김철수'
name.replace('철', '영')
print(name)		# 김영수
  • list[0:2]: 슬라이싱. (list index 0 ~ index 1 까지)
blah = '김수한무거북이와두루미'
print(blah[4:7]) 	# 거북이

리스트

  • append(ele): 요소 추가.
  • sort(): 정렬.
nums = [4,2,5,3,1]
print(nums.sort()) 		# [1,2,3,4,5]
print(nums.sort(reverse=True) 	# [5,4,3,2,1]

조건

  • 1 in list: 리스트 안에 요소가 있는지 확인.
  • key in dict: 딕셔너리 안에 key가 있는지 확인.
# list
names = ['영희', '철수', '갑순', '갑돌']

print('명희' in names) 		# False
print('용수' not in names) 	# True

# dictionary
person = {'name': 'bill', 'age': 24}

print('email' in person) 	# False
print('name' in person) 	# True
print('phone' not in person) 	# True

기타 자료형

튜플(tuple)

  • 리스트와 유사하나, 데이터 불변성이 특징.
  • 딕셔너리 대신, 리스트와 조합해 딕셔너리와 유사하게 만들어 사용할 때 많이 쓰임.
a = [1,2,3]
a.append(4)		# a = [1,2,3,4]

t = (1,2,3)
# t.append(t) 	# Error

similar_dict = [('bobby', 28), ('jane', 21), ('john', 17)]
origin_dict = [
	{'name': 'bobby', 'age': 28},
    	{'name': 'jane', 'age': 21}, 
        {'name': 'john', 'age': 17}
       ]

print(similar_dict[1][0]) 	# jane
print(origin_dict[1]['name']) 	# jane

집합(set)

  • 중복과 순서가 없는 자료형.
  • 순서가 없기 때문에 인덱싱을 위해선 list나 tuple로 변환해야한다.
set_nums = {1, 2, 3, 4, 5}
set_list = set(['수박', '수박', '참외']) 	# {'수박', '참외'}
set_name = set('bobby') 		# {'b', 'o', 'y'}

set_to_list = list(set([1,3,4,2,3,2,1,5,4,3,5,2])) 	# [1,2,3,4,5]

기타 구문

  • f-string: javascript의 백틱 문자열처럼, 문자열 사이에 변수를 편리하게 넣을 수 있는 문자열.
name = 'bobby'
print('안녕하세요, ' + bobby + '입니다.')
print(f'안녕하세요 {name}입니다.')
  • try, except: 예외처리 구문. javascript에선 except자리에 catch를 사용.
  • from [fimename] import [variables]: 파일 불러오기.
from react import React, Components

한 줄 구문

# if 문: (참인 경우) if (조건) else (거짓인 경우)
age = 20
print('성인' if age > 20 else '청소년') 	# 청소년


# for 문: (요소에 대한 처리) for (요소) in (리스트)
num_list = [1,2,3,4,5]
mul_list = [n * 2 for n in num_list]
print(mul_list) 	# [2,4,6,8,10]


# lambda 식: 한 줄 함수.
# (lambda 매개변수1, 매개변수2, ... : 매개변수를 이용한 표현식)
say_hi_lambda = lambda x: print(f'안녕하세요 {x}입니다.')
say_hi_lambda('병순') 	# 안녕하세요 병순입니다.

map, filter

map과 filter 모두 리스트에서 요소를 하나씩 꺼내와, (첫 번째 인자로 넣는) 함수에 넣어 처리하는 방식의 구문이다. 차이점이라면 filter는 함수의 리턴값이 True인 경우만 값을 걸러낸다는 점이다.

두 구문 모두 결과값을 인덱싱하기 위해선 리스트나 튜플로 변환해야한다.

people = [
    {'name': 'bob', 'age': 20},
    {'name': 'carry', 'age': 38},
    {'name': 'john', 'age': 15},
    {'name': 'smith', 'age': 17}
]

age_map = map(lambda x: '성인' if x['age'] > 20 else '청소년', people)
print(list(age_map)) 	# ['청소년', '성인', '청소년', '청소년']

age_filter = filter(lambda x: x['age'] > 20, people)
print(list(age_filter)) # [{'name': 'carry', 'age': 38}]

함수 심화

# default 인자 및 인자값 지정
def cal(a, b=2):
	return a + 2 * b

print(cal(1)) 		# 5
print(cal(a=3, b=1)) 	# 5
print(cal(b=3, a=2)) 	# 8

# 인자 개수 지정없이 받기
def welcome_names(*args):
	for name in args:
    	print(f'{name} 어서오고.')
 
 welcome_names('철수', '영희', '춘자') 	# 철수 어서오고. / 영희 어서오고. / 춘자 어서오고.
 
 # 키워드 인수를 지정없이 받기
 def get_dogs(**kwargs):
 	print(kwargs)
 
 get_dogs(name='choco')		# {'name': 'choco'}
 get_dogs(name='bawu', age='1 year') 	#{'name': 'bawu', 'age': '1 year'}
  • *args는 튜플 타입, **kwargs는 딕셔너리 타입이다.

class

class Monster:
    hp = 100
    alive = True

    def damage(self, attack):
        self.hp = self.hp - attack
        if self.hp < 0:
            self.alive = False

    def status_check(self):
        if self.alive:
            print('살아있다')
        else:
            print('죽었다')

m = Monster()
m.damage(120)

m2 = Monster()
m2.damage(90)

m.status_check()
m2.status_check()

python의 class는 javascript나 cpp과는 다르게, method를 선언할 때 첫 번째 인자로 self(일종의 this)를 넣어줘야한다.
그리고 생성자는 __init__(self[, ...]) 이라는 이름으로 선언해줘야한다.

후기

새로운 문법을 배우는 거지만, 이미 한 두번 다른 언어를 공부해보니 익숙한 부분들이 많았다. 몇 가지 헷갈리는 부분들과 자주 쓰이는 내장함수들은 필요하면 그때 그때 찾아가면서 익숙해지도록 노력해야겠다.

profile
빵돌입니다. 빵 좋아합니다.

0개의 댓글