Python에서 문자열 형식 지정을 구현하는 방법 요약
Python2.6+는 원래 '%' 연산자를 대체하기 위해 str.format 함수를 추가합니다. '%'보다 사용법이 더 직관적이고 유연합니다. 사용방법에 대해 자세하게 소개되어 있습니다.
다음은 '%'를 사용한 예입니다.
"" "PI is %f..." % 3.14159 # => 'PI is 3.141590...' "%d + %d = %d" % (5, 6, 5+6) # => '5 + 6 = 11' "The usage of %(language)s" % {"language": "python"} # => 'The usage of python'
형식은 printf와 매우 유사합니다. C언어 맞죠? '%'는 연산자이므로 왼쪽과 오른쪽에 하나의 매개변수만 배치할 수 있으므로 오른쪽에 있는 여러 값을 튜플이나 딕셔너리에 포함해야 하므로 튜플과 딕셔너리는 함께 사용할 수 없으므로 유연성이 부족합니다. .
동일한 예를 형식 메서드를 사용하여 다시 작성했습니다.
"PI is {0}...".format(3.14159) # => 'PI is 3.14159...' "{0} + {1} = {2}".format(5, 6, 5+6) # => '5 + 6 = 11' "The usage of {language}".format(language = "Python") # => 'The usage of Python'
매우 직관적이지 않나요? (물론 C 언어를 사용할 때는 전자의 형식 표현도 좋아합니다:-) )
형식 문자열
"{named} consist of intermingled character {0} and {1}".format("data", "markup", \ named = "Formats trings") format(10.0, "7.3g") # => ' 10' "My name is {0} :-{{}}".format('Fred') # => 'My name is Fred :-{}'
첫 번째 줄의 ''에 주의하세요. 문을 줄바꿈해야 하는 경우 끝에 백슬래시를 사용하여 이스케이프해야 합니다.
'%'를 사용하면 이와 같이 튜플과 딕셔너리를 혼합할 수 없습니다. 실제로 여기에는 Python의 기능인 명명된 매개변수가 있습니다. 배열을 정의할 때 *args, **kwargs 구문을 사용하여 컬렉션과 사전을 확장할 수 있습니다. 명명된 매개변수는 끝에 배치된다는 점에 유의해야 합니다.
두 번째 문은 형식 내장 함수가 단일 값의 형식을 지정하는 데 사용됨을 나타냅니다.
세 번째 문은 {}의 이스케이프를 나타냅니다. 왜냐하면 {}는 형식이 지정된 문자열의 특수 문자이고 직접 표시될 수 없기 때문입니다. 이스케이프 방법은 한 수준 더 중첩하는 것입니다.
속성 및 인덱스 사용
"My name is {0.name}".format(open('out.txt', 'w')) # => 'My name is out.txt'
'{0.name}'은 object open('out.txt', 'w').name
"My name is {0[name]}".format(dict(name='Fred')) # => 'My name is Fred'
속성에 대한 인덱스를 사용할 수도 있습니다.
obj[key]는 obj.____getitem____('key')
표준 지정자(Specifiers)
C로 작성됨 언어 프로그래머는 printf의 복잡성을 알고 있어야 합니다. format은 또한 값의 형식을 해석한 다음 이를 문자열에 삽입하는 데 사용되는 여러 표준 지정자를 정의합니다. 예:
"My name is {0:8}".format('Fred') # => 'My name is Fred '
':' 뒤에는 지정자가 옵니다. 위 예에서 지정자는 '8'(최소 너비) 하나만 갖습니다. 이는 삽입된 값의 너비가 8 이상이어야 함을 의미합니다. '프레드'는 4개만 있어서 4개의 공백이 더 추가됩니다.
지정자의 자세한 형식은 다음과 같습니다:
[[fill]align][sign][#][0][minimumwidth][.precision][type]
(C의 printf보다 더 간결하지는 않습니다!)
참고: '[]' 요소가 선택사항임을 나타냅니다. 따라서 모든 형식 지정자는 선택 사항입니다! 이전 예제와 마찬가지로 이는 거의 사용되지 않습니다(단지 예제를 더 명확하게 하기 위해). 사실, 이것들은 매우 유용합니다.
하나씩 살펴보겠습니다.
1. [fill]align은 배열을 의미합니다. 최소폭을 삽입된 값보다 크게 설정하면 앞선 예시의 '내 이름은 프레드'처럼 공백이 생깁니다. 기본적으로 공백은 오른쪽에 배치됩니다. 즉, 삽입된 값은 기본적으로 왼쪽 정렬됩니다. {0:>8}을 시도하면 결과는 'My name is Fred'가 됩니다.
fill은 공백을 채우는 데 사용되는 문자를 나타냅니다. 채우기는 정렬이 지정된 경우에만 유용합니다! align은 다음 식별자일 수 있습니다:
< 왼쪽 정렬, 기본값
> 오른쪽 정렬
-
= 정렬 표시 뒤에 공백을 두십시오. 이는 숫자에만 유효합니다. 그것은 무엇을 의미합니까? 아래에서 설명하겠지만 align은 숫자의 양수 및 음수 부호를 표시하며 이는 숫자에만 유효합니다. '='를 지정하면 공백 앞에 숫자의 양수 및 음수 부호가 표시됩니다. 예: format(-12, "0=8") # => '-0000012' 여기서는 단일 값의 형식을 지정하기 위한 내장 함수 형식이 사용됩니다. '0'은 공백을 채우는 데 사용되는 채우기 요소입니다. '='는 최소 너비가 8이므로 공백이 5개만 있음을 의미합니다. 정렬은 어떻습니까? Align은 실제로 더하기 및 빼기 기호의 표시 방법을 설명합니다. 여기서는 기본 '-'가 사용되며 이에 대해서는 나중에 설명합니다.
^ 가운데 정렬
2. 숫자에만 유효합니다.
+ 더하기 및 빼기 기호 표시
- 더하기 기호는 표시하지 않고 빼기 기호를 표시합니다. 최소 너비를 지정하지 않으면 음수는 항상 양수보다 기호 위치를 하나 더 많이 차지합니다. 기본값
' '(공백) 더하기 기호를 대체하려면 공백을 사용하세요.
3 # 표시되는 숫자의 접두사는 나타냅니다. 십진법(0b, 0o, 0x)
4.0 공백을 '0'으로 채웁니다.
5. 최소 너비는 최소 너비를 지정하며 여러 번 사용되었습니다.
6. 정밀도 '정밀도'는 소수점 이하 자릿수를 나타내는 숫자입니다.
7. 유형 값 유형:
① 정수 유형:
b 바이너리
c 문자 유형, 숫자를 유니코드를 나타내는 문자로 변환
d 십진수
o 8진수
x 16진수, 소문자 표시
X 16진수, 대문자 표시
n과 d 동작 동일, 지역 숫자 표현 사용
''(비어 있음, 공백 없음)은 d
②부동 소수점 수
와 같습니다.e 科学计数法表示,小写e
E 科学计数法表示,大写E
f 显示为定点数,默认小数点后六位
F 同f
g 自动选择是否用科学记数法表示
G 同g
n 同g,使用本地表示方式
% 使用百分比表示
''(空) 同g
每个对象可以重写自己的格式化说明符,例如datatime类重写了后可以这样表示:
"Today is: {0:%a %b %d %H:%M:%S %Y}".format(datetime.now())
预先转换
':'之后是格式说明符,之前还可以加预先转换的标识
!r 调用对象的_repr_方法来转换成标准字符串
!s 调用对象的_str_方法来转换成字符串
重写_format_方法
我们在格式化一个字符串时,首先格式化每个值,然后再插入字符串内。格式化值调用的就是format内置方法。format则是简单地调用该值的_format_方法。
def format(value, format_spec): return value.__format__(format_spec)
在object类内实现了_format方法,只是将本身用str()转换成字符串,然后将字符串传入内置的format方法,实际上就是调用转换为字符串后的format_方法。
class object: def __format__(self, format_spec): return format(str(self), format_spec)
int/float/str自身实现了_format_方法,前面已经介绍了它们各自的说明符。
结束语
还有一点儿是自定义Formatter,不过平常也用不到。留作下篇string模块源码解读的内容吧。建议有兴趣的朋友多看看Python标准库的源码,很有学习价值。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持PHP中文网。
更多Python实现字符串格式化的方法小结相关文章请关注PHP中文网!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Linux 터미널에서 Python 버전을 보려고 할 때 Linux 터미널에서 Python 버전을 볼 때 권한 문제에 대한 솔루션 ... Python을 입력하십시오 ...

10 시간 이내에 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법은 무엇입니까? 컴퓨터 초보자에게 프로그래밍 지식을 가르치는 데 10 시간 밖에 걸리지 않는다면 무엇을 가르치기로 선택 하시겠습니까?

Fiddlerevery Where를 사용할 때 Man-in-the-Middle Reading에 Fiddlereverywhere를 사용할 때 감지되는 방법 ...

Python의 Pandas 라이브러리를 사용할 때는 구조가 다른 두 데이터 프레임 사이에서 전체 열을 복사하는 방법이 일반적인 문제입니다. 두 개의 dats가 있다고 가정 해

Uvicorn은 HTTP 요청을 어떻게 지속적으로 듣습니까? Uvicorn은 ASGI를 기반으로 한 가벼운 웹 서버입니다. 핵심 기능 중 하나는 HTTP 요청을 듣고 진행하는 것입니다 ...

파이썬에서 문자열을 통해 객체를 동적으로 생성하고 메소드를 호출하는 방법은 무엇입니까? 특히 구성 또는 실행 해야하는 경우 일반적인 프로그래밍 요구 사항입니다.

Linux 터미널에서 Python 사용 ...
