Apakah Anda menginginkan representasi string data yang dapat dibaca manusia? Atau apakah Anda ingin tampilan berorientasi byte dari memori yang berisi data?
Jeremy Brown
Hati-hati dengan jenis data yang ingin Anda ubah. Lihat jawaban di bawah
PythoNic
apakah setiap kelas / tipe dalam python selalu memungkinkan struntuk dipanggil tanpa kesalahan?
Charlie Parker
Jawaban:
128
myvariable = 4
mystring = str(myvariable) # '4'
juga, sebagai alternatif coba repr:
mystring = repr(myvariable) # '4'
Ini disebut "konversi" dalam python, dan cukup umum.
Saya tidak akan menggunakan repr (myvariable) - sering mengembalikan informasi tentang jenis kelas, alamat memori, dll. Ini lebih berguna untuk debugging. Gunakan str (myvariable) untuk konversi ke string dan unicode (variabel) untuk konversi ke unicode.
Abgan
3
Bagaimana dengan unicode? Sesuatu seperti str(u'ä')tidak akan berhasil. Namun repr(u'ä')akan berhasil.
Rouven B.
1
bagaimana dengan None dan False?
fredless
apakah setiap kelas / tipe dalam python selalu memungkinkan struntuk dipanggil tanpa kesalahan?
Charlie Parker
57
strdimaksudkan untuk menghasilkan representasi string dari data objek. Jika Anda menulis kelas Anda sendiri dan ingin strbekerja untuk Anda, tambahkan:
def__str__(self):return"Some descriptive string"
print str(myObj)akan menelepon myObj.__str__().
repradalah metode serupa, yang umumnya menghasilkan informasi tentang info kelas. Untuk sebagian besar objek perpustakaan inti, reprmenghasilkan nama kelas (dan terkadang beberapa informasi kelas) di antara tanda kurung sudut. reprakan digunakan, misalnya, dengan hanya mengetik objek Anda ke panel interaksi Anda, tanpa menggunakan printatau apa pun.
Anda dapat menentukan perilaku objek reprAnda sendiri seperti Anda dapat mendefinisikan perilaku str:
def__repr__(self):return"Some descriptive string"
>>> myObjdi panel interaksi Anda, atau repr(myObj), akan menghasilkanmyObj.__repr__()
Mungkin benar bahwa sebagian besar objek perpustakaan inti dengan persentase mentah mengembalikan object.__repr__representasi kurung sudut-gaya, tetapi banyak yang paling umum digunakan tidak. Aturan praktis untuk repradalah bahwa jika masuk akal untuk kembali kode Python yang dapat dievaluasi untuk menghasilkan objek yang sama, melakukan itu, seperti str, frozenset, dan sebagian besar builtin lain lakukan, tetapi jika tidak, menggunakan sudut-braket formulir untuk memastikan bahwa apa yang Anda kembalikan tidak mungkin disalahartikan sebagai repr yang dapat dibaca manusia-dan-dapat dievaluasi-sebagai-sumber.
abarnert
(Tentu saja beberapa builtin melanggar aturan umum itu — a listyang menyertakan dirinya sendiri mengembalikan sesuatu yang tidak hanya terlihat seperti tetapi juga kode yang dapat dievaluasi, yang mengevaluasi ke hal yang salah — tetapi pengembang inti tidak pernah menganggapnya sebagai lisensi untuk memperluas yang sama perilaku ke stdlib.)
abarnert
apakah setiap kelas / tipe dalam python selalu memungkinkan struntuk dipanggil tanpa kesalahan?
Saya melihat semua jawaban merekomendasikan penggunaan str(object). Ini mungkin gagal jika objek Anda memiliki lebih dari karakter ascii dan Anda akan melihat kesalahan sepertiordinal not in range(128) . Ini adalah kasus saya ketika saya mengonversi daftar string dalam bahasa selain bahasa Inggris
Saya menyelesaikannya dengan menggunakan unicode(object)
di Python 3.0 dan seterusnya, str (object) melakukan unicode secara default
dmjalund
apakah setiap kelas / tipe dalam python selalu memungkinkan struntuk dipanggil tanpa kesalahan?
Charlie Parker
13
str(object) akan melakukan triknya.
Jika Anda ingin mengubah cara objek dirangkai, tentukan __str__(self)metode untuk kelas objek. Metode tersebut harus mengembalikan str atau objek unicode.
Metode mana yang efisien? str(any_var)atauany_var.__str__()
Kedar.Aitawdekar
@ Kedar.Aitawdekar: Meskipun ada perbedaan yang mencolok dalam waktu eksekusi (yang saya ragu, tapi saya mendorong Anda untuk menyimpannya menggunakan timeitmodul), Anda harus menggunakan str(any_var)karena lebih mudah dibaca oleh manusia dan memungkinkan untuk mendapatkan keuntungan dari kasus-kasus ketika any_varmendefinisikan __repr__()tetapi tidak t mendefinisikan __str__().
Abgan
Terima kasih untuk balasan Anda.
Kedar.Aitawdekar
apakah setiap kelas / tipe dalam python selalu memungkinkan struntuk dipanggil tanpa kesalahan?
Kembalikan string yang berisi representasi objek yang dapat dicetak dengan baik. Untuk string, ini mengembalikan string itu sendiri. Perbedaan dengan repr (object) adalah bahwa str (object) tidak selalu berusaha untuk mengembalikan string yang dapat diterima eval (); tujuannya adalah mengembalikan string yang dapat dicetak. Jika tidak ada argumen yang diberikan, kembalikan string kosong, ''.
Berhati-hatilah jika Anda benar-benar ingin "mengubah" tipe data. Seperti dalam kasus lain (misalnya mengubah iterator dalam satu forlingkaran) ini mungkin memunculkan perilaku yang tidak terduga:
str(var)
? apakah itu yang kamu cari?str
untuk dipanggil tanpa kesalahan?Jawaban:
myvariable = 4 mystring = str(myvariable) # '4'
juga, sebagai alternatif coba repr:
mystring = repr(myvariable) # '4'
Ini disebut "konversi" dalam python, dan cukup umum.
sumber
str(u'ä')
tidak akan berhasil. Namunrepr(u'ä')
akan berhasil.str
untuk dipanggil tanpa kesalahan?str
dimaksudkan untuk menghasilkan representasi string dari data objek. Jika Anda menulis kelas Anda sendiri dan inginstr
bekerja untuk Anda, tambahkan:def __str__(self): return "Some descriptive string"
print str(myObj)
akan meneleponmyObj.__str__()
.repr
adalah metode serupa, yang umumnya menghasilkan informasi tentang info kelas. Untuk sebagian besar objek perpustakaan inti,repr
menghasilkan nama kelas (dan terkadang beberapa informasi kelas) di antara tanda kurung sudut.repr
akan digunakan, misalnya, dengan hanya mengetik objek Anda ke panel interaksi Anda, tanpa menggunakanprint
atau apa pun.Anda dapat menentukan perilaku objek
repr
Anda sendiri seperti Anda dapat mendefinisikan perilakustr
:def __repr__(self): return "Some descriptive string"
>>> myObj
di panel interaksi Anda, ataurepr(myObj)
, akan menghasilkanmyObj.__repr__()
sumber
object.__repr__
representasi kurung sudut-gaya, tetapi banyak yang paling umum digunakan tidak. Aturan praktis untukrepr
adalah bahwa jika masuk akal untuk kembali kode Python yang dapat dievaluasi untuk menghasilkan objek yang sama, melakukan itu, sepertistr
,frozenset
, dan sebagian besar builtin lain lakukan, tetapi jika tidak, menggunakan sudut-braket formulir untuk memastikan bahwa apa yang Anda kembalikan tidak mungkin disalahartikan sebagai repr yang dapat dibaca manusia-dan-dapat dievaluasi-sebagai-sumber.list
yang menyertakan dirinya sendiri mengembalikan sesuatu yang tidak hanya terlihat seperti tetapi juga kode yang dapat dievaluasi, yang mengevaluasi ke hal yang salah — tetapi pengembang inti tidak pernah menganggapnya sebagai lisensi untuk memperluas yang sama perilaku ke stdlib.)str
untuk dipanggil tanpa kesalahan?__str__
adalah fungsi yang diwarisi dari kelas objek, yang merupakan root untuk semua kelas lain dengan Python. docs.python.org/3/reference/datamodel.html#object.__str__Saya melihat semua jawaban merekomendasikan penggunaan
str(object)
. Ini mungkin gagal jika objek Anda memiliki lebih dari karakter ascii dan Anda akan melihat kesalahan sepertiordinal not in range(128)
. Ini adalah kasus saya ketika saya mengonversi daftar string dalam bahasa selain bahasa InggrisSaya menyelesaikannya dengan menggunakan
unicode(object)
sumber
str
untuk dipanggil tanpa kesalahan?str(object)
akan melakukan triknya.Jika Anda ingin mengubah cara objek dirangkai, tentukan
__str__(self)
metode untuk kelas objek. Metode tersebut harus mengembalikan str atau objek unicode.sumber
str(any_var)
atauany_var.__str__()
timeit
modul), Anda harus menggunakanstr(any_var)
karena lebih mudah dibaca oleh manusia dan memungkinkan untuk mendapatkan keuntungan dari kasus-kasus ketikaany_var
mendefinisikan__repr__()
tetapi tidak t mendefinisikan__str__()
.str
untuk dipanggil tanpa kesalahan?Gunakan
str
built-in:Contoh:
>>> str(1) '1' >>> str(1.0) '1.0' >>> str([]) '[]' >>> str({}) '{}' ...
Dari dokumentasi:
sumber
str
untuk dipanggil tanpa kesalahan?Dengan
str(x)
. Namun, setiap tipe data dapat menentukan konversi stringnya sendiri, jadi ini mungkin bukan yang Anda inginkan.sumber
Anda bisa menggunakan
%s
seperti di bawah ini>>> "%s" %([]) '[]'
sumber
Cukup gunakan
str
- misalnya:>>> str([]) '[]'
sumber
Gunakan pemformatan:
"%s" % (x)
Contoh:
x = time.ctime(); str = "%s" % (x); print str
Output: Kam 11 Jan 20:40:05 2018
sumber
Berhati-hatilah jika Anda benar-benar ingin "mengubah" tipe data. Seperti dalam kasus lain (misalnya mengubah iterator dalam satu
for
lingkaran) ini mungkin memunculkan perilaku yang tidak terduga:>> dct = {1:3, 2:1} >> len(str(dct)) 12 >> print(str(dct)) {1: 31, 2: 0} >> l = ["all","colours"] >> len(str(l)) 18
sumber