"프로그래밍 언어의 개념과 흐름에 대한 고찰 - 파이썬답게 코딩하기" 학습중...


함수와 관련하여 어렴풋이 알던 내용들 몇가지 정리해봅니다.


First-Class Function 관련


#!/usr/bin/python3
## First-Class Function
## 함수가 first class citizen 속성을 가지면 first class function이라고 하여 변수에 함수를 할당할 수 있고, 매개변수로 함수를
## 전달하거나 반환값으로 함수를 사용할 수 있습니다.
# def sqr(x) :
# return x*x
#
# def main() :
# print("function call")
# print(sqr(10))
#
# print("assign variable")
# f = sqr
# print(f(10))
#
# if __name__ == "__main__" :
# main()



Higher-Order Function 관련


# def sqr(x) :
# return x*x
#
# def bind(func, arg_list) :
# result = []
# for arg in arg_list :
# result.append(func(arg))
# return result
#
# def main() :
# arg_list = [5, 10]
# print("assign variable & send parameter")
# squares = bind(sqr, arg_list) ## 매개변수로 함수 sqr를 넣을 수도 있다.
# print(squares)
#
# if __name__ == "__main__" :
# main()

## 출력결과 => 이렇듯 함수를 하나의 개체로 보고 매개변수로 전달하고, 반환값으로 사용할 수 있어 유연한 코딩이 가능합니다.
# assign variable & send parameter
# [25, 100]



Higher-Order Function 관련


##Higher-Order Function
# LOWER_LIST = ["python", "python2", "python3"]
# UPPER_LIST = []
#
# def convert() :
# for data in LOWER_LIST :
# UPPER_LIST.append(data.upper())
#
# def main() :
# print("=== print result ===")
# convert()
# print(LOWER_LIST)
# print(UPPER_LIST)
#
# if __name__ == "__main__" :
# main()
## 위의 코드를 Higher-Order Function을 이용하여 짜면 아래와 같습니다.
# LOWER_LIST = ["python", "python2", "python3"]
# UPPER_LIST = []
#
# def convert(data) :
# return data.upper()
#
# def main() :
# print("=== print result ===")
# UPPER_LIST = map(convert, LOWER_LIST) ## map 함수는 내장 함수로서 첫번째 매개변수인 함수와 두번째 매개변수인 리스트를
## 매핑해서 결과를 반환합니다. 이로써 코드가 조금더 짧아졌습니다. Higher-Order Function을 사용하면 map과 같은 함수를 사용
## 해서 가독성이나 효율성을 높일 수 있습니다.
# print(LOWER_LIST)
# print(list(UPPER_LIST))
#
# if __name__ == "__main__" :
# main()
## 결과는 두 코드 모두 동일하게 아래와 같다.
# === print result ===
# ['python', 'python2', 'python3']
# ['PYTHON', 'PYTHON2', 'PYTHON3']



'파이썬(PYTHON)' 카테고리의 다른 글

파이썬의 함수3  (0) 2020.08.21
파이썬의 함수2  (0) 2020.08.20
파이썬의 변수  (0) 2020.08.18
openpyxl 모듈 활용 연습3  (0) 2020.08.16
openpyxl 모듈 활용 연습2  (0) 2020.08.16

"프로그래밍 언어의 개념과 흐름에 대한 고찰 - 파이썬답게 코딩하기" 학습중...


변수와 관련하여 어렴풋이 알던 내용들 몇가지 정리해봅니다.



#!/usr/bin/python3

## 함수안에 함수 -> nested function
# def greeting(name) :
# greeting_msg = "Hello "
#
# def add_name() : ## nested function
# return ("%s%s" % (greeting_msg, name))
#
# msg = add_name()
# print(msg)
#
# if __name__ == "__main__" :
# greeting("python")



nonlocal variable


# def greeting(name) :
# greeting_msg = "Hello"
#
# def add_name() : ## nested function
# greeting_msg += " " ## greeting_msg greeting() 함수에는 선언되어 있으나 add_name()함수에는 선언되지 않아 오류 발생
# ## 이 경우 greeting_msg "nonlocal greeting_msg"라고 선언해준다.
# return ("%s%s" % (greeting_msg, name))
#
# msg = add_name()
# print(msg)
#
# if __name__ == "__main__" :
# greeting("python")
#
#
# def greeting(name):
# greeting_msg = "Hello"
#
# def add_name(): ## nested function
# nonlocal greeting_msg
# greeting_msg += " " ## greeting_msg greeting() 함수에는 선언되어 있으나 add_name()함수에는 선언되지 않아 오류 발생
# ## 이 경우 greeting_msg "nonlocal greeting_msg"라고 선언해준다. free variable 이라고도 합니다.
# return ("%s%s" % (greeting_msg, name))
#
# msg = add_name()
# print(msg)
#
# if __name__ == "__main__":
# greeting("python")



variable shadowing


# var_shadowing = "global"
#
# def outer_function() :
# var_shadowing = "outer"
# def inner_function() :
# var_shadowing = "inner"
# print("inner_function scope : %s" % var_shadowing)
#
# inner_function()
# print("outer_function scope : %s" % var_shadowing)
#
# if __name__ =="__main__" :
# outer_function()
# print("global scope : %s" % var_shadowing)
## 아래와 같이 출력 함수 위치에 따라 동일한 변수명에 적절히 분배되어 실행됨. 이처럼 같은 이름의 변수가 네임스페이스로 인해
## 가려지는 것을 variable shadowing이라고 합니다.
# inner_function scope : inner
# outer_function scope : outer
# global scope : global



'파이썬(PYTHON)' 카테고리의 다른 글

파이썬의 함수2  (0) 2020.08.20
파이썬의 함수1  (0) 2020.08.19
openpyxl 모듈 활용 연습3  (0) 2020.08.16
openpyxl 모듈 활용 연습2  (0) 2020.08.16
openpyxl 모듈 활용 연습1  (0) 2020.08.16

엘리엇이나 피보나치, 일목산인과 같은 분들은 워낙 유명해서 따로 설명할 필요 없겠지만 이 책에 거론된 또 다른 인물이 있어서 특히 국내에는 잘 소개되지 않는 것 같아 포스팅해봅니다.(technical analysis the complete resource for financial market technicians) 이 책에서도 인물 소개만 간략히 나와서 이 분이 주장한 이론에 대해서는 자세한 설명이 어려운 점은 양해바랍니다. 그렇지만 설명이 있다 한들 아래 내용을 보시면 실제 적용에 상당한 어려움이 있는 이론 같습니다. 이 역시 자연 법칙이나 경험칙에 의존한 기법같기는 하지만 본인 스스로가 결과로 증명했다 하는데 뭔가 있지 않을까 싶습니다. 점성술에 천문학까지 등장하다니 정말 주식의 해석은 그 끝을 알 수 없는 것 같습니다. 관심 있으신 분은 위키피디아에 그의 이론을 맛 볼 수 있는 설명이 있는데 봐도 좀처럼 모르겠습니다.



1878년 텍사스에서 태어난 윌리엄 델버트 간(William Delbert Gann)은 파동이론으로 유명한 엘리엇과 거의 동시대에 활동하며 16세에 정식 학교를 떠나 떠돌이 판매원으로서의 경력을 시작했다. 그의 전설은 상품 시장에서 여러 가지 부를 쌓으며 시작되었고, 많은 젊은 여성들과 결혼했으며, 쿠바에서 비행기, 요트, 부동산, 도박에 엄청난 돈을 썼다고 말한다.(코스타, 2000년). 어떤 이들은 그가 비열한 악당이었다고 전하고 있으며, 무역에 관한 그의 강좌는 일반론과 점성술외에는 없었다라고 하고, 자문 서비스도 여러 번 팔았다고 알려져 있다. (윌리엄스, www.ireallytrade.com/asiseeit.htm).

그는 매우 적은 재산을 남기고 죽었다고 알려져 있으나 그럼에도 간은 소설과 자문 관련 책을 출한한 다작의 작가였다. 그는 논문을 출판하고 무역에 관한 강좌를 팔았다. 리처드 와이코프라는 사람은 간이 거래/무역에 관한 기사를 쓰면서, 특히 면화를 거래하던 그의 시대에 상당한 혹평을 받았다고 전했다고 하지만 몇몇 주변인들에 의해 목격한 바에 따르면 뛰어난 무역업자였다고 한다. 단, 그가 제안한 방법이나 기법을 사용했는지 여부는 불확실하다.


간은 시장 구조에 대한 책을 출판하면서, 특히 상품 시장에서의 개념은 가격뿐만 아니라 시간 개념으로 확장했다. 그가 주장한 개념은 원, 사각형, 삼각형 같은 것이 포함되어 있는데, 모두 원의 각도와 관련이 있다. 예를 들어, 태양 주위를 도는 지구의 원, 원의 도수와 같은 약 360일의 계절 순환을 강하게 믿었다. 따라서 90도, 1/4년, 1/4년, 180도 등 원의 일부가 중요했다. 일반적으로 그 시간 내에 최고로 높거나 최고로 낮을 때 발생할 것이라고 예상했다. 상단과 하단의 범위를 재탐구 수준으로 투영할 수 있는 구역으로 나눌 수 있다고 설명했고, 특히 자신의 지지대와 저항 구역과 같은 수준에서 교차했을 때, 상단과 하단에서 그린 각도를 재탐구하여 시간과 가격의 중요한 예측 변수라고 말했다. 수학 공식이 아닌 정사각형과 직사각형 모양에 대한 개념은 미래의 가격 움직임이 어디서 일어나야 하는지를 정의했다. 간은 또한 각 10년 중 5년의 강점을 발견했는데, 1905년 이후로는 상승기였다. 그는 스윙 차트를 발명했다고 잘못 주장했지만, 그는 스윙 차트를 추종하는 방법을 성공적으로 이용했다고 홍보했다. 52의 제곱은 일년에 52주 또는 원을 기준으로 한다. 144의 제곱은 12312, 즉 원형으로 된 월수다. 9의 제곱, 4의 제곱, 360도 원 차트, 6각형 차트 같은 나선형 계산기도 고안했다. 간은 또 28개 거래 규칙의 요약을 발표했는데, 모두 오늘날에도 유효하다.


간은 창의적인 사람이었음은 의심할 여지가 없다. 그의 발견이 그의 과정과 책들을 팔기 위한 임시방편인지 아닌지는, 그의 방법이 너무 모호해서 제대로 시험할 수 없지만, 오늘날에도 몇몇 분석가들은 그의 수학적 방법을 따르고 성공했다고 주장한다.



+ Recent posts