인류는 지난 과거의 기록과 이루어 놓은 업적을 계승 발전함으로서 보다 좋은 방향으로 살고자 노력하게 됩니다.
소프트웨어를 개발하는 작업에서도, 남이 이미 만들어 놓은 훌륭한 프로그램들과 본인이 과거에 만들어 놓은 프로그램들을 다시 활용하여 새로운 프로그램을 만들어서,
보다 좋고 안정적이며 효율적인 소프트웨어를 개발하게 됩니다.
이러한 개념을 전문적으로 재사용(Reuse)라고 칭하며, 가장 기본이 되는 기술적 방법이 바로 본 수업에서 공부할 "모듈(Module)"입니다.
우리는 수업을 통해서 유용한 많은 기능을 Python 언어에서 이미 제공하는 것을 배웠습니다.
Python은 언어이기에 내장하는 기능들이 대부분의 프로그래머에게 필요한 필수적인 것들을 제공하고 있습니다.
따라서 특정 분야에서 필수적으로 필요로 하는 기능은, 분야에 제한적이기에 Python 언어에서 기본 내장하기는 어렵습니다.
이러한 이유로 수많은 프로그래머들은 본인이 풀고자 하는 문제에서 주요한 기능을 직접 만들고 서로 공유하는 접근을 하게 되며, 이때 중요한 것이 모듈(Module) 입니다.
모듈은 프로그래머들이 직접 유용한 함수 등을 작성하여, 다른 사람 혹은 본인의 프로그램 개발시 활용하고자 하는 일종의 별도 파일 입니다.
math
모듈을 통한 활용방법 이해하기¶math
모듈은 Python 언어를 사용하여 수학 계산이 필요한 다양한 기능을 제공하며, 별도의 설치 없이 바로 사용 가능합니다.
math
모듈이 제공하는 다양한 기능과 자세한 설명은 Python 언어 웹사이트< https://docs.python.org/3/library/math.html >를 참조합니다.
앞서 언급한 것처럼, math
모듈은 별도의 설치없이 바로 사용 가능하기에, 필요한 경우 바로 내가 개발하는 프로그램에 포함할 수 있습니다.
모듈을 포함할때 사용하는 Python 문법은 import
으로, 단순하게 import _모듈이름_
을 실행하면 됩니다.
실제 math
모듈을 불러오는 예제는 다음과 같습니다.
import math
아래의 입력창에 실제로 입력하여 실행해 보기 바랍니다.
import math
문제 없이 실행되어진 것으로 보이는데, 어떻게 확인을 할까요?
이미 수업에서 배운 유용한 기능인 type()
과 help()
를 사용하여, math
모듈이 제대로 불러들어져 있는지 확인이 가능합니다.
type(math)
help(math)
아래의 입력창에 실제로 입력하여 실행해 보면, math
모듈의 타입이 module
로 나오는 것과 math
모듈에서 제공하는 다양한 함수 등의 설명을 볼 수 있습니다.
type(math)
help(math)
Help on built-in module math: NAME math DESCRIPTION This module provides access to the mathematical functions defined by the C standard. FUNCTIONS acos(x, /) Return the arc cosine (measured in radians) of x. acosh(x, /) Return the inverse hyperbolic cosine of x. asin(x, /) Return the arc sine (measured in radians) of x. asinh(x, /) Return the inverse hyperbolic sine of x. atan(x, /) Return the arc tangent (measured in radians) of x. atan2(y, x, /) Return the arc tangent (measured in radians) of y/x. Unlike atan(y/x), the signs of both x and y are considered. atanh(x, /) Return the inverse hyperbolic tangent of x. ceil(x, /) Return the ceiling of x as an Integral. This is the smallest integer >= x. comb(n, k, /) Number of ways to choose k items from n items without repetition and without order. Evaluates to n! / (k! * (n - k)!) when k <= n and evaluates to zero when k > n. Also called the binomial coefficient because it is equivalent to the coefficient of k-th term in polynomial expansion of the expression (1 + x)**n. Raises TypeError if either of the arguments are not integers. Raises ValueError if either of the arguments are negative. copysign(x, y, /) Return a float with the magnitude (absolute value) of x but the sign of y. On platforms that support signed zeros, copysign(1.0, -0.0) returns -1.0. cos(x, /) Return the cosine of x (measured in radians). cosh(x, /) Return the hyperbolic cosine of x. degrees(x, /) Convert angle x from radians to degrees. dist(p, q, /) Return the Euclidean distance between two points p and q. The points should be specified as sequences (or iterables) of coordinates. Both inputs must have the same dimension. Roughly equivalent to: sqrt(sum((px - qx) ** 2.0 for px, qx in zip(p, q))) erf(x, /) Error function at x. erfc(x, /) Complementary error function at x. exp(x, /) Return e raised to the power of x. expm1(x, /) Return exp(x)-1. This function avoids the loss of precision involved in the direct evaluation of exp(x)-1 for small x. fabs(x, /) Return the absolute value of the float x. factorial(x, /) Find x!. Raise a ValueError if x is negative or non-integral. floor(x, /) Return the floor of x as an Integral. This is the largest integer <= x. fmod(x, y, /) Return fmod(x, y), according to platform C. x % y may differ. frexp(x, /) Return the mantissa and exponent of x, as pair (m, e). m is a float and e is an int, such that x = m * 2.**e. If x is 0, m and e are both 0. Else 0.5 <= abs(m) < 1.0. fsum(seq, /) Return an accurate floating point sum of values in the iterable seq. Assumes IEEE-754 floating point arithmetic. gamma(x, /) Gamma function at x. gcd(x, y, /) greatest common divisor of x and y hypot(...) hypot(*coordinates) -> value Multidimensional Euclidean distance from the origin to a point. Roughly equivalent to: sqrt(sum(x**2 for x in coordinates)) For a two dimensional point (x, y), gives the hypotenuse using the Pythagorean theorem: sqrt(x*x + y*y). For example, the hypotenuse of a 3/4/5 right triangle is: >>> hypot(3.0, 4.0) 5.0 isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0) Determine whether two floating point numbers are close in value. rel_tol maximum difference for being considered "close", relative to the magnitude of the input values abs_tol maximum difference for being considered "close", regardless of the magnitude of the input values Return True if a is close in value to b, and False otherwise. For the values to be considered close, the difference between them must be smaller than at least one of the tolerances. -inf, inf and NaN behave similarly to the IEEE 754 Standard. That is, NaN is not close to anything, even itself. inf and -inf are only close to themselves. isfinite(x, /) Return True if x is neither an infinity nor a NaN, and False otherwise. isinf(x, /) Return True if x is a positive or negative infinity, and False otherwise. isnan(x, /) Return True if x is a NaN (not a number), and False otherwise. isqrt(n, /) Return the integer part of the square root of the input. ldexp(x, i, /) Return x * (2**i). This is essentially the inverse of frexp(). lgamma(x, /) Natural logarithm of absolute value of Gamma function at x. log(...) log(x, [base=math.e]) Return the logarithm of x to the given base. If the base not specified, returns the natural logarithm (base e) of x. log10(x, /) Return the base 10 logarithm of x. log1p(x, /) Return the natural logarithm of 1+x (base e). The result is computed in a way which is accurate for x near zero. log2(x, /) Return the base 2 logarithm of x. modf(x, /) Return the fractional and integer parts of x. Both results carry the sign of x and are floats. perm(n, k=None, /) Number of ways to choose k items from n items without repetition and with order. Evaluates to n! / (n - k)! when k <= n and evaluates to zero when k > n. If k is not specified or is None, then k defaults to n and the function returns n!. Raises TypeError if either of the arguments are not integers. Raises ValueError if either of the arguments are negative. pow(x, y, /) Return x**y (x to the power of y). prod(iterable, /, *, start=1) Calculate the product of all the elements in the input iterable. The default start value for the product is 1. When the iterable is empty, return the start value. This function is intended specifically for use with numeric values and may reject non-numeric types. radians(x, /) Convert angle x from degrees to radians. remainder(x, y, /) Difference between x and the closest integer multiple of y. Return x - n*y where n*y is the closest integer multiple of y. In the case where x is exactly halfway between two multiples of y, the nearest even value of n is used. The result is always exact. sin(x, /) Return the sine of x (measured in radians). sinh(x, /) Return the hyperbolic sine of x. sqrt(x, /) Return the square root of x. tan(x, /) Return the tangent of x (measured in radians). tanh(x, /) Return the hyperbolic tangent of x. trunc(x, /) Truncates the Real x to the nearest Integral toward 0. Uses the __trunc__ magic method. DATA e = 2.718281828459045 inf = inf nan = nan pi = 3.141592653589793 tau = 6.283185307179586 FILE (built-in)
math
모듈안에 상당히 많은 함수들이 제공되는 것을 볼수 있습니다.
모듈안에 포함된 함수를 호출(실행)하는 경우는 규칙이 있는데, 즉 함수의 이름을 math.factorial(3)
과 같이 모듈명.함수명()
으로 해야 합니다.
아래의 입력창에 실제로 math
모듈에 포함된 math.factorial(3)
및 다른 함수들을 실행해 보기 바랍니다.
math.factorial(3)
6
매번 모듈의 이름을 앞에 쓰는 작업이 귀찮다면, 보다 편리한 방안을 사용할 수 있습니다.
이 방법은 from _모듈이름_ import _함수이름_
과 같이, 사용하기 원하는 함수만 해당 모듈에서 불러온다는 의미입니다.
실제 math
모듈에서 앞서 살려본 factorial()
함수를 불러오는 예제는 다음과 같습니다.
from math import factorial
이후로는 math.factorial(3)
처럼 모듈의 이름을 계속 입력하지 않고, 바로 factorial(3)
처럼 함수를 실행하는 것이 가능합니다.
아래의 입력창에 실제로 from math import factorial
구문과 factorial(3)
문장을 입력하여 실행해 보기 바랍니다.
from math import factorial
factorial(3)
6
함수에서 사용자 정의 함수가 있는 것처럼, 모듈도 당연히 프로그래머가 직접 만들어서 본인이 재활용하거나 남에게 공유하는 것이 가능합니다.
방법은 어렵지 않으며, 함수만을 대상으로 한다면, 다음의 단계를 따르면 됩니다.
(a) 사용하고자 하는 모듈 이름으로 파일을 만들고 확장자를 .py로 합니다.
(b) 모듈안에 넣고자 하는 함수를 (a)에서 만든 화일에 포함 합니다.
(c) 앞서 math 모듈 및 math 모듈에 포함된 함수를 사용하는 방법을 동일하게 사용하여 사용자 정의 모듈 안의 함수를 사용합니다.
이미 본 강의 자료에서 활용하기 위한 사용자 정의 모듈 샘플이 Step_08_SampleModule_convertor.py
로 제공 되었습니다.
본 강의 자료가 있는 디렉토리에서 해당 화일을 열어보면, 아래와 같이, 앞서 수업에서 작성한 convert_to_celsius()
함수 하나가 있는 것을 볼수 있습니다.
# Module name: Step_08_SampleModule_convertor
def convert_to_celsius(fahrenheit):
return (fahrenheit - 32) * 5/9
(c)에서 사용자 정의 모듈의 사용법은 Python에서 제공하는 모듈과 같다고 했으니, 다음의 문장들을 사용하면 된다는 의미겠지요?<br>
```python
# Method.1
import Step_08_SampleModule_convertor
Step_08_SampleModule_convertor.convert_to_celsius(212)
# Method.2
from Step_08_SampleModule_convertor import convert_to_celsius
convert_to_celsius(212)
아래의 입력창에 실제로 문장을 입력하여 실행해 보기 바랍니다.
import Step_08_SampleModule_convertor
Step_08_SampleModule_convertor.convert_to_celsius(212)
from Step_08_SampleModule_convertor import convert_to_celsius
convert_to_celsius(212)
100.0
여러분이 직접 새로운 함수를 추가하고 실행해 보는 경험을 해봅시다.
즉, 다음처럼 화씨를 섭씨로 변환하는 convert_to_fahrenheit()
함수를 Step_08_SampleModule_convertor.py
모듈에 추가하고,
위의 예제처럼 직접 실행해 보도록 합니다.
def convert_to_fahrenheit(celsius):
return (celsius * 1.8) + 32
Step_08_SampleModule_convertor.py
수정후, 아래의 입력창에 모듈을 다시 불러드린후, convert_to_fahrenheit()
함수를 실행해 보기 바랍니다.
import Step_08_SampleModule_convertor
Step_08_SampleModule_convertor.convert_to_fahrenheit(212)
413.6
마지막으로 사용자 정의 모듈의 경우도 앞서 설명한 유용한 기능인 type()
과 help()
를 사용할 수 있으니, 필요시 활용바랍니다.
random
Python 언어를 통하여 난수(random number)를 만들기 위하여 사용합니다.
자세한 설명은 < https://docs.python.org/3/library/random.html?highlight=random#module-random >를 참조합니다.
turtle
Python 언어를 통하여 간단한 그림을 그려보는 교육용 용도로 많이 사용합니다.
자세한 설명은 < https://docs.python.org/3/library/turtle.html?highlight=turtle#module-turtle >를 참조합니다.
다음은 turtle
모듈을 사용한 예제인데, 소스코드에서 이해가 안되는 부분이 일부 있겠지만, 아래의 입력창에서 입력후 실행해 보십시오.
특별히 from turtle import *
의 의미는 turtle
모듈의 모든 함수를 가져와서, 모듈명 없이 호출하겠다는 의미입니다.
from turtle import *
color('red', 'yellow')
begin_fill()
while True:
forward(200)
left(170)
if abs(pos()) < 1:
break
end_fill()
done()
아래의 입력창에 실제로 문장을 입력하여 실행해 보기 바랍니다.
from turtle import *
color('red', 'yellow')
begin_fill()
while True:
forward(200)
left(170)
if abs(pos()) < 1:
break
end_fill()
done()
math
모듈의 함수를 이용하여, 다음의 작업을 한번에 (1)에서 (3)까지 수행하는 간단한 프로그램을 개발해 봅니다.
(1) 9의 제곱근을 계산하여 화면에 출력합니다.
(2) 변수 x를 16으로 정의하고, x의 제곱근을 화면에 출력합니다.
(3) 반지름이 5인 원의 넓이(= $pi * r^2$ (r: 원의 반지름))를 계산하여 화면에 출력합니다.
아래의 입력창에 실제로 문장을 입력하여 실행하십시오.
import math
print(math.sqrt(9))
x = 16
print(math.sqrt(x))
print(5*5*3.14)
3.0 4.0 78.5
Step_10_List (0) | 2021.05.28 |
---|---|
Step_09_Method_and_Class (0) | 2021.05.26 |
Step_07_Conditional_Statement (0) | 2021.05.20 |
Step_06_Boolean (0) | 2021.05.18 |
Step_05_String (0) | 2021.05.15 |
댓글 영역