programing

Python에서 문자열 형식 지정에 여러 인수 사용(예: '%s... %s')

mailnote 2023. 7. 5. 20:54
반응형

Python에서 문자열 형식 지정에 여러 인수 사용(예: '%s... %s')

나는 다음과 같이 생긴 끈을 가지고 있습니다.'%s in %s'그리고 두 개의 다른 %s가 되도록 인수를 분리하는 방법을 알고 싶습니다.온 제 은 이렇게: 자에서생것낸다같습다니음과은각해바▁my다같니습:다과음.

'%s in %s' % unicode(self.author),  unicode(self.publication)

하지만 이것은 작동하지 않는데 파이썬에서는 어떻게 보이나요?

Mark Cidade의 대답은 옳습니다. 당신은 튜플을 공급해야 합니다.

그러나 Python 2.6 이후부터는 사용할 수 있습니다.%:

'{0} in {1}'.format(unicode(self.author,'utf-8'),  unicode(self.publication,'utf-8'))

%문자열 형식 지정은 더 이상 권장되지 않습니다.

이 문자열 형식 지정 방법은 Python 3.0의 새로운 표준이며 새 코드의 문자열 형식 지정 작업에 설명된 % 형식 지정보다 선호되어야 합니다.

두 개 이상의 인수를 사용하는 경우에는 튜플에 있어야 합니다(추가 괄호 참조).

'%s in %s' % (unicode(self.author),  unicode(self.publication))

했듯이, EOL은unicode()함수는 일반적으로 ASCII 인코딩을 기본값으로 가정하므로 ASCII가 아닌 문자가 있는 경우 인코딩을 명시적으로 전달하는 것이 더 안전합니다.

'%s in %s' % (unicode(self.author,'utf-8'),  unicode(self.publication('utf-8')))

그리고 Python 3.0부터는 구문을 대신 사용하는 것이 선호됩니다.

'{0} in {1}'.format(unicode(self.author,'utf-8'),unicode(self.publication,'utf-8'))

인수에 : " " "/ "format

다음은 설명서에서 발췌한 내용입니다.

해진정format % values,%변규격의 변환 format 또는 그로 대체됩니다. 0 이 상 요 대 체values효과는 다음을 사용하는 것과 유사합니다.sprintf()C언어로

한다면format단일 인수가 필요합니다. 값은 단일 비슬래플 개체일 수 있습니다.그렇지 않은 경우 값은 문자열로 지정된 항목 수가 정확한 튜플이거단일 매핑 개체(예: 사전)여야 합니다.

레퍼런스


str.format%

%는 가사다니용합자연을 합니다.str.format다음은 설명서에서 발췌한 내용입니다.

str.format(*args, **kwargs)

문자열 형식 지정 작업을 수행합니다.에는 문자 또는 대괄호로 될 수 .{}각 대체 필드에는 위치 인수의 숫자 인덱스 또는 키워드 인수의 이름이 포함됩니다.각 대체 필드가 해당 인수의 문자열 값으로 대체되는 문자열의 복사본을 반환합니다.

이 방법은 Python 3.0의 새로운 표준이며 포맷보다 선호되어야 합니다.

레퍼런스


다음은 몇 가지 사용 예입니다.

>>> '%s for %s' % ("tit", "tat")
tit for tat

>>> '{} and {}'.format("chicken", "waffles")
chicken and waffles

>>> '%(last)s, %(first)s %(last)s' % {'first': "James", 'last': "Bond"}
Bond, James Bond

>>> '{last}, {first} {last}'.format(first="James", last="Bond")
Bond, James Bond

참고 항목

값을 괄호 안에 넣어야 합니다.

'%s in %s' % (unicode(self.author),  unicode(self.publication))

자, 처음으로%sunicode(self.author)배치됩니다.그리고 두번째로%s,그unicode(self.publication)사용됩니다.

참고: 선호해야 합니다.string formatting저쪽에%표기법.자세한 내용은 여기에 있습니다.

지금까지 게시된 답변 중 일부에 중대한 문제가 있습니다.unicode()일반적으로 ASCII인 기본 인코딩에서 디코딩합니다.unicode()는 지정된 바이트를 문자로 변환하여 "의미"를 파악하려고 합니다.따라서 기본적으로 이전 답변에서 권장하는 다음 코드가 내 컴퓨터에서 실패합니다.

# -*- coding: utf-8 -*-
author = 'éric'
print '{0}'.format(unicode(author))

제공:

Traceback (most recent call last):
  File "test.py", line 3, in <module>
    print '{0}'.format(unicode(author))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)

실패의 원인은authorASCII 바이트만 포함하지 않습니다(예: [0; 127]에 값 포함).unicode()기본적으로 많은 시스템에서 ASCII에서 디코딩됩니다.

강력한 솔루션은 UTF-8을 예로 들어 필드에 사용되는 인코딩을 명시적으로 제공하는 것입니다.

u'{0} in {1}'.format(unicode(self.author, 'utf-8'), unicode(self.publication, 'utf-8'))

(또는 이니셜 없이)u유니코드 결과를 원하는지 바이트 문자열을 원하는지에 따라 달라집니다.

이 시점에서, 누군가는 그것을 갖는 것을 고려하는 것이 좋을 것입니다.author그리고.publication필드는 형식 지정 중에 디코딩하는 대신 유니코드 문자열입니다.

완전성을 위해 python 3.6 f-string은 PEP-498에 도입되었습니다.이 문자열들은 다음을 가능하게 합니다.

최소 구문을 사용하여 문자열 리터럴 내부에 식을 포함합니다.

즉, 예를 들어 다음을 사용할 수도 있습니다.

f'{self.author} in {self.publication}'

python2의 경우에도 이 작업을 수행할 수 있습니다.

'%(author)s in %(publication)s'%{'author':unicode(self.author),
                                  'publication':unicode(self.publication)}

대체할 주장이 많은 경우 유용합니다(특히 국제화를 수행하는 경우).

2 버전은 Python 2.6을 지원합니다..format()

'{author} in {publication}'.format(author=self.author,
                                   publication=self.publication)

당신은 또한 그것을 깨끗하고 간단하게 사용할 수 있습니다. (그러나 틀렸습니다! 왜냐하면 당신이 사용해야 하기 때문입니다.formatMark Byers가 말한 것처럼) 다음을 수행함으로써:

print 'This is my %s formatted with %d arguments' % ('string', 2)

언급URL : https://stackoverflow.com/questions/3395138/using-multiple-arguments-for-string-formatting-in-python-e-g-s-s

반응형