[Python] Built-in Fuctions(내장함수)

kkiyou·2021년 5월 18일
0

Python

목록 보기
5/12

Built-in Fuctions

Built-in Fuctions(내장 함수)는 파이썬 프로그램 자체적으로 포함되어 있는 함수로 import하지 않아도 사용할 수 있는 함수를 의미한다.

> >>> print(dir(__builtins__))
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '__IPYTHON__', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'breakpoint', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'display', 'divmod', 'enumerate', 'eval', 'exec', 'filter', 'float', 'format', 'frozenset', 'get_ipython', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']

참고자료 1 참고자료 2

1. Casting

1.1. Str

class str(object='')
class str(object=b'', encoding='utf-8', errors='strict')
object를 문자열로 변환하여 반환한다.

1.2. Int

class int([x])
class int(x, base=10)
숫자로 이루어진 문자열 또는 base(진법) 숫자 x를 10진법의 숫자로 변환하여 반환한다.

1.3. Float

class float([x])
x를 실수형으로 변환하여 반환한다.

n = 999
print("type(n) =", n)
n = float(n)
print("type(n) =", n)
print("n =", n)
print(float(314E-2))
print(float(3.14E2))
print(float("-Infinity"))
type(n) = 999
type(n) = 999.0
n = 999.0
3.14
314.0
-inf

1.4. Complex

class complex([real[, imag]])
허수 i를 사용하는 복소수로 변환하여 반환한다. 이 때 허수 i는 j로 표현한다.

print(complex(9))
9+0j


2. Base

2.1. Binary

bin(x)
10진법의 숫자 x를 2진법으로 변환한다., 0b____로 표현한다.

2.2. Octal

oct(x)
10진법의 숫자 x를 8진법으로 변환한다., 0o____로 표현한다.

2.3. Decimal

10진법, ____로 표현한다.

2.4. Hexadecimal

hex(x)
10진법의 숫자 x를 16진법으로 변환한다., 0x____로 표현한다.

2.5. Type

class type(object)
class type(name, bases, dict, **kwds)
object의 자료형을 반환한다. (return the type of an object.)



3. Math

3.1. Absolute

abs(x)
절댓값을 반환한다.

3.2. Division & Modulo

divmod(a, b)
(a/b, a%b), 즉 목과 나머지를 반환한다.

print(divmod(10, 3) # (3, 1)

3.3. Power

pow(base, exp[, mod])
xyx^{y} % zz, 즉 base를 exp 곱한 값을 반환한다. 이 때 mod 계산을 할 경우 exp가 음수일 경우 0이 아닌 다른 값이 출력된다. 계산 방법은 아래와 같다.
또한 mod는 0이 아니어야 한다.

print(pow(10, 2)) # 100
print(pow(10, 2, 3)) # 1

exp가 Negative(음수)일 때는 반드시 mod가 소수(prime number)여야 한다.

>>>> pow(10, -2, mod=11)
1
1102=1100=1(119+1)=11\frac{1}{10^{2}} = \frac{1}{100} = \frac{1}{(11*9 + 1)} = \frac{1}{1}
>>>> pow(9, -2, mod=11)
1
192=181=1(117+4)=14=1343=311+1\frac{1}{9^{2}} = \frac{1}{81} = \frac{1}{(11*7 + 4)} = \frac{1}{4} = \frac{1 * 3}{4 * 3} = \frac{3}{11 + 1}
pow(38, -1, mod=97) # 23
23 * 38 % 97 == 1 # True
base = input("base: ")
exp = input("exp: ")
mod = input("mod: ")
i = 0
while True:
	if ((((base ** abs(exp)) % mod) * i) % mod) == 1:
		print(i)
		break
	else:
		i = i + 1

참고자료1 참고자료2 참고자료3

3.4. Maximum

max(iterable, *[, key, default])
max(arg1, arg2, *args[, key])
가장 큰 값을 반환한다.

3.5. Minimum

min(iterable, *[, key, default])
min(arg1, arg2, *args[, key])
가장 작은 값을 반환한다.

3.6.Sum

sum(iterable, /, start=0)

  • 참고
    sum, min, max는 다른 언어에서 변수명으로 자주 사용되나, 파이썬에서는 내장함수이기 때문에 변수명을 sum, min, max로 지정하면 함수의 기능을 상실한다. 따라서 파이썬에서 변수명을 지을 때는 내장함수와 겹치지 않게 정하는 것이 바람직하다.


4.True or False

4.1. Isinstance

isinstance(object, classinfo)
object인자가 classinfo인자의 instance이거나, subclass이면 True를 반환한다.

>>> print(isinstance(1, int))
True
>>> print(isinstance(['a', 'b'], list))
True
class Parents:
    pass

class Child(Parents):
    pass

parents = Parents()
child = Child()
>>> print(isinstance(parents, Parents))
True
>>> print(isinstance(child, Parents)) # 자식 클래스의 인스턴스는 부모 클래스의 인스턴스이다.
True
>>> print(isinstance(child, Child))
True

4.2. Issubclass

issubclass(class, classinfo)
class 인자가 classinfo 인자의 subclass이면 True를 반환한다.

class Parents:
    pass

class Child(Parents):
    pass

parents = Parents()
child = Child()

print(issubclass(Child, Parents)) # True

참고자료 1

4.3. Callable

callable(object)
객체의 인자가 Callable이면 True를 반환한다. 이 때 Callable이란 함수처럼 괄호 안에 매개변수를 받아 호출할 수 있는 것을 의미한다. class는 callable이며, __call__ 메소드가 있는 클래스의 메소드 또한 callable이다.

>>> var = 1 
>>> print(callable(var))
False
>>> def func():
        pass
>>> print(callable(func))
True
>>> class Class:
        pass
>>> print(callable(Class))
True
>>> c_ins = Class()
>>> print(callable(c_ins))
False
>>> class Class2:
        def __call__(self):
            pass
>>> print(callable(Class2))
True
>>> c2_ins = Class2()
>>> print(callable(c2_ins))
True


5. 입출력

5.1. Input

input([prompt])
사용자로부터 입력을 받는다. 이 때 입력된 값은 문자열(str)으로 변환된다.

>>> n = input("숫자를 입력하세요: ")
숫자를 입력하세요: 999
>>> print(type(n))
<class 'str'>
>>> print(n)
999

따라서 숫자로 변환하기 위해서는 int형으로 변환해야 한다. 이때, 숫자로만 이루어지지 않으면 Error가 발생하게 됨으로 입력값을 확인하여 오류를 처리하는 것이 바람직하다.
ValueError: invalid literal for int() with base 10

>>> n = int(input("숫자를 입력하세요: "))
숫자를 입력하세요: 999
>>> print(type(n))
<class 'int'>
>>> print(n)
999

5.1. Output

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
저장되어 있는 값을 출력하여 보여준다.

  • sep
    separated, 쉼표로 구분된 문자열들을 매개변수 sep에 할당된 문자열로 연결한다. 기본값은 공백(space)다.

  • end
    출력할 문자열 마지막에 매개변수 end에 할당된 문자열을 붙여준다. 기본값은 개행문자(newline)이다.

>>> print("Hello", ",", "World", "!", sep='_', end='@')
Hello_,_World_!@
  • file
    기본값 sys.stdout은 standard out(표준 출력)을 의미하며, 화면의 내용을 출력한다. 만약 file에 쓰기가 가능한 파일 객체를 할당하면 파일에 내용을 쓸 수 있다.
with open("print_file.txt", 'w') as f:
    for i in range(10):
        print(i, file=f)

with open("print_file.txt", 'r') as f:
    print(f.read())
0
1
2
3
4
5
6
7
8
9
  • flush
    flush는 쏟아져 나오는 것을 의미한다. 공식문서에 따르면 flush가 True이면 stream is forcibly flushed된다. 먼저 스트림은 프로그램을 드나드는 데이터를 바이트의 흐름으로(byte stream) 표현한 단어이다. 즉 flush가 True이면 데이터가 강제적으로 쏟아져 나오는 것을 의미한다.

    그렇다면 왜 강제적으로 데이터를 흘려 보내야 할까? 이는 Buffer(버퍼)와 관련이 있다. 입력과 출력 사이에는 Buffer라는 입력된 내용을 출력 전 잠시 보관하는 영역이 존재한다. 그리고 일반적으로 Buffer에 보관한 데이터를 일정 기준치를 넘었을 때 출력한다. 그런데 입력된 내용을 버퍼에서 보관하지 않고 바로 출력해버리면 즉 강제로 flush하면 비용이 커진다.(시스템과 관련된 영역이라 개념정도만 확인하고 넘어간다.) 따라서 기본값은 False인 것이다.

    아래 예에서 flush의 기본값인 False이면 time.sleep(1)에 의해 총 10초가 지난 뒤 출력값인 0 1 2 3 4 5 6 7 8 9 가 출력된다. 그런데 flush를 True로 할당하면 1초마다 0 1 2 3 4 5 6 7 8 9가 순서대로 출력된다.

    그런데 이 기능은 jupyter notebook과 VScode 그리고 IDLE Shell 3.9.5에서는 동일하게 1초마다 값이 출력된다. replit에서만 작동한다. 따라서 이는 운영체제에 따라서 달라진다고 추측된다.
    import time 
    
    for i in range(10): 
    	print(i, end=' ', flush = False) 
    	time.sleep(1)

참고자료 1 참고자료 2 참고자료 3


6. 기타

6.1. Directory

dir([object])
object가 가지고 있는 변수와 함수(method)를 반환한다.

print(dir([])) # = dir(list)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
print(dir(())) # = dir(tuple)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']

6.2. Help

help([object])
object의 도움말을 출력한다.


6.3. Evaluate

eval(expression[, globals[, locals]]) - 공식 문서
eval(expression, globals=None, locals=None)
expression에 변수가 포함된 식을 문자열로 입력받고 식의 결과를 반환한다.

x = eval("3*3")
print(x)
9

6.4. Execute(실행)

exec(object, globals=None, locals=None)
object에 문자열 또는 코드 객체를 입력받고 입력받은 코드가 실행되나, 반환하는 값은 없다.

exec("x = 3*3")
print(x)
9
k = """
for i in range(3):
    print(i)
"""
exec(k)
0
1
2

6.5. iter

iter(object[, sentinel])
__next__ method를 통해 호출할 수 있는 연속된 자료의 집합인 Iterator 객체를 반환한다.

>>> list_1 = [1, 2, 3, 4]
>>> next(list_1)
TypeError: 'list' object is not an iterator
>>> type(list_1)
list
>>> list_2 = iter([1, 2, 3, 4])
>>> next(list_2)
1
>>> next(list_2)
2
>>> next(list_2)
3
>>> next(list_2)
4
>>> next(list_2)
StopIteration: 
>>> type(list_2)
list_iterator

6.6. sorted

sorted(iterable, *, key=None, reverse=False)
정렬된 새로운 list를 반환한다.

  • key: key의 조건을 기준으로 정렬한다.
  • reverse: True이면 역순으로 정렬한다.

Compile

compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)

eval(), exec(), compile() 내장함수

0개의 댓글