Skip to content

배토의 개발일지

나를위한 단편적 기억들의 기록

Menu
  • 안드로이드
  • 코틀린
  • Godot
  • 블렌더
  • git
  • 게임제작일지
  • 기타
Menu

Kotlin vs Python: 기본 문법의 차이 추가정리

Posted on 2020년 3월 17일2020년 4월 16일 by batmask

여전히 두 프로그래밍 언어를 병행해서 공부하다보니, 나도 모르게 헷갈리게 사용하는 경우가 많다. 앞에서 차이점 몇가지를 얘기했었는데, 나머지도 정리해 보려한다.

변수

Kotlin

값 변경이 가능하게 하려면 ‘var’, 값 변경이 불가능하게 하려면 ‘val’로 정의한다. 값이라고 했지만, 사실은 레퍼런스의 의미로 객체의 경우 다른 객체를 지정하도록 변경하지 못한다.

val unmutableVar = 20
var mutableVar: Int = 10

Python

동적타입 언어답게 아무런 키워드 없이 그냥 사용 가능하다.

varable = 10

함수

Kotlin

‘fun’ 키워드를 사용하고 바디블럭은 중괄호'{}’로 묶어준다.

fun myFun(arg1: Int){
// ...
}

Python

‘def’ 키워드를 사용. 콜론’:’으로 바디 블럭을 구분해주고, 들여쓰기(indent)로 바디를 표시해준다.

def my_func(arg1):
    arg1 += 1
# indent의 끝이 바디의 끝    
# ...

논리연산자

Kotlin

여타 정적타입 언어와 동일하게 ‘&&, ||’ 가 쓰인다.

Python

실제 언어적 표현의 영향인건지, 기호가 아니라 ‘or’, ‘and’가 쓰인다. 이전에 ‘!’도 할당연산자(‘!=’)가 아니면 ‘not’ 이 쓰이는걸 올렸었다.

Boolean

Kotlin

이건 언어마다 제각각이긴한데, kotlin에선 소문자 ‘true’, ‘false’가 쓰인다.

Python

파이썬에선 대문자로 시작하는 ‘True’, ‘False’가 쓰인다.

포맷 문자열(format string)

Kotlin

기존 스크립트 언어의 것들을 적극 차용한 느낌이다. 변수하나만 사용할 땐, ‘$’표시를 쓰고, 표현식(expression)을 쓰고 싶으면 추가로 중괄호(‘{}’)로 묶어준다.

val a = 10
println("a value is $a")
println("if you add 10 to a = ${a + 10}")

Python

python에서 포맷 스트링은 변화를 거듭해왔다. 그중에 kotlin과 가장 유사한 최근 f-string이라고 부르는 것만 살펴본다. f-string은 스트링앞에 문자 ‘f’를 붙인다. 그리고 코틀린과 유사하게 표현식이 중괄호로 묶여 들어간다. ‘$’표시는 사용하지 않는다.

a = 10
print(f"a value is {a}")
print(f"if you add 10 to a = {a + 10}")

따로 항목은 안만들었지만, python에는 println()이 없다.

가변인자(variable number of arguments)

Kotlin

‘vararg’ 키워드를 사용한다.

fun varArgsSample(vararg vargs: Int): Int{
    var sum = 0
    for(item in vargs){
        sum += item
    }    
    return sum
}

println(varArgsSample(1, 2, 3, 4))

Python

Python에선 Arbitrary Argument Lists라고 말한다. 관련해서 잘 정리된 블로그 글 하나를 참고.

보통 *args, **kwargs 라고 쓰는데, args, kwargs라는 이름은 중요한게 아니고 ‘*’을 붙이는게 중요하다. 별 ‘*’ 하나를 붙이면, Kotlin의 vararg와 같은 효과를 내고, ‘**’ 이렇게 두개를 붙이면, keyword arguments 이다. parameter화된 argument들을 받는데, 함수 내부에선 dictionary로 처리되는 가변인자가 된다.

def var_arg_sample(*my_args):
    total = 0

    for item in my_args:
        total += item

    return total


print(var_arg_sample(1, 2, 3, 4, 5))
def var_karg_sample(**my_kwargs):
    for k, v in my_kwargs.items():
        print(f"key = {k}, value = {v}")


var_karg_sample(a = 10, b = 20)
mydict = {"a": 10, "b": 20, "c":30}
var_karg_sample(**mydict)

주의할건, parameter(또는 key)=value 형태로 넘기지 않고 dictionary를 바로 넘길 수 있는데, 넘길 때 ‘**’를 붙여준다. dictionary에 ‘**’를 붙여주면 unpacking 프로세스를 의미하고 파라미터 형태로 분리된다.

비슷하게 ‘*’는 리스트 앞에 붙어서 unpacking 해주게 된다.

# 아래 두 표현은 같다
func(*['one', 'two'])
func ('one', 'two')

# 아래 두 표현도 같다
func(**{'type': 'event'})
func(type='event')

lambda 표현식은 개별글로 올렸고, 클래스와 객체지향관련 내용은 내용이 좀 많아서 앞으로 차차 정리해서 올려보려한다.

답글 남기기 응답 취소

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

최신 글

  • Blender : snap을 써서 다른 vertex에 정렬하기
  • KTor Client 기본 사용 정리
  • 게임 만들거다.
  • Using Koin with Android Compose

보관함

2020 3월
일 월 화 수 목 금 토
1234567
891011121314
15161718192021
22232425262728
293031  
« 8월   4월 »

메타

  • 로그인
  • 엔트리 피드
  • 댓글 피드
  • WordPress.org
©2025 배토의 개발일지 | Built using WordPress and Responsive Blogily theme by Superb