f-flash 대 str.format »
사용 중입니다..format()
제 파이썬 3.5 프로젝트에는 많은 것이 있지만, 새로운 종류의 문자열 리터럴인 f-string 때문에 다음 파이썬 버전에서 더 이상 사용되지 않을 것 같습니다.
>>> name = "Test"
>>> f"My app name is {name}."
'My app name is Test.'
포맷된 문자열 기능이 기존의 문자열 기능을 완전히 대체합니까?.format()
그리고 앞으로는 모든 경우에 새로운 스타일을 사용하는 것이 좋을까요?
'복잡한 것보다 단순한 것이 낫다'는 생각에 바탕을 둔 것으로 알고 있습니다.그러나 성능 문제는 어떻습니까? 두 문제 사이에 차이가 있습니까?아니면 단순히 같은 기능의 단순한 모양입니까?
다음 Python 버전에서는 더 이상 사용되지 않을 것 같습니다.
하지 마세요.str.format
곧 떠날 것 같지 않습니다(이유도 없습니다), 소개한 PEP.f
Prefixed-strings 추상화의 짝수 상태:
이 PEP는 기존 문자열 형식 메커니즘을 제거하거나 더 이상 사용하지 않도록 제안하지 않습니다.
포맷된 문자열은 문자열 포맷을 위한 다른 메서드의 단점을 해결하기 위해 도입되었습니다. 오래된 메서드를 버리고 파이썬 3.6+에서 코드가 작동하기를 원한다면 얼마나 많은 프로젝트가 f-string을 사용해야 하는지 알기 위해 도입되었습니다.
이것들의 성능에 관해서는, 그것들이 더 느릴 수도 있다는 나의 초기 의심은 잘못된 것 같고, f-string은 그들의 성능을 쉽게 능가하는 것 같습니다..format
상대:
➜ cpython git:(master) ./python -m timeit -s "a = 'test'" "f'formatting a string {a}'"
500000 loops, best of 5: 628 nsec per loop
➜ cpython git:(master) ./python -m timeit "'formatting a string {a}'.format(a='test')"
100000 loops, best of 5: 2.03 usec per loop
이 문서 작성 시점에서 CPython 저장소의 마스터 분기에 대해 수행된 작업으로, 다음과 같이 변경될 수 있습니다.
f-strings
새로운 기능으로서, 가능한 최적화가 있을 수 있습니다.- CPython에 대한 최적화로 인해 발생할 수 있음
.format
더 빠른 속도(예: Speedup 메서드 호출 1.2x)
하지만 속도에 대해 너무 걱정하지 말고, 여러분과 다른 사람들이 더 쉽게 읽을 수 있는 것에 대해 걱정해야 합니다.
많은 경우에, 그것은f-strings
하지만 어떤 경우에는format
더 낫습니다.
Jim의 답변을 바탕으로 성능 문제를 해결하기 위해 Python의dis
두 개의 구문적으로 다르지만 기능적으로 동등한 기능에 대한 바이트 코드 명령을 비교하는 모듈입니다.
import dis
def f1():
a = "test"
return f"{a}"
def f2():
return "{a}".format(a='test')
print(dis.dis(f1))
print(dis.dis(f2))
그 결과는 다음과 같습니다.
110 LOAD_CONST 1('테스트')2 STORE_FAST 0(a) 124 LOAD_FAST 0(a)6 형식_값 08 반품 _ 가치없음.150 LOAD_CONST 1('{a})2 LOAD_ATTR 0(형식)4 LOAD_CONST 2('시험')6 LOAD_CONST 3 (('a', )8 CALL_FUNCTION_KW 110 반품 _ 가치없음.
호출 오버헤드가 할 수 . f-string은 파일 형식 검사와 메모리 오버헤드를 유발합니다.에 의하면timeit
따라서 성능이 약 3배 향상됩니다(특정 기능의 경우).
>> time it.time it('f1", 'from __main__import f1', number=100000)0.012325852433775708>> time it.timeit('f2", 'from __main__import f2', number=100000)0.036395029920726074
언급되지 않은 한 가지는, 오래된 기술에 대한 평가절하를 불가능하게 만드는, 보간은 문자열 리터럴만을 위한 것이라는 것입니다.즉, 문자열은 런타임에 한 번 렌더링되고 템플릿은 업데이트된 변수와 함께 다시 사용할 수 없습니다.예를 들어 다음과 같습니다.
>>> str_template = '{i} squared: {n}'
>>> for i in range(2, 5):
... print(str_template.format(i=i, n=i**2))
...
2 squared: 4
3 squared: 9
4 squared: 16
또 다른 경우는 i18n으로, 여기서 사용됩니다.더 오래된 기술 없이는 많은 사용 사례가 불가능할 것입니다.문자열 보간을 즐기지만 재사용 가능한 템플릿이 필요한 모든 사용 사례에서 사용할 수 있는 것은 아닙니다.
str.format()이 기존 프로젝트에 악몽이 될 것이기 때문에 더 이상 사용되지 않을 것 같습니다.그 말을 들으니...
string = f'This is a {object}'
보다 읽기 쉽습니다.
string = 'This is a {}'.format(object)
그래서 저는 당신이 가능할 때마다 f-string을 사용하라고 말합니다.
33.5를 사용하면 됩니다.fstring
pip install fstring
from fstring import fstring
x = 1
y = 2.0
plus_result = "3.0"
print fstring("{x}+{y}={plus_result}")
# Prints: 1+2.0=3.0
언급URL : https://stackoverflow.com/questions/43123408/f-strings-vs-str-format
'programing' 카테고리의 다른 글
C# "As"에 해당하는 VB.NET (0) | 2023.05.28 |
---|---|
Windows 및 Linux 디렉터리 이름에서 금지된 문자는 무엇입니까? (0) | 2023.05.28 |
i = 0의 경우, (i += i++)가 0과 같은 이유는 무엇입니까? (0) | 2023.05.28 |
IN 값 목록을 기준으로 주문 (0) | 2023.05.28 |
날짜가 발생한 횟수를 세어 그래프를 만듭니다. (0) | 2023.05.28 |