320x100
'''
def seqgen(data):
for index in range(0, len(data),2):
yield data[index:index+2]
solarterm = seqgen("입춘우수경칩춘분")
for k in solarterm:
print(k,end=",")
'''
'''
# 2글자씩 구분해서 찢어놓는 작업
data = "입춘우수경칩춘분청명곡우입하소만망종"
for k in (data[index:index+2] for index in range(0,len(data),2)): # 너무 함축적이여서 이해하기가 난해하다.
print(k, end=",")
'''
'''
for n in [i for i in range(100)]:
print(n,end=",")
print("")
for n in (i for i in range(100)):
print(n,end=",")
# 위 두 숫자들의 결과값은 같다. 하지만 전자는 리스트를 생성해 반복을하고
# 따라서 반복을 시작하기 전에 모든 숫자가 일단 메모리에 생성된다.
'''
# 17.2 데코레이터
'''
# 일급 시민
def add(a,b):
print(a+b)
plus=add
plus(1,3)
'''
'''
def calc(op,a,b):
op(a,b) # 어쩌라는 거지?
def add(a,b):
print(a+b)
def multi(a,b):
print(a*b)
calc(add,1,2)
calc(multi,3,4)
# 오 이렇게도 활용이 가능하구나..
# 놀랍다.
# 정말로 활용성이 무궁무진한것같다.
'''
'''
# 지역 함수
def calcsum(n):
def add(a,b):
return a+b
sum = 0
for i in range(n+1):
sum = add(sum,i)
return sum
print("10까지의 더한결과 값은 : ",calcsum(10))
# 딱 예제로만 봤을때는 무쓸모 같지만
# 직감적으로 언젠간 활용적 측면에서 분명 쓰임새가 있을 것같다는 느낌이 든다.
'''
'''
# 첫째 시도
def calcsum(n):
def add(a,b):
return a+b
# 틀림포인트 3. 심지어 여기서부터 아래 리턴값이 앞에 있으면 에러가 난다.
sum = 0 # 틀림포인트 1.여기에 있을때는 결과값이 45
for i in range(10):
#sum =0 # 틀림포인트 2. 여기에 있을때는 결과값이 9
sum = add(sum,i)
return sum
print("dd",calcsum(10))
'''
'''
# 둘째 시도
def calcsum(n):
def add(a,b):
return a+b
sum=0
for i in range(n+1):
sum = add(sum,i) # 실수1 인수가 sum과 i라는 사실을 눈치채지 못했다.
return sum
print("aa",calcsum(10))
'''
'''
# 셋째 시도
def calcsum(n): # 외부함수
def add(a,b): # 지역함수
return a+b
sum = 0
for i in range(n+1):
sum = add(sum,i)
return sum
print("aa",calcsum(10))
# 이렇게 외부함수와 지역함수를 동시에 사용하게 되었을때
# 이번 수식의 경우에 보면 사실상 지역함수는 기능을 상실하는것같다.
# 음... 지역함수는 사용해도되고 안해도 되는건가?
print(calcsum.add(1,5)) # 음.. 이게 사용이 안되는구나.
print(add(1,5)) # 이것도 사용이 안되고
# 지역함수는 외부함수의 내부 세계에서만 사용 가능한 함수 같다.
'''
# 지역함수이용 방법은 실용성이 높지 않다고 한다.
# 너무 고급 문법이라서 활용이 난해하다고 한다.
'''
# 전체적으로 이 책으로 처음 코드를 배우기 시작했던 입장으로써
# 개연성을 깨닫지 못하겠다.
def makeHello(message):
def Hello(name):
print(message + ","+name)
return hello # 이 저자는 정말 얼마나 하기 싫었을까 근데 돈은 가져가고 싶고 ㅠㅠ 진짜 엿같다
enghello = makeHello("Good Morning")
hanhello = makeHello("안녕하세요")
enghello("Mr kim")
hanhello("홍길동")
'''
# 함수 데코레이터
# 이게 함수 중에서 난이도가 가장 높은거라고 한다..
# 제발 그냥 기본적인 설명이나 잘 되어있고 예제 짜임새나 잘 되어있으면...
'''
def inner():
print("결과를 출력합니다.")
def outer(func):
print("-"*20)
func()
print("-"*20)
outer(inner)
# 짜임새가 매우 좋은것같고 별도의 설명 없이도 이해가 되었다.
# 더 난이도가 높아지면 그때는 모르겠으나, 현재는 최대한 기초를 익히는데 익숙해보자.
'''
'''
# 첫 시도 - 실패
def inner():
print("결과를 출력합니다.") # 이건 생각이 안나서 보고 했다.
def outer(func):
print("-"*20)# outer도 철자가 기억이 안나서 봤다.
# print(inner) # 이렇게 해주니깐 메모리 값이 나온다. <function inner at 0x0000024CCFF1D3A0>
func()
print("-" * 20)
outer(inner)
'''
'''
def inner():
print("결과를 출력합니다.")
def outer(func):
print("-"*20)
func()
print("-" * 20)
outer(inner)
# 사실 func()라고 쓰는것도 그렇고
# print 없이 outer(inner)라고 하는것도 내게는 어색한 표현 방법이다.
# 뭐, 처음엔 다 어색했던 거니깐 익숙해져보자.
'''
'''
def inner():
print("결과를 출력합니다.")
def outer(func):
def wrapper():
print("-"*20)
func()
print("-"*20)
return wrapper # 이거는 여전히 긴가민가하다. 위에서는 ()로 쓰였는데 왜 여기선 빠지나..
# 심지어 ()라고 하니깐 오류가 생긴다.
inner = outer(inner)
inner()
'''
'''
def inner():
print("결과를 출력합니다")
def outer(func):
def wrapper():
print("-"*20)
func()
print("-" * 20)
return wrapper
inner = outer(inner)
inner()
'''
'''
# inner = outer(inner) # 이거는 @outer
def outer(func):
def wrapper():
print("-"*20)
func()
print("-" * 20)
return wrapper
@outer
def inner():
print("결과를 출력합니다.")
inner()
'''
# 데코레이트? 이게 @~~를 의미하는것같은데 유용성이 정말 대단할 것같다.
# 근데 아직은 설명을 들어도 뭐가뭔지 한개도 모르겠다.
# 그저 두려워하지 말고 코드쟁이로 살기로 했으니, 코드 두드려보자 따라하는 거라도
'''
def para(func):
def wrapper():
return "<p>" + str(func()) + "</p>"
return wrapper
@para
def outname():
return "김상형"
@para
def outage():
return "29"
print(outname())
print(outage())
'''
'''
def div(func):
def wrapper():
return "<div>" + str(func()) + "</div>"
return wrapper
def para(func):
def wrapper():
return "<p>" + str(func()) + "</p>"
return wrapper
@para
@div
def outname():
return "김상형"
@para
@div
def outage():
return "29"
print(outname())
print(outage())
'''
'''
def div(func):
def wrapper():
return "<div>" + str(func()) + "</div>"
return wrapper
def para(func):
def wrapper():
return "<p>" + str(func()) + "</p>"
return wrapper
@div
@para
def outname():
return "김상형"
@div
@para
def outage():
return "29"
print(outname()) # 출력할땐 ()이렇게 해줘야 하는구나
print(outage()) # 출력할땐 ()이렇게 해줘야 하는구나
'''
'''
def div(func):
def wrapper():
return "<div>" + str(func())+"</div>"
return wrapper
def para(func):
def wrapper():
return "<p>" + str(func())+"</p>"
return wrapper
@div
@para
def outage():
return "29"
@div
@para
def outname():
return "송현주"
print(outname())
print(outage())
'''
'''
def div(func):
def wrapper():
return "<div>"+str(func())+"</div>"
return wrapper
def para(func):
def wrapper():
return "<p>"+str(func())+"</p>"
return wrapper
@div
@para
def outname():
return "김상형"
@div
@para
def outage():
return "29"
print(outname())
print(outage())
'''
'''
def div(func):
def wrapper():
return "<p>" + str(func())+"</p>"
return wrapper
def para(func):
def wrapper():
return "<p>" +str(func())+"</p>"
return wrapper
@div
@para
def outage():
return "29"
@div
@para
def outname():
return "부대찌개"
print(outname())
print(outage())
'''
'''
def div(func):
def warpper():
return "<p>"+str(func())+"</p>"
return warpper
def para(func):
def warpper():
return "<p>"+str(func())+"</p>"
return warpper
@div
@para
def outage():
return "29"
@div
@para
def outname():
return "김우중"
print(outname())
print(outage())
'''
'''
def para(func):
def wrapper():0
return "<p>"+str(func())+"</p>"
return wrapper
@para
def outname(name):
return "이름:" + name + "님"
@para
def outage(age):
return "나이:" + str(age)
print(outname("김상형"))
print(outage(29))
'''
'''
def para(func):
def wrapper(*args, **kwargs):
return "<p>" + str(func(*args,**kwargs)) + "</p>"
return wrapper
@para
def outname(name):
return "이름" + name+"님"
@para
def outage(age):
return "나이:" + str(age)
print(outname("김상형"))
print(outage(29))
print(outname.__name__)
'''
'''
from functools import wraps
def para(func):
@wraps(func)
def wrapper(*args,**kwargs):
return "<p>" + str(func(*args, **kwargs)) + "</p>"
return wrapper
@para
def outname(name):
return "이름:" + name + "님"
@para
def outage(age):
return "나이"+ str(age)
print(outname("김상형"))
print(outage(29))
print(outname.__name__)
'''
'''
# 전체적으로 지나치게 복잡하지 않은가? 싶기도하다.
# 이걸 도대체 어떻게 이해해야하는 걸까?
from functools import wraps #이해안됨1
def para(func):
@wraps(func) # 이해안됨2
def wrapper(*args,**kwargs): # 이해안됨 3
return "<p>" +str(func(*args, **kwargs)) + "</p>" # 이 쓰임이 나에겐 진짜 난해하다. # 이해안됨4
return wrapper
@para # 이해안됨 5
def outname(name): #이해안됨 6
return "이름: "+name + "님"
@para
def outage(age):
return "나이: " + str(age)
print(outname("김상형"))
print(outage(29))
print(outname.__name__)
'''
# 클래스 데코레이터
'''
class Outer:
def __init__(self,func):
self.func = func
def __call__(self):
print("-"*20)
self.func()
print("-" * 20)
def inner():
print("결과를 출력합니다.")
inner = Outer(inner)
inner()
# 위의 코드를 보면 Outer클래스 안의 __call__,밑의 inner가 출력되었다.
# 어떻게 받아들이고 어떻게 학습을 해야할지 좀 감이 안 온다.
'''
'''
class Outer:
def __init__(self,func):
self.func=func
def __call__(self):
print("-"*20)
self.func()
print("-" * 20)
@Outer
def inner():
print("결과를 출력합니다.")
inner()
'''
# 17,3 동적 코드 실행
# eval
# 컴파일 언어는 모든 코드를 완벽히 번역한 후 실행하며 실행 시점에 모든 코드가 완성 되어있다.
# 인터프리터 언어는 코드 실행중에 생성해 낼 수 있다.
'''
result = eval ("2+3*4")
print(result)
a = 2
print(eval("a+3"))
city = eval("['seoul','osan','suwon']") # 여기를 더블 코테이션으로 감쌌을때, 반대의 코테이션을 써줘야 작동이 되더라.
for i in city:
print(i,end=",")
# 전체적으로 굳이 eval을 써줘야 작동이 되는건가? 싶어서 뺀 버전으로 따라해 보려고 한다.
'''
'''
result = 2+3*6
print(result)
# 음 ... 20으로 나오는데...
a = 2
print(a+3)
# 왜 굳이 eval를 써야할 메리트를 못찾겠다.
'''
# 뭔가 휘황찬란한 이유때문에 eval이 필요하다고 한다;
# 아무튼 잘 이해는 안가고 쓸모없을것같긴 하지만 그래도 해설코드만이라도 따라 써보자.
'''
import math
while True:
try:
expr = input("수식을 입력하세요. 끝내고싶으면 0을 입력하세요.: ")
if expr =="0": # 해설에서는 "0"으로 되어있다. 도대체 왜 그런걸까
# 일반 숫자인 0으로 했더니 무한히 돌아간다..; 왜그런걸까
# input 받아서 입력되는 거라 str처리되서 그런건가?
break
print(eval(expr))
except:
print("수식이 잘못 되었습니다.")
# eval 함수는 "문자열로 된 표현식을 평가하여 값을 만들어내며 이 값을 변수에 대입하면
# 실행 중에 변수 값을 결정 할 수 있다." 라고 한다.
'''
'''
repr
# eval과는 반대로 객체로부터 문자열 표현식을 생성한다.
print(str(1234),end=",")
print(str(3.14),end=",")
print(str(['seoul','osan','suwon']),end=",")
print(str('korea'))
print(repr(1234),end=",")
print(repr(3.14),end=",")
print(repr(['seoul','osan','suwon']),end=",")
print(repr('korea'))
# 음... 정말 비슷하다. 하지만 str이 사람을 위한 문자 변환식이라면
# repr은 해석기를 위한 표현식이라고 한다.
# 결과적으로는 마지막의 'korea'만 유일하게 싱글 코테이션이 없고 있고의 표현 차이가 있다.
'''
'''
intexp = repr(1234)
intvalue = eval(intexp)
print(intvalue)
strexp = repr('korea')
strvalue = eval(strexp)
print(strvalue)
'''
'''
class Human:
def __init__(self,age,name):
self.age = age
self.name = name
def __str__(self):
return "이름%s, 나이 %d" %(self.name, self.age)
def __repr__(self):
return "Human("+str(self.age)+",'" +self.name+ "')" # 여기가 특히 복잡하다.
kim = Human(29,"김상형")
print(kim)
kimexp = repr(kim)
kimcopy = eval(kimexp)
print(kimcopy)
'''
'''
exec("value= 3")
print(value)
exec("for i in range(5):print(i,end=',')")
'''
'''
for n in range(10):
exec("""
for i in range(5):
print(i,end=',')
print()
""")
'''
# 이번챕터는 전체적으로 사용법이 굉장히 난해하고 설명도 모호했다.
#근데 설명을 이번챕터같은 경우에는 보통 하기가 어려울 것같긴 하다.
# 그냥 주제자체가 난해하다.
300x250
'개발일지 > Python' 카테고리의 다른 글
2022.02.14 [파이썬정복] 19wxPython 까지 총정리 끝 (0) | 2022.02.14 |
---|---|
2022.02.13 파이썬 정복 18장 그래픽 (0) | 2022.02.13 |
2022.02.11 파이썬정복 16장 모듈과 패키지 (0) | 2022.02.11 |
2022.02.10 Day8.1 유데미 파이썬 부트캠프 (매개변수) (0) | 2022.02.10 |
2022.02.10 15.2강 여러가지 메서드 (나중에 중요 array) (0) | 2022.02.10 |