Ví dụ về Ruby:
name = "Spongebob Squarepants"
puts "Who lives in a Pineapple under the sea? \n#{name}."
Việc nối chuỗi Python thành công dường như dài dòng đối với tôi.
Ví dụ về Ruby:
name = "Spongebob Squarepants"
puts "Who lives in a Pineapple under the sea? \n#{name}."
Việc nối chuỗi Python thành công dường như dài dòng đối với tôi.
Câu trả lời:
Python 3.6 sẽ thêm phép nội suy chuỗi bằng chữ tương tự như phép nội suy chuỗi của Ruby. Bắt đầu với phiên bản Python đó (dự kiến được phát hành vào cuối năm 2016), bạn sẽ có thể bao gồm các biểu thức trong "chuỗi f", ví dụ:
name = "Spongebob Squarepants"
print(f"Who lives in a Pineapple under the sea? {name}.")
Trước 3.6, gần nhất bạn có thể nhận được điều này là
name = "Spongebob Squarepants"
print("Who lives in a Pineapple under the sea? %(name)s." % locals())
Các %
nhà điều hành có thể được sử dụng cho chuỗi suy bằng Python. Toán hạng thứ nhất là chuỗi được nội suy, chuỗi thứ hai có thể có các loại khác nhau bao gồm "ánh xạ", ánh xạ tên trường tới các giá trị được nội suy. Ở đây tôi đã sử dụng từ điển của các biến cục bộ locals()
để ánh xạ tên trường name
tới giá trị của nó như một biến cục bộ.
Mã tương tự sử dụng .format()
phương thức của các phiên bản Python gần đây sẽ trông như thế này:
name = "Spongebob Squarepants"
print("Who lives in a Pineapple under the sea? {name!s}.".format(**locals()))
Ngoài ra còn có string.Template
lớp:
tmpl = string.Template("Who lives in a Pineapple under the sea? $name.")
print(tmpl.substitute(name="Spongebob Squarepants"))
%s
cho một chuỗi và %03d
cho một số được đệm thành 3 chữ số với các số 0 đứng đầu. Nó chỉ có thể được viết print "%s has %03d" % ("Python", 2)
. Ví dụ sau đó sử dụng việc đặt khóa ánh xạ trong ngoặc sau %
đó là cách đặt tên giữ chỗ có ý nghĩa thay vì dựa vào thứ tự của chúng trong chuỗi. Sau đó, bạn chuyển một từ điển ánh xạ các tên chính đến giá trị của chúng. Đó là lý do tại sao Sven đang sử dụng locals()
hàm trả về một dict chứa tất cả các biến cục bộ của bạn để nó sẽ ánh xạ name
tới giá trị của tên
s
làm loại chuyển đổi - Python có thể chuyển đổi mọi thứ thành chuỗi. Nhưng tất nhiên bạn sẽ mất khả năng định dạng đặc biệt của các loại chuyển đổi khác.
Vì Python 2.6.X bạn có thể muốn sử dụng:
"my {0} string: {1}".format("cool", "Hello there!")
%
toán tử cho phép nội suy chuỗi không bị phản đối trong Python 3.x. docs.python.org/dev/py3k/whatsnew/ từ thông báo kế hoạch từ chối %
bắt đầu từ 3.1, nhưng điều này không bao giờ xảy ra.
{}
tôi có thể loại bỏ.
Tôi đã phát triển gói interpy , cho phép nội suy chuỗi trong Python .
Chỉ cần cài đặt nó qua pip install interpy
. Và sau đó, thêm dòng # coding: interpy
ở đầu tập tin của bạn!
Thí dụ:
#!/usr/bin/env python
# coding: interpy
name = "Spongebob Squarepants"
print "Who lives in a Pineapple under the sea? \n#{name}."
Nội suy chuỗi của Python tương tự như printf () của C
Nếu bạn cố gắng:
name = "SpongeBob Squarepants"
print "Who lives in a Pineapple under the sea? %s" % name
Thẻ %s
sẽ được thay thế bằng name
biến. Bạn nên xem qua các thẻ chức năng in: http://docs.python.org/l Library / fiances.html
print "First is %s, second is %s" % (var1, var2)
.
Nội suy chuỗi sẽ được bao gồm trong Python 3.6 như được chỉ định trong PEP 498 . Bạn sẽ có thể làm điều này:
name = 'Spongebob Squarepants'
print(f'Who lives in a Pineapple under the sea? \n{name}')
Lưu ý rằng tôi ghét SpPal, vì vậy viết nó hơi đau. :)
Bạn cũng có thể có cái này
name = "Spongebob Squarepants"
print "Who lives in a Pineapple under the sea? \n{name}.".format(name=name)
http://docs.python.org/2/l Library / chuỗi.html # formatstrings
#
sẽ được in. Họ chỉ đang sử dụng cú pháp Ruby.
#
nhân vật sẽ được in.
import inspect
def s(template, **kwargs):
"Usage: s(string, **locals())"
if not kwargs:
frame = inspect.currentframe()
try:
kwargs = frame.f_back.f_locals
finally:
del frame
if not kwargs:
kwargs = globals()
return template.format(**kwargs)
Sử dụng:
a = 123
s('{a}', locals()) # print '123'
s('{a}') # it is equal to the above statement: print '123'
s('{b}') # raise an KeyError: b variable not found
PS: hiệu suất có thể là một vấn đề. Điều này hữu ích cho các tập lệnh cục bộ, không phải cho nhật ký sản xuất.
Sao y:
Đối với Python cũ (đã thử nghiệm trên 2.4), giải pháp hàng đầu chỉ đường. Bạn có thể làm được việc này:
import string
def try_interp():
d = 1
f = 1.1
s = "s"
print string.Template("d: $d f: $f s: $s").substitute(**locals())
try_interp()
Và bạn nhận được
d: 1 f: 1.1 s: s
Python 3.6 và mới hơn có nội suy chuỗi ký tự bằng cách sử dụng chuỗi f:
name='world'
print(f"Hello {name}!")
name
một biến cục bộ nằm trong chuỗi và trong Python bạn phải chuyển từ điển của biến cục bộ sang bộ định dạng chuỗi nếu bạn muốn nó sử dụng chúng.