2012-01-24 29 views
35

http://learnpythonthehardway.org/book/ex6.htmlPython Way cứng - tập 6 -% r so với% s

Zed dường như sử dụng %r%s thay thế cho nhau ở đây, là có bất kỳ sự khác biệt giữa hai? Tại sao không chỉ sử dụng %s mọi lúc?

Ngoài ra, tôi không chắc chắn nên tìm kiếm gì trong tài liệu để tìm thêm thông tin về điều này. %r%s được gọi chính xác là gì? Định dạng chuỗi?

+1

xem http: // stackove rflow.com/a/6005180/1114171 và http://stackoverflow.com/a/997807/1114171, nó được gọi là toán tử định dạng/nội suy, xem [docs] (http://docs.python.org/library/ stdtypes.html # string-format-operation) –

+0

có thể trùng lặp với [ý nghĩa của% r trong python] (http: // stackoverflow).com/questions/2354329/whats-the-meaning-of-r-in-python) –

+2

có thể trùng lặp của [Khi nào sử dụng% r thay vì% s bằng Python?] (http://stackoverflow.com/questions/6005159/khi-to-sử dụng-r-thay-cho-s-in-python) –

Trả lời

52

Chúng được gọi là string formatting operations.

Sự khác biệt giữa% s và% r là% s sử dụng hàm str và% r sử dụng hàm repr. Bạn có thể đọc về sự khác biệt giữa strrepr trong this answer, nhưng đối với các loại được cài sẵn, sự khác biệt lớn nhất trong thực tế là repr cho chuỗi bao gồm dấu ngoặc kép và tất cả ký tự đặc biệt được thoát.

22

%r gọi repr, trong khi %s gọi str. Chúng có thể hoạt động khác nhau đối với một số loại, nhưng không phải đối với một số loại khác, nhưng không dành cho người khác: repr trả về "đại diện có thể in của đối tượng", trong khi str trả lại "độc đáo đại diện có thể in của đối tượng". Ví dụ, chúng khác nhau cho các chuỗi:

>>> s = "spam" 
>>> print(repr(s)) 
'spam' 
>>> print(str(s)) 
spam 

Trong trường hợp này, repr là đại diện đen của một chuỗi (mà trình thông dịch Python có thể phân tích thành một đối tượng str), trong khi str chỉ là nội dung của chuỗi.

-1

Mã dưới đây minh họa sự khác biệt. Cùng một giá trị bản in khác nhau:

x = "xxx" 
withR = "prints with quotes %r" 
withS = "prints without quotes %s" 
0
x = "example" 
print "My %s"%x 

     My example 

print "My %r"%x 

     My 'example' 

Nó được giải thích trong các câu trả lời ở trên. Tôi đã cố gắng để hiển thị cùng với một ví dụ đơn giản.

2

Sau đây là tóm tắt về ba ví dụ mã trước.

# First Example 
s = 'spam' 
# "repr" returns a printable representation of an object, 
# which means the quote marks will also be printed. 
print(repr(s)) 
# 'spam' 
# "str" returns a nicely printable representation of an 
# object, which means the quote marks are not included. 
print(str(s)) 
# spam 

# Second Example. 
x = "example" 
print ("My %r" %x) 
# My 'example' 
# Note that the original double quotes now appear as single quotes. 
print ("My %s" %x) 
# My example 

# Third Example. 
x = 'xxx' 
withR = ("Prints with quotes: %r" %x) 
withS = ("Prints without quotes: %s" %x) 
print(withR) 
# Prints with quotes: 'xxx' 
print(withS) 
# Prints without quotes: xxx 
0

%s => chuỗi

%r => chính xác như là

Sử dụng mã trong cuốn sách:

my_name = 'Zed A. Shaw' 
print "Let's talk about %s." % my_name 
print "Let's talk about %r." % my_name 

chúng tôi nhận

Let's talk about Zed A. Shaw. 
Let's talk about 'Zed A. Shaw'. 
Các vấn đề liên quan