2012-07-19 14 views
84

Trong python nói rằng bạn cóKết nối chuỗi và số nguyên trong python

s = "string" 
i = 0 
print s+i 

sẽ cung cấp cho bạn lỗi vì vậy bạn viết

print s+str(i) 

để không nhận lỗi.

Tôi nghĩ đây là một cách khá vụng về để xử lý nối chuỗi và int. Thậm chí Java không cần phải chuyển rõ ràng thành Chuỗi để thực hiện loại này của kết nối. Có cách nào tốt hơn để thực hiện loại ghép nối này mà không cần đúc rõ ràng bằng Python không?

+7

Đó là vì Python được nhập mạnh (https://en.wikipedia.org/wiki/Strong_typing) ngôn ngữ (điều gì đó để google hiểu thêm :)). – mouad

+3

Nó sẽ dẫn đến sự mơ hồ. Điều gì sẽ là kết quả của '" 1 "+ 1',' 2' hoặc '" 11 "' và tại sao? – Buddy

+1

Buddy Tôi không chắc bạn đang nghĩ gì nhưng xin đừng giả định. Vấn đề của tôi là kết nối 2 loại đối tượng khác nhau và tôi đã tìm ra giải pháp. Tôi không biết bao nhiêu bạn có lập trình trong python nhưng có bao giờ bạn cố gắng nối hai dây chỉ để có được lỗi khi một trong số họ là Không có loại? Bạn có thể kiểm tra rõ ràng ya nhưng đó chỉ là một chút mã. Loại điều này là cần thiết khi bạn cần phải đăng nhập lỗi. – specialscope

Trả lời

104

chuỗi định dạng hiện đại:

"{} and {}".format("string", 1) 
+2

Cảm ơn cách tốt đẹp này để làm điều đó. – specialscope

+0

Chỉ vì hậu thế, vì mọi thứ đã thay đổi trong quá khứ và có khả năng thay đổi trong tương lai: đây là "hiện đại" như phiên bản nào? – jvriesem

23

Chuỗi định dạng, sử dụng phương pháp mới mang phong cách .format() (với giá trị mặc định .format() cung cấp):

'{}{}'.format(s, i) 

Hoặc cũ, nhưng "vẫn bám xung quanh", % -formatting:

'%s%d' %(s, i) 

Trong cả hai ví dụ trên, có không khoảng cách giữa hai mục được nối với nhau. Nếu không gian là cần thiết, nó chỉ đơn giản có thể được thêm vào trong chuỗi định dạng.

Chúng cung cấp kiểm soát và linh hoạt về cách ghép các mục, khoảng cách giữa chúng, v.v ... Để biết chi tiết về format specifications see this.

69

Không chuỗi định dạng:

>> print 'Foo',0 
Foo 0 
+2

Thao tác này sẽ hoạt động tốt với bản in nhưng không thể gán cho biến dưới dạng chuỗi. Nó cho đối tượng Set. – specialscope

+1

Nó cũng dính vào một khoảng trống thừa giữa hai mục, trừ khi bạn sử dụng hàm v3 'print()' * * và đặt một số tham số của nó. – Levon

10

Python là một ngôn ngữ thú vị ở chỗ trong khi thường có một (hoặc hai) "rõ ràng" cách để thực hiện bất kỳ trao nhiệm vụ, tính linh hoạt vẫn tồn tại.

s = "string" 
i = 0 

print (s + repr(i)) 

Đoạn mã trên được viết bằng cú pháp Python3 nhưng dấu ngoặc đơn sau khi in luôn được cho phép (tùy chọn) cho đến khi phiên bản 3 bắt buộc.

Hy vọng điều này sẽ hữu ích.

Caitlin