// 주석문
"""
여기는 주석입니다 아무거나 사용해도 됩니다.
"""
----
#이것은 한줄 주석입니다 아무거나 써도 됩니다.
================================================================================
// 한줄이 길어질 경우
-> back slash를 쓰고 줄바꿈을 해라! 아니면 ()로 묶던가!
s = 'aaaaaaaaaaaaaaaaaaaaaaaaaaa' |
+ 'bbbbbbbbbbbbbbbbbbbbbbbbbbb'
print(s)
================================================================================
// if문
x = -10
if x < 0:
print('negative')
elif x == 0
print('zero')
else:
print('positive')
------------------
->if문은 반드시 텝두번으로 띄어쓰기 간격을 맞춰야한다 아니면 에러가난다!
a = 5
b = 10
if a > 0:
print('a is positive')
if b>0:
print('b is positive')
================================================================================
// 논리 연산자
-> 다른 부분은 &&->and ||-> or 일뿐
if a > 0 and b <5 :
print('a는 양수이고 b는 5보다 작은 수입니다')
================================================================================
// IN과 NOT의 쓰임
y = [1,2,3]
x = 1
if x in y :
print('in')
if 100 not in y:
print('not in')
-----
is_ok = True
if not is_ok : ->if is_ok != True 와 같은거다
print('hello')
================================================================================
// 값이 들어있지 않다는 판정 테크닉
is_ok = '아무숫자혹은 문자,혹은 리스트가 들어있으면'
#False 판정은 0,0.0,''',[],() 일때
if is_ok :
print('ok') -> js에서는 bool 값일경우 true임을 확인하는거지만 파이썬에서는 어떤 순자라도 초기화가 되어있으면 true라고 본다!
================================================================================
// None 판정
-> Null은 파이썬에서는 None이다
is_empty = None
if is_empty is None:
print('None!!!!')
--------------
print(1==True) -> True
print(1 is True)-> False
-> is는 오브젝트 끼리를 비교하는 것이기 때문에 False가 나온다
-> 즉 None 판정은 is를 쓰면 좋다!
================================================================================
// While, Continue, break
count = 0
while count < 5:
print(count)
count += 1
--------
count = 0
while True:
if count > - 5:
break -> while 에서 나오려면 break
if count ==2:
count += 2
continue -> continue는 while에서 나오는 것이 아니라 밑부분을 생략하고 while의 맨처음으로 돌려보낸다!!!!
print(count)
count += 1
================================================================================
//while else문
count = 0
while count < 5:
print(count)
count += 1
else: -> 즉, While 문에 break이 없을때 else를 실행하고 끝내라!
print('Done')
================================================================================
//input함수
while True:
word = input('Enter:') ->putchar같은거임(콘솔에서 입력받을 수 있게됨 만약 유저가 ok로 치면 while에서 나갈수있음)
if(word == 'ok')
break
print('next')
================================================================================
//for문,break문,continue문
array = [1,2,3,4,5]
for i in array :
print(i)
---------
for word in ['my','name','is','hyunwoo']:
if word == 'name' :
break -> my 찍고 출력 끝
if word == 'is' :
continue -> my name hyunwoo
print(word)
================================================================================
// for else 문
for word in ['apple','banana','orange'] :
print(word)
else :
print('배열이 끝났습니다') -> break이없이 다돌았으면 호출된다.
================================================================================
//range함수
for i in range(2,10):
print(i) -> 2,3,4,5,6,7,8,9
------------
for i in range(2,10,3):
print(i) -> 2,5,8(2부터 10전까지 3씩 띄어서 출력해주세요)
-------------
for _ in range(10):
print('hello') -> i대신 _를 쓰면 i는 이 for 문에서 쓰지 않는다는 명시적인 정보를 줄수있음
================================================================================
//enumerate 함수
for i, fruit in enumerate(['apple','banana','orange']):
print(i,fruit) -> 0 apple / 1 banana / 2 ornage(구조기억!)
================================================================================
// zip 함수
days = ['Mon','Tue','Wed']
fruits = ['apple','banana','orange']
drinks = ['coffee','tea','beer']
for day,fruit,drink in zip(days,fruits,drinks)
print(day,fruit,drink) -> Mon apple coffee / Tue banana tea / Wed orange beer
================================================================================
// items 함수
d ={'x' : 100 , 'y' : 200}
for v in d :
print(v) -> x / y(key만 출력되어버린다))
------
for k,v in d.items():
print(k ,':', v) -> x:100/y:200(items 메서드를 이용해 값도 출력 가능)
================================================================================
//함수의 인수와 반환값의 선언
def add_num(a:int,b:int) ->int : -> (a와 b는 정수이며 반환값도 정수입니다(다른걸 넣어도 실행은 된다.)
print(a+b)
================================================================================
//위치 인수,키워드 인수, 디폴트 인수
def menu(entree, drink, dessert ='beer') : ->인수가 없을때는 default값을 미리 줄수있다,
print(entree)
print(drink)
print(dessert)
menu(entree='beer', dessert = 'ice') -> 순서방지를 위해서 네임을 줄수 있다.
================================================================================
// 위치 인수의 튜플화
def say_something(word,*args) :
print(word)
print(args)
say_something('Hi!','Mike', 'Nancy') -> 'Hi' ('Mike','Nancy')
================================================================================
// 키워드 인수의 사전화
def menu(**kwargs):
print(kwargs)
menu(entree='beef',drink='coffe') -> {'entree' : 'beef', 'drink' : 'coffee'}(**kwargs는 들어오는 파라미터들을 사전형으로 만들어준다)
------
def menu(**kwargs):
for k, v in kwargs.items():
print(v,k)
menu(entree='beef',drink='coffe')-> entree beef drink coffee
------
d = {
'entree' : 'beef',
'drink' : 'ice coffe',
'dessert' : 'ice'
}
menu(**d) -> **를 부텨 사전형 d를 전개해서 넘기면 **kwargs가 다시 사전형으로 만들고 for문을 돌리게 된다
------
def menu(food, *args, **kwargs):
print(food)
print(args)
print(kwargs)
menu('banana','apple','orange',entree='beef',drink='coffee') -> banana ('apple','orange') {'entree':'beef','drink':'coffee'}
(다만 *args **kwargs 순서로 써야지 반대로는 안된다!!!!)
================================================================================
// Dogstrings
def example_func(param1, param2):
"""Example function with types documented in the docstring. ->function의 설명
Args:
param1(int): The first parameter -> parameter값 설명
param2(str): The second parameter
Returns: -> return값 설명
bool: The return value, True for success, False otherwise
"""
print(param1)
print(param2)
return True
print(example_func._doc_) -> 코멘트 출력
================================================================================
// 함수 내 함수
def outer(a,b):
def plus(c,d):
return c + d
r1 = plus(a,b)
r2 = plus(b,a) -> 여러모로 유용
print(r1+r2) -> inner function은 보통 이 함수 안에서만 필요한 함수일때 안에 넣어버린다
outer(1,2) -> 6
================================================================================
// 클로저
def outer(a,b):
def inner():
return a+b
return inner
outer(1,2) -> function outer.<locals>.inner~~blahblha(이건 즉, inner()를 시킨적이 없기 때문에 함수가 리턴된다)
f = outer(1,2)
r = f()
print(r) -> 3 (즉 지금은 1+2를 하고 싶지 않으니, f에 저장해뒀다가 나중에 실행 시키고 싶을 때 사용
클로저는 상황 자체를 기억하고 있다. 1,2가 들어왔던 상황
)
-----------
def circle_area_func(pi):
def circle_area(radius):
return pi*radius*radius
return circle_area
cal1 = circle_area_func(3.14)
cal2 = circle_area_func(3.141592)
print(cal1(10)) -> 314.0
print(cal2(20)) -> 314.1592(파이를 결정해두고 나중에 용도에 따라 쓰임을 다르게 할때 이렇게 클로저에 저장해놓는다)
================================================================================
//데코레이터 -> 데코레이션은 함수마다 앞뒤에 다른 함수를 실행 시키고 싶을때 사용
def print_more(func):
def wrapper(*args,**kwargs):
print('func:',func.__name__)
print('args:',args)
print('kwargs:',kwargs)
result = func(*args,**kwargs)
print('result:',result)
return result
return wrapper
def print_info(func):
def wrapper(*args,**kwargs):
print('start')
result = func(*args,**kwargs)
print('end')
return result
return wrapper
@print_info
@print_more
def add_num(a,b):
return a+b
add_num(10 , 20) -> start
func: add_num
args: (10, 20)
kwargs: {}
result: 30
end
================================================================================
//람다
l = ['Mon','tue','Wed','thu']
def changewords(words,func):
for word in words:
print(func(word))
sample_func = lamda word: word.capitalize() ->앞글자를 대문자로 만들기(lamda 인수: return값)
sample_func2 = lamda word: word.lower() -> 소문자로 만들기
changewords(l,sample_func)
================================================================================
//제너레이터
def greeting():
yield 'Good morning'
yield 'Good afternoon'
yield 'Good night'
g = greeting()
print(next(g)) -> Good morning
print('중간에 무언가를 넣을 수 있습니다')
print(next(g)) -> Good afternoon
print(next(g)) -> Good night
================================================================================
//리스트의 내포 표기
t = (1,2,3,4,5)
l = []
for i in t:
if i%2 == 0:
l.append(i)
print(l)
l = [ i for i in t if i % 2 == 0] -> 위에것을 한방에 써버리기.
print(l)
----------
t = (1,2,3,4,5)
t2 = (5,6,7,8,9,10)
l = []
for i in t:
for j in t2:
l.append(i*j)
print(l)
l = []
l = [i*j for i in t for j in t2] -> 이중포문도 한번에 써버리기
================================================================================
// 사전 내포 표기
w = ['mon','tue','wed']
f = ['coffee','milk','water']
d={}
for k,v in zip(w,f):
d[k] = v
print(d)
d={k:v for k,v in zip(w,f)} ->위에꺼 한방에 써버리기
print(d)
================================================================================
//집합 내포 표기
s = set()
for i in range(10):
if i % 2 ==0:
s.add(i)
print(s)
s = {i for i in range(10) if i % 2 ==0} ->집합형 한방에 써버리기