if문 한 줄로 표현하기
print(0 if num < 5 else 1) # num < 5가 맞으면 0 , 아니면 1
print(0 if num < 5 else 1 if num < 10 else 2)
# if num < 5: 0
# elif num < 10 : 1
# else : 2 와 동일함
for문을 한 줄로 표현하기
li = list(range(10))
[i for i in li] # list형으로 출력/ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(" ".join(str(i) for i in li)) # 0 1 2 3 4 5 6 7 8 9
List Comprehension
arr = ['java', 'python', 'c++']
result = [len(string) for string in arr] # [4, 6, 3]
result = [n for n in range(10) if n % 2 == 0] # [0, 2, 4, 6, 8]
arr = [-1, 0, -4, 24, 5, -10, 2]
# 양수는 리스트에 그대로 저장하고, 음수는 0으로 변환해서 저장하기
result = [n if n > 0 else 0 for n in arr]
pos = [i*j for i in range(1, 4) for j in range(1, 3)] # [1, 2, 2, 4, 3, 6]
result = [[0 for i in range(2)] for j in range(3)] # [[0, 0], [0, 0], [0, 0]]
enumerate()
for e in enumerate(['apple', 'banana', 'orange']):
print(e)
# (0, 'apple')
# (1, 'banana')
# (2, 'orange')
for i, e in enumerate(['apple', 'banana', 'orange'], start = 1):
print(i, e)
# 1 apple
# 2 banana
# 3 orange
zip()
num = [10, 20, 30]
string = ['apple', 'banana', 'orange']
for n, s in zip(num, string):
print((n, s))
# (10, 'apple')
# (20, 'banana')
# (30, 'orange')
set 만들기
s1 = {1, 3, 5, 7} # {1, 3, 5, 7}
s2 = set([1, 3, 5, 7]) # {1, 3, 5, 7}
print(2 in s3)
set 함수
순서가 일정하지 않음
s1 = {100, 200}
s1.add(150)
s1.add(20)
# {200, 100, 20, 150}
s2 = {10, 20, 30}
s2.update([40, 50, 60, 20])
# {40, 10, 50, 20, 60, 30}
s2 = {10, 20, 30}
s2.remove(20)
# {10, 30}
s2 = {10, 20, 30}
s2.discard(30)
# {10, 20}
s3 = {10, 20, 30}
s4 = s3.copy() # {10, 20, 30}
set 연산자
set1 | set2
set1.union(set2)
result = s1 | s2
result = s1.union(s2)
set1 & set2
set1.intersection(set2)
result = s1 & s2
result = s1.intersection(s2)
result = s1 - s2
result = s1.difference(s2)
result = s1 ^ s2
result = s1.symmetric_difference(s2)
이름만 있는 함수
def 함수명():
함수가 호출되면 실행할 문장
...
함수명() #호출
매개변수가 있는 함수
def 함수명(변수1, 변수2, ...):
함수가 호출되면 실행할 문장
...
함수명(값1, 값2, ...) # 호출
리턴값이 있는 함수
def 함수명(변수1, 변수2, ...):
함수가 호출되면 실행할 문장
...
return 값
변수 = 함수명(값1, 값2, ...) #호출
디폴트 매개변수
def 함수명(변수1=값1, 변수2=값2, ...):
함수가 호출되면 실행할 문장
...
return 값
변수 = 함수명(값1, 값2, ...) #호출
변수 = 함수명() # 호출
매개변수의 개수가 가변적인 함수
def 함수명(*변수):
함수가 호출되면 실행할 문장
...
return 값
변수 = 함수명(값1, 값2, ...) #호출
변수 = 함수명() # 호출
def func7(*args):
result = 0
print(args) # (10,30,20,70,50)
for i in args:
result += i
return result # 180
print(func7(10,30,20,70,50))
매개변수를 딕셔너리 구조로 전달받는 함수
def 함수명(**변수):
함수가 호출되면 실행할 문장
...
return 값
변수 = 함수명(변수1=값1,변수2=값2,...) #호출
def func8(**args):
print(args) # {'userid': 'apple', 'name': '김사과', 'age': 20}
for i in args:
if i== 'userid':
id = args[i]
return id # apple
user = func8(userid='apple', name='김사과', age=20)
리턴값이 여러개인 함수
def 함수명(변수1, 변수2, ...):
함수가 호출되면 실행할 문장
...
return 값1, 값2
변수1, 변수2, ... = 함수명(변수1, 변수2, ...) # 호출
def func9(num1, num2):
return num1+num2, num1-num2, num1*num2, num1/num2
result1, result2, result3, result4 = func9(10, 3)
# 13 7 30 3.3333333333333335
_, _, result3, _ = func9(10,3) # 30
콜백함수(Callback function)
def callback_func(func):
for i in range(2):
func(i)
def print_hello(num):
print('안녕하세요! 파이썬!', num)
callback_func(print_hello)
# 안녕하세요! 파이썬! 0
# 안녕하세요! 파이썬! 1
람다 함수(lambda function)
square = lambda x: x ** 2
print(square(4)) # 16
(lambda x: x**2)(4) # 16
data = ['watermelon ', ' apple ', ' banana ', ' melon12345']
# strip([chars]) : 인자로 전달된 문자를 String의 왼쪽과 오른쪽에서 제거(괄호만 쓰면 공백 제거)
print(sorted(data, key=lambda string: len(string.strip())))
#[' apple ', ' banana ', 'watermelon ', ' melon12345']
# data를 공백 제거한 후의 길이 순으로 배열
filter 함수
num = [1,2,3,4,6,9,10,14,15,18,20]
num = list(filter(lambda n: n % 2 == 0, num))
# [2, 4, 6, 10, 14, 18, 20]
map함수
num = [1,2,3,4,6,9,10,14,15,18,20]
per = list(map(lambda n : n * 0.01, num))
# [0.01, 0.02, 0.03, 0.04, 0.06, 0.09, 0.1, 0.14, 0.15, 0.18, 0.2]
scope
num1 = 10 # 글로벌 변수
def func1():
num2 = 20 # 로컬 변수
print('num1 로컬 변수: ', 'num1' in locals()) # false
print('num2 로컬 변수: ', 'num2' in locals()) # true
print('num1 글로벌 변수: ', 'num1' in globals()) # true
global 키워드
num1 = 10 # 글로벌 변수
def func4():
print(num1)
def func5(num):
global num1
num1 = num # 로컬 변수
func4() # 10
print(num1) # 5
클래스와 객체
클래스 만들기
class 클래스명:
def __init__(slef):
self.필드명1 = 값1
self.필드명2 = 값2
...
def 메소드명(변수1, 변수2, ...):
메소드가 호출되면 실행할 문장
...
🎗 pass
class Dog:
pass # 내용이 없는 블록을 만들 때 사용
def func1():
pass
클래스를 통해 객체를 생성
(객체를 출력할 때 주소값이 찍히는 이유는 toString을 상속받기 때문)
Rucy = Dog()
print(Rucy, type(Rucy))
# <__main__.Dog object at 0x7f2681bafb80> <class '__main__.Dog'>
li1 = list([1, 2])
print(li1, type(li1))
# [1, 2] <class 'list'>
생성자
class Dog:
def __init__(self):
print(self, 'init 호출')
Rucy = Dog() # <__main__.Dog object at 0x7f2681baf430> init 호출
print(Rucy) # <__main__.Dog object at 0x7f2681baf430>
필드값 수정
class Dog:
def __init__(self, name, family = '치와와'):
self.name = name
self.age = 0
self.family = family
budle = Dog('버들이')
budle.age = 15
print(budle.name) # 버들이
print(budle.age) # 15
print(budle.family) # 치와와
메소드 정의하기
class Counter:
def __init__(self):
self.num = 0
def increment(self):
self.num += 1
def current_value(self):
return self.num
KBbank = Counter()
print(KBbank.num) # 0
KBbank.increment()
print(KBbank.num) # 1
print(KBbank.current_value()) # 1
메소드 타입
class Math:
@staticmethod
def add(x, y):
return x + y
@staticmethod
def multifly(x, y):
return x * y
#math = Math(): 생성자가 필요없음
result1 = Math.add(10,3) # 13
result2 = Math.multifly(10,3) # 30
상속
생성자 선언 시 : 자식클래스명(부모클래스명)
# self를 붙이지 않는 경우 단순한 local 변수로 취급됨
class Animal:
def __init__(self,name,age):
self.name = name
self.age = age
def eat(self, food):
print('{}는(은) {}를 먹습니다.'.format(self.name, food))
class Dog(Animal): # Animal 클래스를 상속받음
pass
Rucy = Dog('루시', 13)
Rucy.eat('사료') # 루시는(은) 사료를 먹습니다.
메소드 오버라이딩
class Animal:
def __init__(self,name,age):
self.name = name
self.age = age
def eat(self, food):
print('{}는(은) {}를 먹습니다.'.format(self.name, food))
class Dog(Animal):
def eat(self, food):# 메소드 오버라이딩
print('{}는(은) {}를 아주 좋아합니다.'.format(self.name, food))
Rucy = Dog('루시', 13)
Rucy.eat('사료') # 루시는(은) 사료를 아주 좋아합니다.
다중 상속
class Human:
def __init__(self,name,age):
self.name = name
self.age = age
def study(self, hour):
print('{}는(은) {}시간 동안 공부합니다.'.format(self.name, hour))
class KimApple(Animal, Human):
pass
kim = KimApple('김사과', 20)
kim.eat('밥') # 김사과는(은) 밥를 먹습니다
kim.study(4) # 김사과는(은) 4시간 동안 공부합니다.