Python - 변수 타입(Variable Type)
변수 타입을 지정해줘야하는 자바와 지정해주지 않아도 알아서(?) 판단하는 Go, Python까지..
비슷비슷해보여도 다른 게 외국어보다는 사투리 같달까? 암튼 매우 흥미롭다.
기본적으로 Java나 Go언어와 동일한 부분은 따로 작성하지 않으려한다.
그럼 시작!
Python 역시 변수명 앞에 타입을 표기하지는 않지만 Java와 다른 점이 있다면 True, False, None 등과 같은 값이 대문자로 시작한다는 것! 또한 암묵적으로 Java는 camelCase를 쓰는 반면 Python은 snake_case를 사용한다.
// Java
int a = 3;
String abd = "abc";
boolean flag = false;
// Python
a_number = 3
a_boolean = False
a_none = None // None 타입은 파이썬에만 존재하는데, null(nil)과 비슷한 의미이다. ('없음'의 뜻)
또한 해당 변수의 타입을 확인하고 싶을 때는 아래와 같다.
a_number = 3
print(type(a_number)) # <class 'int'>
a_float = 3.14
print(type(a_float)) # <class 'float'>
a_string = "what type is it?"
print(type(a_string)) # <class 'str'>
a_boolean = False
print(type(a_boolean)) # <class 'bool'>
a_none = None
print(type(a_none)) # <class 'NoneType'>
# Python의 한 줄 주석은 '#'이다.
'''
<작은 따옴표 주석>
여러 문장을 주석으로 하고 싶을 경우,
큰 따옴표 혹은 작은 따옴표를 문장 앞 뒤로 세 개씩 넣어준다.
'''
"""
<큰 따옴표 주석>
이렇게 하면 되는 건가?~
"""
Python에는 Sequence 타입이 있는데 이는 list, tuple, range를 포함한다.
- List
days = ["Mon", "Tue", "Wed", "Thur", "Fri"]
print("Mon" in days) # True
print("Sat" in days) # False
print(type(days)) # <class 'list'>
# list는 list 내의 값 수정이 가능하다.
Python은 위와 같은 라이브러리를 제공해주며 자세한 사항은 아래 공식 Document 사이트를 방문하면 확인할 수 있다.
Python document 👇
https://docs.python.org/3/library/stdtypes.html#sequence-types-list-tuple-range
- Tuple
tuple은 list 타입과 달리 값을 변경할 수 없는 immutable sequences이다.
위에 작성해놓은 List 형식을 tuple로 변경하는 방법은 간단하다.
대괄호[]를 소괄호()로 변경해주면 끝!
days = ("Mon", "Tue", "Wed", "Thur", "Fri")
print(type(days)) # <class 'tuple'>
기본 내장함수를 이용하여 변수의 타입을 변경하는 방법도 간단하다.
age = "18"
print(age) # 18
print("type of age:: ", type(age)) # <class 'str'>
n_age = int(age)
print(n_age) # 18
print("type of n_age:: ", type(n_age)) # <class 'int'>
# 간단하게 int(age)만으로 타입 변환이 된 것을 알 수 있다.
*args, **kwargs
*args는 arguments의 약자로 함수에 태워 넘기는 인자를 뜻한다. 어떤 경우 사용되냐면, 몇 개의 인자를 넘길지 그 '수'가 가변적일 경우 사용한다.
(이 때 파라미터명은 꼭 args일 필요는 없다. 다만 앞의 *(별 표시)는 꼭 해줘야한다!)
def plus(*args):
print("args: ", args)
result = 0
for number in args:
result += number
print(result)
plus(1,2,3,4,4,1,1,1,2,2,3,3,3,4,1,1,2)
# args: (1, 2, 3, 4, 4, 1, 1, 1, 2, 2, 3, 3, 3, 4, 1, 1, 2)
# 38
출력 결과를 보면 tuple의 형태로 출력됨을 알 수 있다.
참고로, args나 kwargs 모두 어디서부터 어디까지가 args의 범위인지 가늠하기 어렵기 때문에, 일반 변수 앞에 */**args가 온다면 에러가 발생한다.
**kwargs는 keyword arguments의 약자로써, 이 역시 변수명을 바꿔도 무방하다.
kwargs는 key, value 형식으로 인자를 넘겨 dictionary 형태로 출력된다.
def explain(**kwargs):
print("kwargs:", kwargs)
explain(name="something", age=12, gender="female")
# kwargs: {'name': 'something', 'age': 12, 'gender': 'female'}