이 튜토리얼에서는 문자열 형식화 메커니즘에 대해 알아봅니다. f-문자열은 문자열 형식을 지정하는 가장 좋은 방법입니다. 문자열의 형식 지정 스타일은 문자열을 더 읽기 쉽고, 더 간결하게 만들고, 오류 발생 가능성을 줄여줍니다. 또한 다른 것보다 빠릅니다.
이 주제에 대해 자세히 알아보기 전에 먼저 f 문자열 이전에 사용된 기술에 대해 논의하겠습니다.
Python의 이전 문자열 형식 지정
문자열의 형식을 지정하는 두 가지 주요 방법은 다음과 같습니다. % - 형식 지정 및 str.format(). 그러나 두 가지 방법 모두 몇 가지 제한 사항이 있습니다. 주어진 방법에 대해 간략하게 소개하겠습니다.
1.% - 서식 지정
이는 문자열 형식을 지정하는 전통적인 방법이지만 문서에서는 다음 명령문이 포함된 이 방법을 권장합니다.
'여기에 설명된 형식 지정 작업은 몇 가지 일반적인 오류(예: 튜플 및 사전을 올바르게 표시하지 못하는 경우)로 이어지는 다양한 기이함을 나타냅니다.
최신 형식의 문자열 리터럴 또는 str.format() 인터페이스는 이러한 오류를 방지하는 데 도움이 됩니다.' - 공식 문서 .
% 사용 방법 - 서식 지정
%-연산자를 사용하여 내장된 작업을 수행할 수 있습니다. 다음 예를 이해해 봅시다.
자바 해시맵
student = 'Michel' 'Hello, %s.' % student
산출:
Hello Michel
튜플을 사용하여 여러 변수를 저장할 수도 있습니다. 다음 예를 살펴보겠습니다.
name = 'Sharma' age = 24 'Hello, %s. You are %s.' % (name, age)
산출:
Hello Sharma You are 24.
%-형식 지정이 권장되지 않는 이유
변수가 증가하고 문자열이 길어질수록 코드를 읽기가 훨씬 어려워지기 때문입니다. 코드가 지저분해 보입니다. 다음 예를 살펴보겠습니다.
예 -
first_name = 'Steve' last_name = 'Rogers' age = 70 profession = 'Superhero' group = 'Marvel? print(''Hello, %s %s. Your age is %s. You are a %s. You were a member of %s.' %(first_name, last_name, age, profession)')
산출:
Hello, Steve Rogers. Your age is 70. You are a Superhero. You were a member of Marvel.
위 코드에서 볼 수 있듯이 코드는 읽기 어려워지고 오류가 발생하기 쉽습니다. 이것이 문자열 형식을 지정하는 이 방법이 좋지 않은 이유입니다.
2.str.format() 메소드
이는 Python 2.6에 도입된 문자열 형식을 지정하는 또 다른 인기 있는 방법입니다. 어떻게 사용할 수 있는지 살펴보겠습니다.
str.format()을 사용하는 방법
%-형식 지정이 개선되었습니다. 이는 객체에 대해 호출되는 일반적인 내장 함수와 해당 객체가 문자열로 변환되는 것과 같습니다.
호랑이와 사자의 차이
다음 예를 살펴보겠습니다.
예 -
first_name = 'Mathew' last_name = 'Zukerburg' age = 45 print('Hello, {}. You are {}.'.format(name, age)')
format 메소드 내부의 사전 요소에 액세스하려면 format() 메소드에 키를 전달할 수 있습니다.
person = {'name': 'Peter', 'age': 17} 'Hello, {name}. You are {age}.'.format(name=person['name'], age=person['age'])
산출:
Hello Peter, You are 17
str.format() 메소드가 권장되지 않는 이유는 무엇입니까?
str.format()은 %-format 메소드보다 훨씬 효율적이지만 여러 매개변수를 처리할 때 여전히 상당히 장황해질 수 있습니다.
F-스트링 방법
이는 PEP 498에 의해 도입된 새로운 문자열 형식화 메커니즘입니다. 리터럴 문자열 보간(Literal String Interpolation) 또는 더 일반적으로 F-문자열이라고도 알려져 있습니다. (문자열 리터럴 앞의 f 문자) 이 메커니즘의 주요 초점은 보간을 더 쉽게 만드는 것입니다.
문자열 앞에 문자 'F'를 붙이면 문자열은 f-문자열 자체가 됩니다. f-문자열은 다음과 거의 동일하게 형식화될 수 있습니다. str.format() 방법. F-문자열은 형식 지정을 위해 문자열 리터럴 내에 Python 표현식을 삽입하는 편리한 방법을 제공합니다.
예 -
# Python3 program introducing f-string val = 'Geeks' print(f'{val}for{val} is a portal for {val}.') name = 'Tushar' age = 23 print(f'Hello, My name is {name} and I'm {age} years old.')
산출:
Hello, My name is Tushar and I'm 28 years old.
위 코드에서는 f-문자열을 사용하여 문자열 형식을 지정했습니다. 런타임에 평가됩니다. 유효한 Python 표현식을 모두 여기에 넣을 수 있습니다.
단일 명령문에서 이를 사용할 수 있습니다.
print(f'{2 * 30})'
산출:
60
그러나 함수에서는 사용할 수 있습니다.
def upercase(input): return input.uper() name = 'Sachin Tendulkar' f'{upercase(name)} is great.'
산출:
Sachin Tendulkar is great
f-문자열은 클래스 객체와 함께 사용될 수도 있습니다. 다음 예를 이해해 봅시다.
예 -
class Actor: def __init__(self, first_name, last_name, movie): self.first_name = first_name self.last_name = last_name self.movie = movie def __str__(self): return f'{self.first_name} {self.last_name}'s superhit movie is {self.movie}.' def __repr__(self): return f'{self.first_name} {self.last_name} {self.movie}. Superhi!' ac = Actor('Keenu', 'Reevs', 'Matrix') print(f'{ac}')
산출:
Keenu Reevs's superhit movie is Matrix.
설명 -
지도용 자바 반복자
위 코드에서는 객체를 문자열로 나타내는 __str__() 및 __repr__()을 사용했습니다. 따라서 클래스 정의에 해당 메서드 중 하나 이상을 포함해야 합니다. f-문자열은 __str__() 메서드를 사용합니다. 변환 플래그를 포함하여 __repr__()을 사용할 수도 있습니다! 아르 자형.
print(f'{ac}') print(f'{ac}'!r)
산출:
Keenu Reevs's superhit movie is Matrix. Keenu Reevs Matrix Superhit
사전의 F-문자열
f-문자열 내부의 사전 키를 사용하여 작업할 때는 주의해야 합니다. 사전 키와 f-string을 사용하는 인용문이 다릅니다. 다음 예를 이해해 봅시다.
예 -
detail = {'name': 'John', 'age': 19} print(f'{detail['name']} is {detail['age']} years old.')
산출:
John is 19 years old.
아래 방법은 사전의 경우 허용되지 않습니다.
예 -
detail = {'name': 'John', 'age': 19} print(f'{detail['name']} is {detail['age']} years old.')
산출:
File '', line 2 print(f'{detail['name']} is {detail['age']} years old.') ^ SyntaxError: invalid syntax
위 코드에서 볼 수 있듯이 큰따옴표를 작은따옴표로 변경하면 오류가 발생합니다.
터보 C++ 다운로드
속도
이 서식 스타일을 적용하는 이유는 속도 때문입니다. f-문자열은 상수 값이 아닌 런타임 시 평가됩니다. 최소한의 구문을 사용하여 문자열 리터럴 내에 표현식을 포함합니다. 상수값이 아닌 런타임에 평가하기 때문에 빠릅니다.
다음 문자열 비교를 살펴보겠습니다.
예 - 1:
import timeit print(timeit.timeit('''name = 'Sachin' age = 74 '%s is %s.' % (name, age)''', number = 10000))
산출:
0.0022497819736599922
예 - 2:
import timeit print(timeit.timeit('''name = 'Mathew' age = 40 '{} is {}.'.format(name, age)''', number = 10000))
산출:
0.0025783719611354172
예 - 3:
import timeit print(timeit.timeit('''name = 'Rockey' age = 74 f'{name} is {age}.'''', number = 10000))
산출:
0.0019360429723747075
우리가 관찰할 수 있듯이 f-문자열은 목록의 맨 위에 있습니다.
바지 멜빵
코드에 중괄호를 표시하려면 다음과 같이 큰따옴표를 사용해야 합니다. 다음 예를 이해해 봅시다.
예 -
f'{{70 + 40}}'
산출:
지도 C++에서 찾기
{70 + 40}
삼중 중괄호를 사용하면 문자열에 단일 중괄호가 표시됩니다. 다음 예를 이해해 봅시다.
예 -
f'{{{90 + 4}}}'
산출:
{94}
삼중 중괄호 이상을 사용하면 더 많은 중괄호를 표시할 수 있습니다.
예 -
f'{{{{70 + 4}}}}'
산출:
{{70 + 4}}
백슬래시
f-문자열의 문자열 부분에서 백슬래시 이스케이프를 사용할 수 있습니다. 그러나 f-문자열의 표현식 부분에서는 백슬래시를 사용하여 이스케이프할 수 없습니다. 다음 예를 이해해 봅시다.
예 -
f'{'Medric Pacalo'}' File '', line 1 f'{'Medric Pacalo'}'
산출:
SyntaxError: f-string expression part cannot include a backslash
인라인 댓글
표현식에 # 기호를 포함할 수 없습니다. 구문 오류가 발생합니다. 다음 예를 이해해 봅시다.
예 -
f'Tony is {10 * 73 #Hate this!}.' f'Tonyr is {2 * 37 #Hate this!}.'
산출:
SyntaxError: f-string expression part cannot include '#'
결론
세 가지 방법 중 하나를 사용할 수 있지만 f-string 방법이 더 간결하고 읽기 쉽고 편리한 방법을 제공합니다. 더 빠르고 오류가 발생할 가능성이 적습니다. 우리는 문자열 외의 가능한 거의 모든 시나리오와 프로그래밍에서 이 접근 방식을 고려해야 하는 이유를 설명했습니다.