Làm thế nào để tôi đặt một biến trong một chuỗi?


246

Tôi muốn chấm intthành một string. Đây là những gì tôi đang làm vào lúc này:

num = 40
plot.savefig('hanning40.pdf') #problem line

Tôi phải chạy chương trình cho nhiều số khác nhau, vì vậy tôi muốn thực hiện một vòng lặp. Nhưng việc chèn biến như thế này không hoạt động:

plot.savefig('hanning', num, '.pdf')

Làm cách nào để chèn một biến vào chuỗi Python?

Câu trả lời:


164
plot.savefig('hanning(%d).pdf' % num)

Các %nhà điều hành, khi sau một chuỗi, cho phép bạn chèn giá trị vào đó chuỗi thông qua mã định dạng (các %dtrong trường hợp này). Để biết thêm chi tiết, xem tài liệu Python:

https://docs.python.org/3/l Library / stdtypes.html#printf-style-opes-formatted


39
Lưu ý rằng %toán tử không được dùng trong Python 3.1. Cách ưa thích mới là sử dụng .format()phương pháp như được thảo luận trong PEP 3101 và được đề cập trong câu trả lời của Dan McDougall.
Chris Mueller

495

Ồ, nhiều, nhiều cách ...

Nối chuỗi:

plot.savefig('hanning' + str(num) + '.pdf')

Công cụ xác định chuyển đổi:

plot.savefig('hanning%s.pdf' % num)

Sử dụng tên biến cục bộ:

plot.savefig('hanning%(num)s.pdf' % locals()) # Neat trick

Sử dụng str.format():

plot.savefig('hanning{0}.pdf'.format(num)) # Note: This is the new preferred way

Sử dụng chuỗi f:

plot.savefig(f'hanning{num}.pdf') # added in Python 3.6

Sử dụng string.Template:

plot.savefig(string.Template('hanning${num}.pdf').substitute(locals()))

16
Để sử dụng toán tử chuỗi định dạng có nhiều đối số, người ta có thể sử dụng một tuple làm toán hạng : 'foo %d, bar %d' % (foo, bar).
fiedl

12
Loại thủ thuật gọn gàng của bạn cũng hoạt động với cú pháp định dạng mới:plot.savefig('hanning{num}s.pdf'.format(**locals()))
pix

13
Với việc giới thiệu chuỗi f trong Python 3.6, giờ đây có thể được viết dưới dạng plot.savefig(f'hanning{num}.pdf'). Tôi đã thêm một câu trả lời với thông tin này.
joelostblom

có vấn đề khi sử dụng locals () bên trong hàm gọi biến toàn cục; đã sử dụng% globalals () thay vì hoạt động
lobi

123

Với việc giới thiệu các chuỗi ký tự được định dạng (viết tắt là "chuỗi f") trong Python 3.6, giờ đây có thể viết điều này với cú pháp nhanh hơn:

>>> name = "Fred"
>>> f"He said his name is {name}."
'He said his name is Fred.'

Với ví dụ được đưa ra trong câu hỏi, nó sẽ trông như thế này

plot.savefig(f'hanning{num}.pdf')


17

Không chắc chắn chính xác tất cả những gì mã bạn đã đăng, nhưng để trả lời câu hỏi đặt ra trong tiêu đề, bạn có thể sử dụng + làm hàm concat chuỗi bình thường cũng như str ().

"hello " + str(10) + " world" = "hello 10 world"

Mong rằng sẽ giúp!


6
Trong khi câu trả lời này là các chuỗi xây dựng chính xác +nên được tránh vì nó cực kỳ tốn kém
slayton

6

Nói chung, bạn có thể tạo chuỗi bằng cách sử dụng:

stringExample = "someString " + str(someNumber)
print(stringExample)
plot.savefig(stringExample)

4

Nếu bạn muốn đặt nhiều giá trị vào chuỗi, bạn có thể sử dụng format

nums = [1,2,3]
plot.savefig('hanning{0}{1}{2}.pdf'.format(*nums))

Sẽ dẫn đến chuỗi hanning123.pdf. Điều này có thể được thực hiện với bất kỳ mảng.


3

Tôi có nhu cầu về phiên bản mở rộng này: thay vì nhúng một số duy nhất trong chuỗi, tôi cần tạo một loạt tên tệp có dạng 'file1.pdf', 'file2.pdf', v.v ... Đây là cách nó đã làm việc:

['file' + str(i) + '.pdf' for i in range(1,4)]

-1

Bạn chỉ cần chuyển số biến thành một chuỗi bằng cách sử dụng

str(num)
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.