f-string - 유용한 문자열 포맷

게시일 : 2019년 02월 06일    
# Python # Scala # f-string

문자열 포맷 방법으로 유용한 f-string에 대해서 알아본다.

문자열을 print할 때 사용하는 방식을 String Formatting 또는 String interpolation이라고 한다.

(Interpolation은 안에 채워넣는다는 의미인 듯…)

예를 들어, Python에서는 보통 %.format 방식을 활용한다. 이 방식은 변수가 뒤에 입력되어서 문자열에 들어갈 순서에 대해서 생각하고 입력할 필요가 있다.

'%s %s' %('hello', 'world!') 
'{} {}'.format('hello','world')

f-string(formatted string literals)이라는 좀 더 읽기 쉽고 간결한 방법이 있다. 사용할 때 f가 앞에 들어가서 f-string이라고 부른다.

f-string 방식은 문자열 안에 변수이름을 넣어서 직관적으로 이해할 수 있다.

Python과 Scala에서 기본적인 용도는 같고 사용방식이 약간 다르다.

Python - 3.6버전부터 지원

Python에서는 f-string 방식이 %나 .format을 활용하는 방식보다 속도가 매우 빠르다.

참고 : PyCon 2018 - Pythonic code가 과연 효율적일까?

python에서는 변수를 { }안에 넣어서 활용한다.

name = 'yahwang'
print(f'hello {name}') => hello yahwang
# 문자열 포맷을 사용할 경우, 변수 : format을 활용한다.
number = 153.231635
f'{number : .3f}' => 153.232

계산이나 함수로 실행한 결과를 바로 string으로 변환할 수 있다.

f'{10*3242}' => 32420

def to_upper(input):
    return input.upper()

print( f'{name.upper()}' ) # basic 함수 사용
print( f'{ to_upper(name) }' ) # 정의한 함수 사용

multistring이라는 기능도 존재한다. 문자열을 입력한 그대로 인식한다. (공백 포함)

msg2 = f'''
Hello              Hello
    World       =>     World
        !!!                !!!
'''

Scala - 2.10 버전부터 지원

Scala에는 s-string, f-string, raw string 3가지 방식이 존재한다.

s-string은 문자열 포맷(e.g.) .3f)을 지원하지 않고 raw string은 escape 문자(e.g.) \n)를 문자그대로 인식한다고 한다.

Scala는 변수 앞에 $를 붙여서 사용한다. Python처럼 계산이나 함수 사용, multistring 모두 가능하다.

// 문자열 포맷 - %를 활용
val number: Double = 1534.2342
println(f"$number%.3f")
// 함수 사용 - 함수에서만 { }를 활용
def square(num: Double) = { Math.pow(num,2) }
println(f"${square(10.0)}")

References :