#테크 

나는 분명 파이썬을 배웠는데 이건 뭐지? * ** : -> … @ % ?

파이썬에서 * ** : -> … @ % 기호가 어떤 쓰임을 가지는지 알아봅니다.

2022-11-24 | 엄광호

배움의 길에는 끝이 없다고 하죠. 저도 프로그래밍을 할 때면 종종 느끼곤 합니다.

분명 어느 정도 꽤나 공부도 하고 익힌 것 같은데,
심심하면 하나씩 모르는 게 튀어나옵니다.

오늘은 “난 분명 파이썬을 배웠는데 이건 뭐지?” 할 수 있는 부분들을 정리해보겠습니다. 특히 특수 기호 위주로요!
다만 기초 문법을 익힐 때도 자주 볼 수 있는 연산자로써 쓰인 기호들은 배재했습니다.

파이썬 코드 중 이런 걸(* ** : -> ; … @ %) 보시다가 뭐지 싶어서 구글링하고 오신 분들! 환영합니다!! 잘 찾아오셨습니다.🤗

1. 파이썬에서 * ** 란?

파이썬에 * (asterisk, 일명 별표)는 곱하기(연산자) 외에도 몇 가지 다른 용도로 쓰일 수 있습니다.

1) 모든 것 *

일반적으로 프로그래밍에서 일반적으로 *는 모든 것(Everything)의 의미로 통용됩니다.
예를 들어, 다음처럼 쓰이곤 합니다. (아래의 예시 코드는 math 라는 라이브러리에서 모든 변수, 함수, 클래스를 가져온다는 의미입니다.)

from math import *

하지만 이런 코드 습관은 안좋다는 의견이 많으니 참고해주세요.

2) 가변인자 *args **kwargs

보통 함수는 인자(argument)를 넣게끔 설계합니다. 이때 들어가는 인자의 개수를 한정하고 싶지 않을 때 *args (arguments)를 사용합니다.

def girls_who_want_me(*args):
    print(args)

girls_who_want_me("뉴진스 하니", "아이유", "비비", "수지")

>>> ("뉴진스 하니", "아이유", "비비", "수지")

여기서 딕셔너리 형식으로 인자를 넣고 싶다면 **kwargs (keyword argments)를 사용합니다.

def workout_log(**kwargs):
    print(kwargs)

workout_log(squat="180kg", deadlift="200kg", benchpress="120kg")

>>> {'squat': '180kg', 'deadlift': '200kg', 'benchpress': '120kg'}

 

2. 파이썬에서 함수를 정의할 때 : ->

함수를 정의할 때, :와 -> 를 주석으로 쓸 수 있습니다.
구체적으로, 안전한 프로그래밍을 위해 함수를 정의할 때 변수의 자료형태(type)와 return 값의 자료형태(type)을 명시하는 용도로 쓰입니다. 코드의 작동에 영향을 주지는 않지만, 실수를 미연에 방지하는 프로그래밍을 가능하게 합니다.
예시 코드를 보시죠!

def make_profile(hometown : str, age : int) -> str:
    profile = hometown + str(age)
    return profile

make_profile("기안", 84)

>>> '기안84'

3. 파이썬에서 … 란?

다음 코드를 실행하면 신기한 결과가 나옵니다.

print(...)

>>> Ellipsis

네, 출력된 것처럼 파이썬은 Ellipsis라는 객체를 가지고 있습니다. Ellipsis란 사전적으로는 생략, 생략부호(…)라는 의미를 가집니다. 그럼 Python 공식 문서에서는 어떻게 정의돼있을까요?

The same as the ellipsis literal “…”. Special value used mostly in conjunction with extended slicing syntax for user-defined container data types.

뭔가 확장 슬라이싱과 관련돼있는거 같죠? 바로 코드로 봐봅시다.

matrix = np.array(range(8)).reshape(2,2,2)
print(matrix)

>>> array([[[0, 1],
        [2, 3]],

       [[4, 5],
        [6, 7]]])

print(matrix[...])

>>> array([[[0, 1],
        [2, 3]],

       [[4, 5],
        [6, 7]]])

print(matrix[0,...])

>>> array([[0, 1],
       [2, 3]])

이 외에도 Ellipsis는 어떤 동작도 수행하지 않으므로 pass처럼 사용할 수도 있습니다. 일단 만들고 자세한 나중에 구현하려고 할 때 다음처럼 쓸 수 있습니다.

def something_cool():
    pass

def something_cool():
    ...

4. 파이썬에서 @ 는?

@는 파이썬에서 데코레이터(decorator)라는 녀석입니다. 데코레이터는 함수에 무언가 내용을 추가하고 싶을 때 사용하는 기능입니다. 단순히 함수에 바로 내용을 추가하지 않고 데코레이터를 쓰는 이유는 다른 함수들에도 반복적으로 추가할 수 있도록 관리하기 위해서입니다. 바로 예시를 보시죠.

def thisisdecorator(func):
    def decorate():
        print(“🐠🐟🐡🐬🦈🦭🐳🐋🐙🦑🦞🦀🦐”)
        func()
        print(“🐆🐅🐃🐂🐄🦬🐪🐫🦙🐘🦏🦛🦣”)
    return decorate
@thisisdecorator
def peace():
    print(“peace”)
peace()

(출력 결과)
🐠🐟🐡🐬🦈🦭🐳🐋🐙🦑🦞🦀🦐
peace
🐆🐅🐃🐂🐄🦬🐪🐫🦙🐘🦏🦛🦣

이처럼 함수를 활용해서 데코레이터를 구현할 수도 있고, 다음처럼 class의 형태로도 구현이 가능합니다.

class ThisisDecorator:
    def __init__(self, f):
        self.func = f
    def __call__(self, *args, **kwargs):
        print(“🐠🐟🐡🐬🦈🦭🐳🐋🐙🦑🦞🦀🦐”)
        self.func()
        print(“🐆🐅🐃🐂🐄🦬🐪🐫🦙🐘🦏🦛🦣”)
class Peace:
@ThisisDecorator
def peace_function():
    print(“peace”)
peace = Peace()
peace.peace_function()

(출력 결과)
🐠🐟🐡🐬🦈🦭🐳🐋🐙🦑🦞🦀🦐
peace
🐆🐅🐃🐂🐄🦬🐪🐫🦙🐘🦏🦛🦣

 

5. 파이썬에서 % 의미는?

%는 파이썬에서 문자열 포메팅(string formatting)을 할 때 씁니다. 문자열 포메팅이란 출력하는 문자열의 특정 위치에 특정한 값(변수)을 삽입하여 출력하는 것을 의미합니다. 다음처럼 사용할 수 있습니다. %기호 뒤에는 자료형을 가리키는 문자를 씁니다.(%s : 문자열, %d : 정수, %f : 실수, 기타등등)

coolnames = ["Cool J", "Cool guy", "Cool gaay"]
for coolname in coolnames:
    print("I am %s" % coolname)

>>> I am Cool J
I am Cool guy
I am Cool gaay

 

이상으로 파이썬에서 * ** : -> ; … @ % 기호들이 어떻게 쓰이는지에 대해 알아보았습니다.
즐거운 코딩하세요~🙂