In nhiều đối số bằng Python


309

Đây chỉ là một đoạn mã của tôi:

print("Total score for %s is %s  ", name, score)

Nhưng tôi muốn nó in ra:

"Tổng số điểm cho (tên) là (điểm)"

trong đó namelà một biến trong danh sách và scorelà một số nguyên. Đây là Python 3.3 nếu điều đó có ích gì cả.

Câu trả lời:


559

Có rất nhiều cách để làm điều này. Để sửa mã hiện tại của bạn bằng cách sử dụng định %dạng, bạn cần chuyển qua một tuple:

  1. Vượt qua nó như một tuple:

    print("Total score for %s is %s" % (name, score))

Một tuple với một yếu tố duy nhất trông như thế ('this',).

Dưới đây là một số cách phổ biến khác để làm điều đó:

  1. Vượt qua nó như một từ điển:

    print("Total score for %(n)s is %(s)s" % {'n': name, 's': score})

Ngoài ra còn có định dạng chuỗi kiểu mới, có thể dễ đọc hơn một chút:

  1. Sử dụng định dạng chuỗi kiểu mới:

    print("Total score for {} is {}".format(name, score))
  2. Sử dụng định dạng chuỗi kiểu mới với các số (hữu ích để sắp xếp lại hoặc in cùng một lần nhiều lần):

    print("Total score for {0} is {1}".format(name, score))
  3. Sử dụng định dạng chuỗi kiểu mới với tên rõ ràng:

    print("Total score for {n} is {s}".format(n=name, s=score))
  4. Chuỗi liên kết:

    print("Total score for " + str(name) + " is " + str(score))

Hai rõ ràng nhất, theo ý kiến ​​của tôi:

  1. Chỉ cần truyền các giá trị dưới dạng tham số:

    print("Total score for", name, "is", score)

    Nếu bạn không muốn các khoảng trắng được chèn tự động bằng printtrong ví dụ trên, hãy thay đổi septham số:

    print("Total score for ", name, " is ", score, sep='')

    Nếu bạn đang sử dụng Python 2, sẽ không thể sử dụng hai cái cuối cùng vì printkhông phải là một chức năng trong Python 2. Tuy nhiên, bạn có thể nhập hành vi này từ __future__:

    from __future__ import print_function
  2. Sử dụng fđịnh dạng chuỗi mới trong Python 3.6:

    print(f'Total score for {name} is {score}')

7
tất nhiên, luôn có phương pháp không được chấp thuận lâu đời:print("Total score for "+str(name)"+ is "+str(score))
Rắn và cà phê

5
@SnakesandCoffee: Tôi chỉ cần làmprint("Total score for", name, "is", score)
Blender

4
+1 của tôi. Ngày nay tôi thích cái .format()dễ đọc hơn cái cũ % (tuple)- mặc dù tôi đã thấy các bài kiểm tra cho thấy %phép nội suy nhanh hơn. Điều print('xxx', a, 'yyy', b)này cũng tốt cho các trường hợp đơn giản. Tôi cũng khuyên bạn nên học .format_map()với từ điển làm đối số và với 'ssss {key1} xxx {key2}'- tốt để tạo văn bản từ các mẫu. Cũng có người lớn tuổi string_template % dictionary. Nhưng các mẫu không nhìn rõ ràng : 'ssss %(key1)s xxx %(key2)s'.
pepr

6
FYI, kể từ Python 3.6, chúng tôi nhận được chuỗi f , vì vậy bây giờ bạn cũng có thể thực hiện print(f"Total score for {name} is {score}")mà không có lệnh gọi hàm rõ ràng (miễn là namescoretrong phạm vi rõ ràng).
ShadowRanger

57

Có nhiều cách để in điều đó.

Hãy xem xét một ví dụ khác.

a = 10
b = 20
c = a + b

#Normal string concatenation
print("sum of", a , "and" , b , "is" , c) 

#convert variable into str
print("sum of " + str(a) + " and " + str(b) + " is " + str(c)) 

# if you want to print in tuple way
print("Sum of %s and %s is %s: " %(a,b,c))  

#New style string formatting
print("sum of {} and {} is {}".format(a,b,c)) 

#in case you want to use repr()
print("sum of " + repr(a) + " and " + repr(b) + " is " + repr(c))

EDIT :

#New f-string formatting from Python 3.6:
print(f'Sum of {a} and {b} is {c}')

3
print("sum of {0} and {1} is {2}".format(a,b,c)) là quá mức cần thiết, bạn có thể bỏ qua print("sum of {} and {} is {}".format(a,b,c)) trừ khi bạn muốn thay đổi thứ tự.
Jean-François Fabre

39

Sử dụng .format()::

print("Total score for {0} is {1}".format(name, score))

Hoặc là:

// Recommended, more readable code

print("Total score for {n} is {s}".format(n=name, s=score))

Hoặc là:

print("Total score for" + name + " is " + score)

Hoặc là:

`print("Total score for %s is %d" % (name, score))`

21

Trong Python 3.6, f-stringsạch hơn nhiều.

Trong phiên bản trước:

print("Total score for %s is %s. " % (name, score))

Trong Python 3.6:

print(f'Total score for {name} is {score}.')

sẽ làm.

Nó là hiệu quả và thanh lịch hơn.


15

Giữ cho nó đơn giản, cá nhân tôi thích nối chuỗi:

print("Total score for " + name + " is " + score)

Nó hoạt động với cả Python 2.7 và 3.X.

LƯU Ý: Nếu điểm là int , thì bạn nên chuyển đổi nó thành str :

print("Total score for " + name + " is " + str(score))

12

Cứ thử đi:

print("Total score for", name, "is", score)

11

Chỉ cần làm theo

idiot_type = "the biggest idiot"
year = 22
print("I have been {} for {} years ".format(idiot_type, years))

HOẶC LÀ

idiot_type = "the biggest idiot"
year = 22
print("I have been %s for %s years."% (idiot_type, year))

Và quên tất cả những thứ khác, bộ não sẽ không thể ánh xạ tất cả các định dạng.



6

Sử dụng f-string:

print(f'Total score for {name} is {score}')

Hoặc là

Sử dụng .format:

print("Total score for {} is {}".format(name, score))

5

Nếu scorelà một số, thì

print("Total score for %s is %d" % (name, score))

Nếu điểm là một chuỗi, thì

print("Total score for %s is %s" % (name, score))

Nếu điểm là một con số, thì đó là %d, nếu đó là một chuỗi, thì đó là %s, nếu điểm là một số float, thì đó là%f


3

Đây là những gì tôi làm:

print("Total score for " + name + " is " + score)

Nhớ đặt một khoảng trống sau forvà trước và sau is.

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.