ตัวอย่างทับทิม:
name = "Spongebob Squarepants"
puts "Who lives in a Pineapple under the sea? \n#{name}."
การต่อสตริง Python ที่ประสบความสำเร็จนั้นดูเหมือนฉัน
ตัวอย่างทับทิม:
name = "Spongebob Squarepants"
puts "Who lives in a Pineapple under the sea? \n#{name}."
การต่อสตริง Python ที่ประสบความสำเร็จนั้นดูเหมือนฉัน
คำตอบ:
Python 3.6 จะเพิ่มการแก้ไขสตริงตัวอักษรที่คล้ายกับการแก้ไขสตริงของ Ruby เริ่มต้นด้วย Python เวอร์ชันนั้น (ซึ่งมีกำหนดจะวางจำหน่ายภายในสิ้นปี 2016) คุณจะสามารถรวมนิพจน์ใน "f-strings" เช่น
name = "Spongebob Squarepants"
print(f"Who lives in a Pineapple under the sea? {name}.")
ก่อนหน้า 3.6 สิ่งที่ใกล้เคียงที่สุดที่คุณสามารถทำได้คือ
name = "Spongebob Squarepants"
print("Who lives in a Pineapple under the sea? %(name)s." % locals())
%
ผู้ประกอบการสามารถใช้สำหรับสตริงการแก้ไขในหลาม ตัวถูกดำเนินการแรกคือสตริงที่จะถูกสอดแทรกที่สองสามารถมีชนิดที่แตกต่างกันรวมถึง "การแมป" ชื่อฟิลด์การแมปกับค่าที่จะถูกสอดแทรก ที่นี่ฉันใช้พจนานุกรมของตัวแปรโลคัลlocals()
เพื่อแม็พชื่อฟิลด์name
กับค่าเป็นตัวแปรโลคัล
รหัสเดียวกันโดยใช้.format()
วิธีการของ Python เวอร์ชันล่าสุดจะมีลักษณะเช่นนี้:
name = "Spongebob Squarepants"
print("Who lives in a Pineapple under the sea? {name!s}.".format(**locals()))
นอกจากนี้ยังมีstring.Template
ชั้นเรียน:
tmpl = string.Template("Who lives in a Pineapple under the sea? $name.")
print(tmpl.substitute(name="Spongebob Squarepants"))
%s
สำหรับสตริงและ%03d
สำหรับตัวเลขที่มีจำนวน 3 หลักด้วยศูนย์นำหน้า มันสามารถเขียนprint "%s has %03d" % ("Python", 2)
ได้ ตัวอย่างจากนั้นใช้ประโยชน์จากการวางคีย์การทำแผนที่ในวงเล็บหลังจาก%
ที่เป็นวิธีการให้ชื่อตัวแทนที่มีความหมายมากกว่าที่จะขึ้นอยู่กับการสั่งซื้อของพวกเขาในสตริง จากนั้นคุณส่งพจนานุกรมที่จับคู่ชื่อคีย์กับค่าของพจนานุกรม นั่นเป็นสาเหตุที่ Sven ใช้locals()
ฟังก์ชันที่คืนค่าพจน์ที่มีตัวแปรโลคัลทั้งหมดของคุณดังนั้นมันจะแม็พname
กับค่าของชื่อ
s
เป็นประเภทการแปลงได้เสมอPython สามารถแปลงอะไรก็ได้เป็นสตริง แต่แน่นอนว่าคุณจะสูญเสียความสามารถในการจัดรูปแบบพิเศษของประเภทการแปลงอื่น ๆ
ตั้งแต่ Python 2.6.X คุณอาจต้องการใช้:
"my {0} string: {1}".format("cool", "Hello there!")
%
ดำเนินการสำหรับการแก้ไขสตริงไม่ได้ถูกคัดค้านใน Python 3.x docs.python.org/dev/py3k/whatsnew/…ประกาศแผนการเลิกใช้%
เริ่มต้นใน 3.1 แต่สิ่งนี้ไม่เคยเกิดขึ้น
{}
ฉันสามารถตัดออก
ฉันได้พัฒนาinterpyแพคเกจที่จะช่วยให้การแก้ไขสตริงในหลาม
pip install interpy
เพียงแค่ติดตั้งผ่านทาง จากนั้นเพิ่มบรรทัด# coding: interpy
ที่จุดเริ่มต้นของไฟล์ของคุณ!
ตัวอย่าง:
#!/usr/bin/env python
# coding: interpy
name = "Spongebob Squarepants"
print "Who lives in a Pineapple under the sea? \n#{name}."
การแก้ไขสตริงของ Python คล้ายกับ printf () ของ C
ถ้าคุณลอง:
name = "SpongeBob Squarepants"
print "Who lives in a Pineapple under the sea? %s" % name
แท็ก%s
จะถูกแทนที่ด้วยname
ตัวแปร คุณควรดูที่แท็กฟังก์ชั่นการพิมพ์: http://docs.python.org/library/functions.html
print "First is %s, second is %s" % (var1, var2)
นี้:
สตริงการแก้ไขเป็นไปได้รวมกับงูหลาม 3.6 ตามที่ระบุใน PEP 498 คุณจะสามารถทำสิ่งนี้:
name = 'Spongebob Squarepants'
print(f'Who lives in a Pineapple under the sea? \n{name}')
โปรดทราบว่าฉันเกลียด Spongebob ดังนั้นการเขียนแบบนี้จึงเจ็บปวดเล็กน้อย :)
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)
การใช้งาน:
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: ประสิทธิภาพอาจเป็นปัญหา สิ่งนี้มีประโยชน์สำหรับสคริปต์โลคัลไม่ใช่สำหรับบันทึกการใช้งานจริง
duplicated:
สำหรับงูใหญ่ตัวเก่า (ทดสอบที่ 2.4) คำตอบอันดับต้นจะชี้ทาง คุณสามารถทำได้:
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()
และคุณจะได้รับ
d: 1 f: 1.1 s: s
Python 3.6 และใหม่กว่ามีการแก้ไขสตริงตัวอักษรโดยใช้ f-strings:
name='world'
print(f"Hello {name}!")
name
คือตัวแปรท้องถิ่นที่อยู่ในสตริงและใน Python คุณต้องส่งพจนานุกรมของตัวแปรโลคัลไปยัง formatter สตริงอย่างชัดเจนหากคุณต้องการใช้มัน