Python F-String은 생각보다 강력합니다.

WBOY
풀어 주다: 2023-04-17 09:01:02
앞으로
1187명이 탐색했습니다.

Python F-String은 생각보다 강력합니다.

형식화된 문자열 리터럴(f 문자열이라고도 함)은 Python 3.6부터 사용되었으므로 우리 모두 그것이 무엇인지, 어떻게 사용하는지 알고 있습니다. 그러나 f-문자열의 보다 실용적이고 편리한 기능 중 일부를 알지 못할 수도 있습니다. 따라서 이 기사에서는 f-문자열의 일부 기능을 안내하고 일상적인 코딩에서 이러한 훌륭한 f-문자열 기능을 사용하게 되기를 바랍니다.

날짜 및 시간 형식 지정

f-문자열을 사용하여 숫자 형식 지정을 적용하는 것은 매우 일반적이지만 날짜 및 타임스탬프 문자열 형식도 지정할 수 있다는 것을 알고 계셨습니까?

import datetime today = datetime.datetime.today() print(f"{today:%Y-%m-%d}") # 2023-02-03 print(f"{today:%Y}") # 2023
로그인 후 복사

f-strings는datetime.strftime메서드를 사용하는 것처럼 날짜와 시간의 형식을 지정할 수 있습니다. 문서에 언급된 몇 가지 형식보다 더 많은 형식이 있다는 것을 알게 되면 정말 좋습니다. Pythonstrftime은 기본 C 구현에서 지원하는 모든 형식도 지원합니다. 이는 플랫폼마다 다를 수 있으므로 문서에 언급되지 않습니다. 그럼에도 불구하고 이러한 형식을 활용하여 예를 들어%Y-%m-%d에 해당하는%F또는%H:%M에 해당하는%T를 사용할 수 있습니다. %S,%x%X이 각각 로케일에서 선호하는 날짜 및 시간 형식이라는 점도 언급할 가치가 있습니다. 이러한 형식의 사용은 분명히 f-문자열에만 국한되지 않습니다. 시간 형식의 전체 목록은 다음을 참조하세요:
https://manpages.debian.org/bullseye/manpages-dev/strftime.3.en.html

변수 이름 및 디버깅

f-문자열 기능(Python에서) 3.8 시작) 최근 추가된 기능 중 하나는 변수 이름과 값을 인쇄하는 기능입니다.

x = 10 y = 25 print(f"x = {x}, y = {y}") # x = 10, y = 25 print(f"{x = }, {y = }")# Better! (3.8+) # x = 10, y = 25 print(f"{x = :.3f}") # x = 10.000
로그인 후 복사

이 기능은"debug"라고 하며 다른수정자와 결합할 수 있습니다. 또한 공백도 유지하므로f"{x = }"f"{x=}"는 다른 문자열을 생성합니다.

문자열 표현

클래스 인스턴스를 인쇄할 때__str__default는 클래스 메서드를 사용하여 문자열을 표현합니다. 그러나__repr__을 강제로 사용하려면!r변환 플래그를 사용할 수 있습니다.

class User: def __init__(self, first_name, last_name): self.first_name = first_name self.last_name = last_name def __str__(self): return f"{self.first_name} {self.last_name}" def __repr__(self): return f"User's name is: {self.first_name} {self.last_name}" user = User("John", "Doe") print(f"{user}") # John Doe print(f"{user!r}") # User's name is: John Doe
로그인 후 복사

f-문자열 내에서repr(some_var)을 호출할 수도 있지만 변환 플래그는 번거롭습니다. 좋은 습관과 깔끔한 솔루션입니다.

f-문자열의 뛰어난 성능

강력한 기능과 문법적 설탕은 종종 성능 저하를 가져오지만 f-문자열의 경우는 그렇지 않습니다.

# python -m timeit -s 'x, y = "Hello", "World"' 'f"{x} {y}"' from string import Template x, y = "Hello", "World" print(f"{x} {y}")# 39.6 nsec per loop - Fast! print(x + " " + y)# 43.5 nsec per loop print(" ".join((x, y)))# 58.1 nsec per loop print("%s %s" % (x, y))# 103 nsec per loop print("{} {}".format(x, y))# 141 nsec per loop print(Template("$x $y").substitute(x=x, y=y))# 1.24 usec per loop - Slow!
로그인 후 복사

위의 예에서는 다음과 같이timeit을 사용합니다. 모듈이 테스트되었습니다:python -m timeit -s 'x, y = "Hello", "World"' 'f"{x} {y}"'보시다시피, f 문자열은 실제로 가장 빠릅니다. Python에서 제공하는 형식 지정 옵션입니다. 따라서 이전 형식 지정 옵션 중 일부를 사용하려는 경우에도 성능 향상을 위해 f-문자열로 전환하는 것을 고려할 수 있습니다.

형식 지정의 전체 기능

F-문자열은 Python의형식 사양 미니 언어를 지원하므로 수정자에 다양한 형식 지정 작업을 포함할 수 있습니다.

text = "hello world" # Center text: print(f"{text:^15}") # 'hello world' number = 1234567890 # Set separator print(f"{number:,}") # 1,234,567,890 number = 123 # Add leading zeros print(f"{number:08}") # 00000123
로그인 후 복사

Python의형식 사양 미니 언어에는 더 많은 내용이 포함되어 있습니다. 숫자와 날짜 형식 지정 옵션이 아닙니다. 텍스트를 정렬하거나 중앙에 배치하고, 앞에 0/공백을 추가하고, 천 단위 구분 기호를 설정하는 등의 작업을 수행할 수 있습니다. 이 모든 것은 분명히 f-문자열뿐만 아니라 다른 모든 형식 지정 옵션에도 적용됩니다.

중첩된 f-문자열

기본 f-문자열이 서식 요구사항에 충분하지 않은 경우 서로 중첩할 수도 있습니다.

number = 254.3463 print(f"{f'${number:.3f}':>10s}") # '$254.346'
로그인 후 복사

你可以将 f-strings 嵌入 f-strings 中以解决棘手的格式化问题,例如将美元符号添加到右对齐的浮点数,如上所示。

如果你需要在格式说明符部分使用变量,也可以使用嵌套的 f 字符串。这也可以使 f 字符串更具可读性:

import decimal width = 8 precision = 3 value = decimal.Decimal("42.12345") print(f"output: {value:{width}.{precision}}") # 'output: 42.1'
로그인 후 복사

条件格式

在上面带有嵌套 f 字符串的示例之上,我们可以更进一步,在内部 f 字符串中使用三元条件运算符:

import decimal value = decimal.Decimal("42.12345") print(f'Result: {value:{"4.3" if value < 100 else "8.3"}}') # Result: 42.1 value = decimal.Decimal("142.12345") print(f'Result: {value:{"4.2" if value < 100 else "8.3"}}') # Result:142
로그인 후 복사

lambda表达式

如果你想突破 f-strings 的限制,同时让阅读你代码的人觉得你很牛逼,那么你可以使用 lambdas

print(f"{(lambda x: x**2)(3)}") # 9
로그인 후 복사

在这种情况下,lambda 表达式周围的括号是强制性的,因为:否则将由 f 字符串解释。

结束语

正如我们在这里看到的,f-strings确实非常强大,并且具有比大多数人想象的更多的功能。然而,大多数这些"未知"特性在 Python 文档中都有提及,因此我建议你不仅阅读 f-strings,还阅读你可能使用的任何其他 Python 模块/特性的文档页面。深入研究文档通常会帮助你发现一些非常有用的功能。

위 내용은 Python F-String은 생각보다 강력합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:51cto.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!