Contoh Ruby:
name = "Spongebob Squarepants"
puts "Who lives in a Pineapple under the sea? \n#{name}."
Rangkaian string Python yang berhasil tampaknya cocok untuk saya.
Contoh Ruby:
name = "Spongebob Squarepants"
puts "Who lives in a Pineapple under the sea? \n#{name}."
Rangkaian string Python yang berhasil tampaknya cocok untuk saya.
Jawaban:
Python 3.6 akan menambahkan interpolasi string literal mirip dengan interpolasi string Ruby. Dimulai dengan versi Python (yang dijadwalkan akan dirilis pada akhir 2016), Anda akan dapat memasukkan ekspresi dalam "f-string", misalnya
name = "Spongebob Squarepants"
print(f"Who lives in a Pineapple under the sea? {name}.")
Sebelum ke 3.6, yang terdekat yang bisa Anda dapatkan adalah
name = "Spongebob Squarepants"
print("Who lives in a Pineapple under the sea? %(name)s." % locals())
The %
operator dapat digunakan untuk interpolasi string di Python. Operan pertama adalah string yang akan diinterpolasi, yang kedua dapat memiliki tipe yang berbeda termasuk "pemetaan", memetakan nama bidang dengan nilai yang akan diinterpolasi. Di sini saya menggunakan kamus variabel lokallocals()
untuk memetakan nama bidang name
ke nilainya sebagai variabel lokal.
Kode yang sama menggunakan .format()
metode versi Python terbaru akan terlihat seperti ini:
name = "Spongebob Squarepants"
print("Who lives in a Pineapple under the sea? {name!s}.".format(**locals()))
Ada juga string.Template
kelasnya:
tmpl = string.Template("Who lives in a Pineapple under the sea? $name.")
print(tmpl.substitute(name="Spongebob Squarepants"))
%s
untuk string dan %03d
untuk angka yang diisi hingga 3 digit dengan nol nol di depannya. Bisa saja ditulis print "%s has %03d" % ("Python", 2)
. Contoh tersebut kemudian menggunakan menempatkan kunci pemetaan dalam tanda kurung setelah %
yang merupakan cara untuk memberi nama penampung yang berarti daripada mengandalkan pesanan mereka dalam string. Anda kemudian melewati kamus yang memetakan nama-nama kunci dengan nilainya. Itu sebabnya Sven menggunakan locals()
fungsi yang mengembalikan dict yang berisi semua variabel lokal Anda sehingga akan memetakan name
ke nilai nama
s
sebagai tipe konversi - Python dapat mengonversi apa saja menjadi string. Tetapi tentu saja Anda akan kehilangan kemampuan format khusus dari jenis konversi lainnya.
Karena Python 2.6.X Anda mungkin ingin menggunakan:
"my {0} string: {1}".format("cool", "Hello there!")
%
operator untuk interpolasi string tidak ditinggalkan dalam Python 3.x. docs.python.org/dev/py3k/whatsnew/… mengumumkan rencana untuk mundur%
mulai dari 3.1, tetapi ini tidak pernah terjadi.
{}
dapat saya hilangkan.
Saya telah mengembangkan paket interpy , yang memungkinkan interpolasi string dengan Python .
Instal saja via pip install interpy
. Dan kemudian, tambahkan baris # coding: interpy
di awal file Anda!
Contoh:
#!/usr/bin/env python
# coding: interpy
name = "Spongebob Squarepants"
print "Who lives in a Pineapple under the sea? \n#{name}."
Interpolasi string Python mirip dengan printf C ()
Jika kamu mencoba:
name = "SpongeBob Squarepants"
print "Who lives in a Pineapple under the sea? %s" % name
Tag %s
akan diganti dengan name
variabel. Anda harus melihat ke tag fungsi cetak: http://docs.python.org/library/functions.html
print "First is %s, second is %s" % (var1, var2)
.
Interpolasi string akan dimasukkan dengan Python 3.6 sebagaimana ditentukan dalam PEP 498 . Anda akan dapat melakukan ini:
name = 'Spongebob Squarepants'
print(f'Who lives in a Pineapple under the sea? \n{name}')
Perhatikan bahwa saya membenci Spongebob, jadi menulis ini sedikit menyakitkan. :)
Anda juga dapat memiliki ini
name = "Spongebob Squarepants"
print "Who lives in a Pineapple under the sea? \n{name}.".format(name=name)
#
dicetak. Mereka hanya menggunakan sintaksis Ruby.
#
karakternya akan dicetak.
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)
Pemakaian:
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: kinerja bisa jadi masalah. Ini berguna untuk skrip lokal, bukan untuk log produksi.
Duplikat:
Untuk Python lama (diuji pada 2.4) solusi teratas menunjukkan jalannya. Kamu bisa melakukan ini:
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()
Dan kamu mengerti
d: 1 f: 1.1 s: s
Python 3.6 dan yang lebih baru memiliki interpolasi string literal menggunakan f-string:
name='world'
print(f"Hello {name}!")
name
adalah variabel lokal yang terletak di string, dan dengan Python Anda harus secara eksplisit meneruskan kamus variabel lokal ke pemformat string jika Anda ingin menggunakannya.