IT recording...

[Python] 파이썬 기본 문법 정리 - Lambda함수, 정규표현식 등 본문

Database

[Python] 파이썬 기본 문법 정리 - Lambda함수, 정규표현식 등

I-one 2021. 2. 14. 14:30

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

 

[파이썬] 정규표현식(regular expression)

정규표현식 정규표현식(Regular Expressions) re 모듈 : 파이썬 정규 표현식을 지원한다. 파이썬에서는 정규 표현식을 지원하기 위해 re(regular expression) 모듈을 제공한다. 자바(JAVA)에서 패턴 객체(p)의

whatisthenext.tistory.com

[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

Comments