Jadi namanya xterlampir pada 'foo'string. Ketika Anda menelepon misalnya repr(x), juru bahasa menempatkan 'foo'alih-alih xdan kemudian memanggil repr('foo').
>>> repr(x)"'foo'">>> x.__repr__()"'foo'"
reprbenar-benar memanggil metode ajaib __repr__dari x, yang memberikan string yang berisi representasi dari nilai 'foo'ditugaskan untuk x. Jadi itu kembali 'foo'ke dalam string yang ""menghasilkan "'foo'". Idenya repradalah untuk memberikan string yang berisi serangkaian simbol yang dapat kita ketik dalam juru bahasa dan mendapatkan nilai yang sama yang dikirim sebagai argumen repr.
>>> eval("'foo'")'foo'
Ketika kita menelepon eval("'foo'"), itu sama seperti kita mengetik 'foo'penerjemah. Itu karena kami langsung mengetik konten string luar ""di penerjemah.
>>> eval('foo')Traceback(most recent call last):File"<pyshell#5>", line 1,in<module>
eval('foo')File"<string>", line 1,in<module>NameError: name 'foo'isnot defined
Jika kita memanggil eval('foo'), itu sama seperti kita mengetik foopenerjemah. Tetapi tidak ada foovariabel yang tersedia dan pengecualian muncul.
>>> str(x)'foo'>>> x.__str__()'foo'>>>
strhanya representasi string dari objek (ingat, xvariabel merujuk ke 'foo'), jadi fungsi ini mengembalikan string.
>>> str(5)'5'
Representasi string dari integer 5adalah '5'.
>>> str('foo')'foo'
Dan representasi string dari string 'foo'adalah string yang sama 'foo'.
Bisakah Anda juga memberi tahu kami beberapa kasus penggunaan saat seseorang harus menggunakan fungsi repr. Saya tidak dapat memahami hal itu
gaurav parashar
14
Umpan balik yang Anda dapatkan dari interpreter interaktif reprjuga digunakan . Saat Anda mengetikkan ekspresi (biarkan saja expr), pada dasarnya juru bahasa melakukannya result = expr; if result is not None: print repr(result). Jadi baris kedua dalam contoh Anda adalah memformat string fooke dalam representasi yang Anda inginkan ( 'foo'). Dan kemudian penerjemah menciptakan represensi dari itu , meninggalkan Anda dengan tanda kutip ganda.
Mengapa ketika saya menggabungkan% r dengan kutip ganda dan kutip tunggal lolos dan mencetaknya, ia mencetaknya seperti saya menulisnya dalam file .py saya tetapi tidak dengan cara yang ingin saya lihat?
Saya tidak yakin apa yang Anda tanyakan di sini. Teks single ' and double " quotes, ketika dijalankan melalui repr, termasuk lolos untuk satu jenis kutipan. Tentu saja, jika tidak, string tersebut tidak akan menjadi string literal yang sah menurut aturan Python. Itulah tepatnya yang Anda minta dengan menelepon repr.
Perhatikan juga bahwa eval(repr(x)) == xanalogi ini tidak dimaksudkan secara literal. Ini adalah perkiraan dan berlaku untuk sebagian besar (semua?) Tipe bawaan, tetapi yang utama adalah Anda mendapatkan ide yang cukup bagus tentang jenis dan "nilai" logis dari melihat reproutput.
Awalnya, itu benar-benar itu dimaksudkan untuk menjadi literal: setiap nilai ini reprharus berupa sesuatu yang dapat dikirimkan ke eval(atau disalin dan disisipkan ke dalam kode sumber Anda) untuk menghasilkan nilai yang sama, atau sesuatu yang akan menaikkan SyntaxError ketika Anda mencoba yang (biasanya yang <…>gaya yang dihasilkan oleh object.__repr__). Itu secara bertahap melunakkan selama bertahun-tahun, dan dengan 2,7 dan 3.x itu benar "untuk banyak jenis", dan ada pengecualian bahkan di stdlib (misalnya, namedtuplejenis yang dibuat sebagai lokal akan memberi Anda reprAnda bisa ' t eval), tapi itu ide aslinya.
abarnert
7
str () digunakan untuk membuat output untuk pengguna akhir sementara repr () digunakan untuk pengembangan debuggin. Dan itu mewakili resmi objek.
1) Hasil dari repr('foo')adalah string'foo' . Di kulit Python Anda, hasil dari ekspresi juga dinyatakan sebagai representasi, jadi Anda pada dasarnya melihat repr(repr('foo')).
2) evalmenghitung hasil ekspresi. Hasilnya selalu berupa nilai (seperti angka, string, atau objek). Beberapa variabel dapat merujuk ke nilai yang sama, seperti pada:
x ='foo'
y = x
x dan y sekarang merujuk pada nilai yang sama.
3) Saya tidak tahu apa yang Anda maksud di sini. Bisakah Anda memposting contoh, dan apa yang ingin Anda lihat?
Anda tidak beralih fooke bazfungsi. foohanya nama yang digunakan untuk mewakili nilai, dalam hal ini 'bar', dan nilai tersebut diteruskan ke bazfungsi.
Umpan balik yang Anda dapatkan dari interpreter interaktif
repr
juga digunakan . Saat Anda mengetikkan ekspresi (biarkan sajaexpr
), pada dasarnya juru bahasa melakukannyaresult = expr; if result is not None: print repr(result)
. Jadi baris kedua dalam contoh Anda adalah memformat stringfoo
ke dalam representasi yang Anda inginkan ('foo'
). Dan kemudian penerjemah menciptakanrepr
esensi dari itu , meninggalkan Anda dengan tanda kutip ganda.Saya tidak yakin apa yang Anda tanyakan di sini. Teks
single ' and double " quotes
, ketika dijalankan melaluirepr
, termasuk lolos untuk satu jenis kutipan. Tentu saja, jika tidak, string tersebut tidak akan menjadi string literal yang sah menurut aturan Python. Itulah tepatnya yang Anda minta dengan meneleponrepr
.Perhatikan juga bahwa
eval(repr(x)) == x
analogi ini tidak dimaksudkan secara literal. Ini adalah perkiraan dan berlaku untuk sebagian besar (semua?) Tipe bawaan, tetapi yang utama adalah Anda mendapatkan ide yang cukup bagus tentang jenis dan "nilai" logis dari melihatrepr
output.sumber
repr
harus berupa sesuatu yang dapat dikirimkan keeval
(atau disalin dan disisipkan ke dalam kode sumber Anda) untuk menghasilkan nilai yang sama, atau sesuatu yang akan menaikkan SyntaxError ketika Anda mencoba yang (biasanya yang<…>
gaya yang dihasilkan olehobject.__repr__
). Itu secara bertahap melunakkan selama bertahun-tahun, dan dengan 2,7 dan 3.x itu benar "untuk banyak jenis", dan ada pengecualian bahkan di stdlib (misalnya,namedtuple
jenis yang dibuat sebagai lokal akan memberi Andarepr
Anda bisa ' teval
), tapi itu ide aslinya.str () digunakan untuk membuat output untuk pengguna akhir sementara repr () digunakan untuk pengembangan debuggin. Dan itu mewakili resmi objek.
Contoh:
Dari output kita melihat bahwa repr () menunjukkan representasi resmi objek date.
sumber
1) Hasil dari
repr('foo')
adalah string'foo'
. Di kulit Python Anda, hasil dari ekspresi juga dinyatakan sebagai representasi, jadi Anda pada dasarnya melihatrepr(repr('foo'))
.2)
eval
menghitung hasil ekspresi. Hasilnya selalu berupa nilai (seperti angka, string, atau objek). Beberapa variabel dapat merujuk ke nilai yang sama, seperti pada:x dan y sekarang merujuk pada nilai yang sama.
3) Saya tidak tahu apa yang Anda maksud di sini. Bisakah Anda memposting contoh, dan apa yang ingin Anda lihat?
sumber
Kapan kamu berkata
Anda tidak beralih
foo
kebaz
fungsi.foo
hanya nama yang digunakan untuk mewakili nilai, dalam hal ini'bar'
, dan nilai tersebut diteruskan kebaz
fungsi.sumber