Saya baru-baru ini memiliki kesempatan untuk mendengarkan ceramah tentang praktik pemrograman C yang baik dan buruk. Di dalamnya, khususnya, topik decoding kode program yang
tampak lucu (
emotikon dalam C) tersentuh. Kemudian ada perdebatan tentang kelayakan menggunakan kode membingungkan tersebut untuk menguji keterampilan calon untuk posisi programmer selama wawancara. Perselisihan tidak menghasilkan konsensus.
Pertimbangkan pertanyaan yang mungkin tentang
emotikon selama wawancara untuk posisi yang menyiratkan pengetahuan tentang bahasa pemrograman Python.

Tantangan
Ada dua ungkapan:
_+_
_|_
Manakah dari dua ungkapan ini yang lebih cenderung menyebabkan kesalahan dan mengapa?
Catatan EkspresiPerlu dicatat bahwa ekspresi ini kurang dibaca, ekspresi seperti itu tidak disarankan untuk digunakan dalam kode kerja, tetapi hanya dapat digunakan sebagai teka-teki.
Anda juga harus ingat bahwa
emotikon dalam tugas tidak ditulis secara
python (tidak mematuhi standar gaya
PEP 8 ).
Solusi
Dalam Python, garis bawah bukanlah
kata kunci , oleh karena itu, secara umum, dapat digunakan untuk menetapkan nilai tertentu ke variabel.
Tugas dikurangi menjadi pertimbangan kasus kesalahan selama penambahan dan dengan "bitwise atau" (untuk singkatnya, hanya "atau") satu variabel. Yaitu untuk mencari tipe built-in Python (kelas) yang satu operasi diimplementasikan dan untuk mencari tipe built-in di mana operasi lain diimplementasikan.
Di konsol Python, mudah untuk memverifikasi bahwa ada nilai garis bawah sehingga:
Tidak ada kesalahan dalam mengevaluasi setiap ekspresi >>> _ = 10 >>> _+_ 20 >>> _ = 10 >>> _|_ 10
Tidak ada kesalahan dalam mengevaluasi ekspresi pertama >>> _ = '10' >>> _+_ '1010' >>> _ = '10' >>> _|_ Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for |: 'str' and 'str'
Tidak ada kesalahan dalam menghitung ekspresi kedua >>> _ = {1, 0} >>> _+_ Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'set' and 'set' >>> _|_ {0, 1}
Ada kesalahan dalam perhitungan setiap ekspresi >>> _ = {1: 0} >>> _+_ Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'dict' and 'dict' >>> _|_ Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for |: 'dict' and 'dict'
Keajaiban Python adalah bahwa implementasi penambahan, dan "atau", dan operator lain dalam apa yang disebut
"metode ajaib" yang dijelaskan untuk kelas yang diperlukan.
Sebagai tambahan, ini adalah metode
__add__
Untuk "atau," ini adalah metode
__or__
Nama setiap metode ajaib berisi garis bawah, dua di awal dan di akhir kata yang sesuai.
Menemukan informasi tentang kelas bawaan Python.Anda dapat mencoba menemukan informasi yang diperlukan dalam dokumentasi untuk tipe bawaan di situs web resmi Python:
https://docs.python.org/3.7/library/stdtypes.html .
Anda dapat mengeksekusi di terminal Python
>>> import builtins >>> help(builtins)
Saya lebih suka menggunakan dokumentasi versi Python yang saya gunakan saat ini, merujuk pada antarmuka web modul pydoc.
Untuk melakukan ini, pada prompt perintah, masukkan, misalnya:
python3 -m pydoc -p 3344
dan buka modul dokumentasi peramban
http: // localhost: 3344 / builtins.html .
Kelas bawaan yang menerapkan metode kami:
Sembilan kelas built-in mengimplementasikan operasi penjumlahan dan empat mengimplementasikan "atau".
Selain itu, Anda dapat mencoba untuk berspekulasi tentang frekuensi penggunaan kelas dasar dalam proyek nyata, tentang kelas non-dasar dan penerapan metode di atas untuk mereka. Ini kemungkinan akan dihargai secara positif selama wawancara.
Jawaban 1.Ekspresi kedua akan sering menyebabkan kesalahan.
Kemungkinan pertanyaan tambahan tentang garis bawah wawancara
Apa peran garis bawah dalam penamaan objek?
Jawaban 2.Garis bawah dapat digunakan untuk memisahkan kata-kata dengan
gaya penamaan entitas yang berbeda dengan Python :
- Saat memberi nama dalam huruf kecil
lower_case_with_underscores
- Saat memberi nama dalam huruf besar
UPPER_CASE_WITH_UNDERSCORES
Beberapa nama terbatas pada garis bawah
dicadangkan :
- Dengan garis bawah pada awal nama, itu tidak diimpor selama impor umum
from module import *
- Dengan dua garis bawah pada kedua sisi nama dianggap sistemik, tidak disarankan untuk menggunakan nama tersebut untuk tujuan lain
- Dengan dua garis bawah pada awal nama, itu dianggap pribadi (bukan publik) untuk kelas
Apa peran garis bawah tunggal?
Jawaban 3.Dalam juru bahasa, jika garis bawah tidak secara eksplisit digunakan sebagai variabel, itu akan menyimpan hasil dari tindakan bebas kesalahan terakhir yang ditampilkan di layar.
$ python3 Python 3.6.8 (default, Feb 14 2019, 22:09:48) [GCC 7.4.0] on cygwin Type "help", "copyright", "credits" or "license" for more information. >>> _ Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name '_' is not defined >>> 2 * 5 10 >>> _ 10 >>> _ = 1 >>> _ 1 >>> 2 * 5 10 >>> _ 1
Ini karena
sys.stdout lolos dengan
displayhook . Ambil contoh dari
dokumentasi resmi :
def displayhook(value): if value is None: return
Selain itu, satu garis bawah biasanya digunakan untuk kenyamanan
internalisasi .