IT recording...
[Python] 파이썬 기본 문법 정리 - Lambda함수, 정규표현식 등 본문
1. Lamda함수
add = lambda x,y : x+y
add(10,20)
>> 30
string = ['bob', 'charles', 'alexander3', 'teddy']
strings.sort(key = lambda s:len(s))
>> ['bob', 'teddy', 'charles', 'alexander3']
- filter : 특정 조건을 만족하는 요소만 남기고 필터링
- map : 각 원소를 주어진 수식에 따라 변형하여 새로운 리스트 반환
- reduce : 차례대로 앞 2개의 원소를 가지고 연산. 최종 출력은 하나임
# filter
nums = [1, 2, 3, 6, 8, 9, 10, 11, 13, 15]
list(filter(lambda n:n%2==0, nums))
>> [2,6,8,10]
# map
nums = [1, 2, 3, 6, 8, 9, 10, 11, 13, 15]
list(map(lambda n:n**2,nums))
>> [1, 4, 9, 36, 64, 81, 100, 121, 169, 225]
# reduce
import functools
a = [1,3,5,8]
functools.reduce(lambda x,y:x*y, a)
>> 120
2. 함수
1) 가변길이 함수 (*args) : 파라미터 수가 정해지지 않은 경우 (튜플)
def test(*args):
for item in args:
pass
test(1,2,3,4)
test(1)
2) 키워드 파라미터 (**kwargs) : 파라미터 이름과 값 함께 전달
def test2(**kwargs):
for key,value in kwargs.items(): #dict로 인식하기 때문에 key, value값
pass
test2(a=1,b=2,c=3,name='Bob')
#오류
test2(1,2,3)
3) format함수 : 문자열 치환
a = '오늘 온도 : {today_temp}도, 강수확률은 : {today_rain}% ,내일온도 : {tomorrow_temp}도'
.format(today_temp = 30,today_rain = 60, tomorrow_temp = 25)
print(a)
>> 오늘 온도 : 30도, 강수확률은 : 60% ,내일온도 : 25도
3. 클래스
1) 클래스 상속, overwrite, super
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
def eat(self,food):
print('{}은 {}을 먹습니다'.format(self.name,food))
def sleep(self,minute):
print('{}은 {}분동안 잡니다.'.format(self.name,minute))
def work(self,minute):
print('{}은 {}분동안 일합니다.'.format(self.name,minute))
class Student(Person): #괄호로 상속 받음
def __init__(self,name,age):
self.name = name
self.age = age
def work(self,minute): #OVERWRITE됨
super().work(minute) #부모 함수도 사용함
print('{}은 {}분동안 공부합니다.'.format(self.name,minute))
class Employee(Person):
pass
bob = Student('Bob',25)
bob.eat('BBQ')
bob.sleep(10)
bob.work(50)
>> Bob은 BBQ을 먹습니다
>> Bob은 10분동안 잡니다.
>> Bob은 50분동안 일합니다.
>> Bob은 50분동안 공부합니다.
2) staticmethod : 객체 생성 안해도 됨
class Math:
@staticmethod
def add(a,b): #self키워드 X
return a+b
@staticmethod
def multiply(a,b):
return a*b
#@staticmethod는 객체 생성 할 필요 없이 바로 class이름으로 사용 가능
Math.add(10,20)
Math.multiply(10,20)
>> 200
3) 연산자 재정의 (special method)
class Point:
def __init__(self,x,y):
self.x = x
self.y = y
def __str__(self):
return '({},{})'.format(self.x,self.y)
#연산자 재정의
def __add__(self,pt):
new_x = self.x + pt.x
new_y = self.y + pt.y
return Point(new_x,new_y)
def __sub__(self,pt):
new_x = self.x - pt.x
new_y = self.y - pt.y
return Point(new_x,new_y)
def __mul__(self,factor):
return Point(self.x*factor,self.y*factor)
def __len__(self):
return self.x**2 + self.y**2
def __getitem__(self,index):
if index==0:
return self.x
else :
return self.y
p1 = Point(3,4)
p2 = Point(2,7)
print(p1)
print(p2)
p3 = p1+p2
p4 = p1-p2
print(p3,p4)
p5 = p1*3
print(p5)
print(len(p1))
#__getitem__
print(p1[0],p1[1])
>> (3,4)
>> (2,7)
>> (5,11) (1,-3)
>> (9,12)
>> 25
>> 3 4
4. 정규표현식
- raw string : 문자열 앞에 r을 붙여서 순수한 문자열임을 알린다.
a = 'abcdef\n'
print(a)
b = r'abcdef\n'
print(b)
>> abcdef
>> abcdef\n
. | 어떤 character (\n 제외) |
\w | 문자 character [a-zA-Z0-9_] |
\s | 공백문자 |
\t, \n, \r | tab, newline, return |
\d | 숫자 character [0-9] |
^, $ | 시작, 끝 |
[] | 문자 클래스 |
* | 0회 이상 반복 (없어도 ok) |
+ | 1회 이상 반복 (있어야 함) |
? | 0~1회 |
{m, n} | m회 이상 n회 이하 |
( ) | 그룹핑 |
출처 whatisthenext.tistory.com/116
[0-9] | \d | 숫자를 찾는다 | 숫자 |
[^0-9] | \D | 숫자가 아닌 것을 찾는다 | 텍스트 + 특수문자 + 화이트스페이스 |
[ \t\n\r\f\v] | \s | whitespace 문자인 것을 찾는다 | 스페이스, TAB, 개행(new line) |
[^ \t\n\r\f\v] | \S | whitespace 문자가 아닌 것을 찾는다 | 텍스트 + 특수문자 + 숫자 |
[a-zA-Z0-9] | \w | 문자+숫자인 것을 찾는다. (특수문자는 제외. 단, 언더스코어 포함) | 텍스트 + 숫자 |
[^a-zA-Z0-9] | \W | 문자+숫자가 아닌 것을 찾는다. | 특수문자 + 공백 |
1) method
- re.match - 처음부터 매치되는지
- re.search - 전체를 검사
- re.findall - 리스트로 리턴
- re.split - 패턴으로 나누기
- re.sub - replace
'Database' 카테고리의 다른 글
[SQLD 제40회] 시험 후기, 도움이 될 만한 사이트, 자료 공유 (0) | 2021.03.20 |
---|---|
[Python] 파이썬 기본 문법 정리 - List, Tuple, Dictionary, Set (0) | 2021.02.10 |
[Database] 5. Mysql SELECT 추가 문법 (group by, count, join 등) (0) | 2021.02.08 |
[Database] 4. 파이썬을 이용한 Data 크롤링 (BeautifulSoup 사용) (0) | 2021.02.08 |
[Database] 3. Foriegn Key 등 (0) | 2021.02.06 |
Comments