Sự khác biệt giữa% s và% d trong định dạng chuỗi Python là gì?


Câu trả lời:


185

Chúng được sử dụng để định dạng chuỗi. %sđóng vai trò giữ chỗ cho một chuỗi trong khi %dđóng vai trò giữ chỗ cho một số. Các giá trị liên quan của chúng được truyền qua một tuple bằng %toán tử.

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

sẽ in marcog 42. Lưu ý rằng tên là một chuỗi (% s) và số là một số nguyên (% d cho số thập phân).

Xem https://docs.python.org/3/l Library / stdtypes.html#printf-style-opes-formatted để biết chi tiết.

Trong Python 3, ví dụ sẽ là:

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

2
Trong Google Chrome: Cài đặt >> Tìm kiếm >> Quản lý công cụ tìm kiếm ... chú ý cách %ssử dụng với cấu hình công cụ tìm kiếm. Chrome sử dụng %sđể thay thế các từ khóa được nhập vào thanh địa chỉ. Python sử dụng %stheo cách tương tự. Trong print('description: %s' % descrip)các %snhà điều hành sẽ được thay thế bằng chuỗi văn bản được lưu trữ trong các descripbiến. Các dấu ngoặc nhọn ngăn thông báo lỗi trong Python 3.
noobninja

bạn gọi những gì% s,% d, v.v?
Chaine

1
@Chaine chúng được gọi là Giữ chỗ, chúng là các biến có thể thay thế
Leo

@Leo Cảm ơn bạn!
Chaine

36

từ python 3 doc

%d dành cho số nguyên thập phân

%s dành cho chuỗi hoặc đối tượng chung và trong trường hợp đối tượng, nó sẽ được chuyển đổi thành chuỗi

Hãy xem xét các mã sau đây

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

đặt ra sẽ được

giacomo 4.3 4 4.300000 4.3

như bạn có thể thấy %dsẽ cắt ngắn thành số nguyên, %ssẽ duy trì định dạng, %fsẽ in dưới dạng float và %gđược sử dụng cho số chung

chắc chắn

print('%d' % (name))

sẽ tạo ra một ngoại lệ; bạn không thể chuyển đổi chuỗi thành số


Điều này deseeves upvote nhiều hơn. Nó giải thích những gì sẽ xảy ra nếu %sđược sử dụng cho một số thay thế.
Vikas Prasad

1
Sự khác biệt giữa% d và% i là gì, nếu cả hai sẽ chuyển đổi thành số nguyên? Làm thế nào để% d so với% i và% f?
srini

34

%s được sử dụng như một trình giữ chỗ cho các giá trị chuỗi bạn muốn đưa vào một chuỗi được định dạng.

%d được sử dụng như một trình giữ chỗ cho các giá trị số hoặc thập phân.

Ví dụ (đối với python 3)

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

Sẽ xuất

Joe is 42 years old

6
Không thực sự giải thích vấn đề? Tôi không giải thích vấn đề, tôi đang cung cấp một câu trả lời ngắn gọn cho câu hỏi. Câu hỏi đặc biệt hỏi% s và% d dùng để làm gì.
Soviut

2
Bạn có biết sự khác biệt giữa% i và% d không? python có hỗ trợ% i không?
cryanbhu

11

Đây là những chỗ dành sẵn:

Ví dụ: 'Hi %s I have %d donuts' %('Alice', 42)

Dòng mã này sẽ thay thế% s bằng Alice (str) và% d bằng 42.

Đầu ra: 'Hi Alice I have 42 donuts'

Điều này có thể đạt được với "+" hầu hết thời gian. Để hiểu sâu hơn về câu hỏi của bạn, bạn cũng có thể muốn kiểm tra {} / .format (). Đây là một ví dụ: dạng chuỗi Python:% vs. .format

cũng xem ở đây một video hướng dẫn python của Google @ 40 ', nó có một số giải thích https://www.youtube.com/watch?v=tKTZoB2Vjuk


10

Các %d%schuỗi định dạng "lệnh" được sử dụng để định dạng chuỗi. Đây %dlà cho số, và %slà cho chuỗi.

Ví dụ:

print("%s" % "hi")

print("%d" % 34.6)

Để vượt qua nhiều đối số:

print("%s %s %s%d" % ("hi", "there", "user", 123456)) sẽ trở lại hi there user123456


9

Đây là tất cả các câu trả lời thông tin, nhưng không có câu trả lời nào là cốt lõi của sự khác biệt giữa %s%d.

%snói cho bộ định dạng gọi str()hàm trên đối số và vì chúng ta đang ép buộc một chuỗi theo định nghĩa, %svề cơ bản chỉ là thực hiện str(arg).

%dmặt khác, đang kêu gọi int()tranh luận trước khi gọi str(), như str(int(arg)), Điều này sẽ gây ra intsự ép buộc cũng như strsự ép buộc.

Ví dụ: tôi có thể chuyển đổi giá trị hex thành thập phân

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

hoặc cắt một phao.

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

Nhưng hoạt động sẽ đưa ra một ngoại lệ nếu đối số không phải là số.

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

Vì vậy, nếu ý định chỉ là để gọi str(arg), thì%s đủ, nhưng nếu bạn cần định dạng bổ sung (như định dạng dấu thập phân dấu phẩy) hoặc ép buộc khác, thì cần các ký hiệu định dạng khác.

Với f-stringký hiệu, khi bạn bỏ định dạng ra, mặc định là 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'

Điều tương tự cũng đúng với string.format; mặc định là str.

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

8

%d%slà giữ chỗ, chúng hoạt động như một biến có thể thay thế. Ví dụ: nếu bạn tạo 2 biến

variable_one = "Stackoverflow"
variable_two = 45

bạn có thể gán các biến đó cho một câu trong một chuỗi bằng cách sử dụng một tuple của các biến.

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

Lưu ý rằng %shoạt động cho Chuỗi và%d hoạt động cho các biến số hoặc số thập phân.

nếu bạn in variable_3nó sẽ trông như thế này

print(variable_3 % (variable_one, variable_two))

Tôi đã tìm kiếm một câu trả lời trong StackOverflow và tìm thấy hơn 45 câu trả lời cho câu hỏi của tôi.


5

Họ là định dạng định dạng. Chúng được sử dụng khi bạn muốn bao gồm giá trị của các biểu thức Python của bạn thành các chuỗi, với một định dạng cụ thể được thi hành.

Xem Lặn vào Python để giới thiệu tương đối chi tiết.



2

Trong trường hợp bạn muốn tránh% s hoặc% d thì ..

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

Đầu ra:

my name is marcog and my name is 42

2
Câu trả lời này có liên quan gì đến câu hỏi? Người hỏi đã hỏi về việc sử dụng %s%d.
Đánh dấu Dickinson

BTW, mã bạn hiển thị không hợp lệ trong Python 3.5.1: printlà một hàm trong Python 3, không phải là một câu lệnh.
Đánh dấu Dickinson

Tôi đã chỉnh sửa bài viết ... xin vui lòng xem nó. Trên thực tế, tôi đã đăng nó dưới dạng thay thế..nếu ai đó có thể tránh sử dụng% d hoặc% s. Và cảm ơn vì đã phát hiện lỗi, .. Tôi đã chỉnh sửa mã.
Sujatha

3
Cảm ơn các chỉnh sửa. Thật không may, đây vẫn chưa phải là một câu trả lời cho câu hỏi.
Đánh dấu Dickinson

2

% s được sử dụng để giữ không gian cho chuỗi% d được sử dụng để giữ không gian cho số

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))

Đầu ra chương trình

video này đi sâu về mẹo đó https://www.youtube.com/watch?v=4zN5YsuiqMA


Chào mừng bạn đến với Stack Overflow! Câu trả lời của bạn khác 12 người khác như thế nào?
Vasil Velichkov

hầu hết các định dạng đều hoạt động giống nhau nhưng tất cả những gì tôi muốn là đưa ra nhiều ví dụ để tăng thêm sự hiểu biết
Noel Moses Mwadende

Thật tuyệt! Bạn có thể cải thiện câu trả lời của mình bằng cách thêm đầu ra chương trình dưới dạng văn bản chứ không phải dưới dạng hình ảnh.
Vasil Velichkov

cảm ơn sự quan tâm của bạn, tôi sẽ thực hiện một số thay đổi, rất hoan nghênh
Noel Moses Mwadende

1

nói về điều đó ...
python3.6 đi kèm với f-stringsnó giúp mọi thứ dễ dàng hơn trong việc định dạng!
bây giờ nếu phiên bản python của bạn lớn hơn 3.6, bạn có thể định dạng chuỗi của mình bằng các phương thức có sẵn sau:

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.