파이썬 문자열 형식에서 % s와 % d의 차이점은 무엇입니까?


138

나는 무엇을 %s하고 %d어떻게, 어떻게 작동하는지 이해하지 못합니다 .

답변:


185

문자열 형식화에 사용됩니다. %s문자열 %d의 자리 표시 자 역할을하는 반면 숫자의 자리 표시 자 역할을합니다. 관련된 값은 %연산자를 사용하여 튜플을 통해 전달됩니다 .

name = 'marcog'
number = 42
print '%s %d' % (name, number)

인쇄 marcog 42합니다. name은 문자열 (% s)이고 number는 정수 (10 진수의 경우 % d)입니다.

자세한 내용은 https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting 을 참조하십시오.

Python 3에서 예제는 다음과 같습니다.

print('%s %d' % (name, number))

2
Chrome에서 : 설정 >> 검색 >> 검색 엔진 관리 ... %s검색 엔진 구성에 어떻게 사용 되는지 확인 합니다. Chrome은 %s검색 주소창에 입력 한 키워드를 대체합니다. 파이썬도 %s비슷한 방식으로 사용합니다. 에서는 연산자에 저장된 텍스트 스트링으로 대체된다 변수. 둥근 괄호는 파이썬 3에서 오류 메시지를 방지합니다.print('description: %s' % descrip)%sdescrip
noobninja

이 % s, % d 등을 무엇이라고하나요?
Chaine

1
@Chaine 그것들은 플레이스 홀더 (placeholders)라고 불리며, 대체 가능한 변수입니다
Leo

@ 레오 감사합니다!
Chaine

37

에서 파이썬 3 문서

%d 십진 정수입니다

%s 일반 문자열 또는 객체 용이며 객체의 경우 문자열로 변환됩니다.

다음 코드를 고려하십시오

name ='giacomo'
number = 4.3
print('%s %s %d %f %g' % (name, number, number, number, number))

밖으로 넣어

giacomo 4.3 4 4.300000 4.3

보시 %d다시피 정수 로 자르고 %s서식을 유지 %f하며 float로 인쇄하며 %g일반 숫자로 사용됩니다

명백하게

print('%d' % (name))

예외를 생성합니다. 문자열을 숫자로 변환 할 수 없습니다


이것은 더 공감하는 것을 본다. %s대신 숫자로 사용되는 경우 어떻게되는지 설명합니다 .
Vikas Prasad

1
둘 다 정수로 변환되는 경우 % d와 % i의 차이점은 무엇입니까? % d는 % i 및 % f와 어떻게 비교됩니까?
srini

34

%s 형식화 된 문자열에 삽입하려는 문자열 값의 자리 표시 자로 사용됩니다.

%d 숫자 또는 10 진수 값의 자리 표시 자로 사용됩니다.

예를 들어 (파이썬 3의 경우)

print ('%s is %d years old' % ('Joe', 42))

출력 할 것이다

Joe is 42 years old

6
실제로 문제를 설명하지 않습니까? 나는 문제를 설명하지 않고 질문에 간결한 답변 제공하고 있습니다. 이 질문은 구체적으로 % s와 % d의 용도를 묻습니다.
Soviut

2
% i와 % d의 차이점을 알고 있습니까? 파이썬은 % i를 지원합니까?
cryanbhu

11

자리 표시 자입니다.

예를 들면 다음과 같습니다. 'Hi %s I have %d donuts' %('Alice', 42)

이 코드 줄은 % s를 Alice (str)로 대체하고 % d는 42를 대체합니다.

산출: 'Hi Alice I have 42 donuts'

이것은 대부분 "+"로 달성 할 수 있습니다. 귀하의 질문에 대해 더 깊이 이해하려면 {} / .format ()도 확인하십시오. 다음은 한 가지 예입니다. Python 문자열 형식 : % vs. .format

또한 여기에서 Google python tutorial 비디오 @ 40 '을 참조하십시오.


10

%d%s"명령"을 포맷 문자열은 형식 문자열에 사용됩니다. 는 %d숫자이며, %s문자열입니다.

예를 들어 :

print("%s" % "hi")

print("%d" % 34.6)

여러 인수를 전달하려면 다음을 수행하십시오.

print("%s %s %s%d" % ("hi", "there", "user", 123456)) 돌아올 것이다 hi there user123456


9

이 모든 정보에 대한 답변이 있습니다, 그러나 아무도는 상당히 차이가 사이에 무엇의 핵심 받고되지 않습니다 %s%d.

%s포맷터에게 str()인수에 대한 함수 를 호출하도록 지시하고 정의에 따라 문자열을 강제 실행하기 때문에 %s본질적으로 수행 str(arg)됩니다.

%d반면 int()에 다음 str()과 같이 호출하기 전에 인수를 호출 합니다. str(int(arg))이 경우 int강제뿐만 아니라 강제도 발생 str합니다.

예를 들어 16 진수 값을 10 진수로 변환 할 수 있습니다.

>>> '%d' % 0x15
'21'

또는 float를 자릅니다.

>>> '%d' % 34.5
'34'

그러나 인수가 숫자가 아닌 경우 연산에서 예외가 발생합니다.

>>> '%d' % 'thirteen'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: %d format: a number is required, not str

그래서 의도 그냥 호출하는 경우 str(arg), 다음 %s충분하지만, 당신은 여분의 (부동 소수점 포맷 등)의 서식 또는 다른 강압 필요가 있다면, 다른 포맷 기호가 필요하다.

f-string표기법을 사용하면 포맷터를 그대로두면 기본값은 str입니다.

>>> a = 1
>>> f'{a}'
'1'
>>> f'{a:d}'
'1'
>>> a = '1'
>>> f'{a:d}'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Unknown format code 'd' for object of type 'str'

string.format; 도 마찬가지입니다 . 기본값은 str입니다.

>>> a = 1
>>> '{}'.format(a)
'1'
>>> '{!s}'.format(a)
'1'
>>> '{:d}'.format(a)
'1'

8

%d그리고 %s그들이 대체 변수로 작동, 자리 표시 자입니다. 예를 들어, 2 개의 변수를 만드는 경우

variable_one = "Stackoverflow"
variable_two = 45

변수의 튜플을 사용하여 해당 변수를 문자열의 문장에 할당 할 수 있습니다.

variable_3 = "I was searching for an answer in %s and found more than %d answers to my question"

참고 %s문자열 및 작동 %d숫자 또는 10 진수 변수에 대한 작업.

인쇄 variable_3하면 다음과 같습니다

print(variable_3 % (variable_one, variable_two))

나는 StackOverflow에서 답을 찾고 있었고 내 질문에 45 개 이상의 답을 찾았습니다.


5

형식 지정자입니다. 파이썬 표현식의 값을 문자열에 포함시키고 특정 형식을 적용하려는 경우에 사용됩니다.

비교적 자세한 소개는 Python으로 다이빙을 참조하십시오 .



2

% s 또는 % d을 (를) 피하려면 ..

name = 'marcog'
number = 42
print ('my name is',name,'and my age is:', number)

산출:

my name is marcog and my name is 42

2
이 답변은 질문과 어떤 관련이 있습니까? 질문자의 사용에 대해 질문했다 %s%d.
Mark Dickinson

BTW, 당신이 보여주는 코드는 Python 3.5.1에서 유효하지 않습니다 : print파이썬 3의 함수이며 문장이 아닙니다.
Mark Dickinson

게시물을 수정했습니다. 참조하십시오. 실제로, 나는 그것을 대안으로 게시했습니다. 어떤 사람이 % d 또는 % s 사용을 피할 수 있다면. 그리고 오류 감지 덕분에 .. 코드를 편집했습니다.
Sujatha

3
편집 해 주셔서 감사합니다. 불행히도, 이것은 여전히 ​​질문에 대한 답변이 아닙니다.
Mark Dickinson

2

% s는 문자열을위한 공간을 유지하는 데 사용됩니다. % d는 숫자를위한 공간을 유지하는 데 사용됩니다

name = "Moses";
age = 23
print("My name is %s am CEO at MoTech Computers " %name)
print("Current am %d years old" %age)
print("So Am %s and am %d years old" %(name,age))

프로그램 출력

이 비디오는 그 팁에 대해 심층적으로 다룹니다 https://www.youtube.com/watch?v=4zN5YsuiqMA


스택 오버플로에 오신 것을 환영합니다! 다른 답변과 다른 답변은 어떻게 다릅니 까?
Vasil Velichkov

그 형식은 거의 동일하지만 내가 원하는 것은 이해를 높이기 위해 더 많은 예를 제시하는 것입니다.
Noel Moses Mwadende

대단해! 프로그램 출력을 이미지가 아닌 텍스트로 추가하여 답을 향상시킬 수 있습니다.
Vasil Velichkov

걱정 해 주셔서 감사합니다. 변경하겠습니다. 환영합니다
Noel Moses Mwadende

1

... 말하자면
python3.6는 함께 제공 f-strings되는 서식에 훨씬 쉽게 일을하게!
이제 파이썬 버전이 3.6보다 큰 경우 사용 가능한 다음 방법으로 문자열을 형식화 할 수 있습니다.

name = "python"

print ("i code with %s" %name)          # with help of older method
print ("i code with {0}".format(name))  # with help of format
print (f"i code with {name}")           # with help of f-strings
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.