logo

Python의 F 문자열

이 튜토리얼에서는 문자열 형식화 메커니즘에 대해 알아봅니다. 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 방법이 더 간결하고 읽기 쉽고 편리한 방법을 제공합니다. 더 빠르고 오류가 발생할 가능성이 적습니다. 우리는 문자열 외의 가능한 거의 모든 시나리오와 프로그래밍에서 이 접근 방식을 고려해야 하는 이유를 설명했습니다.