Penjelasan tugas python dengan wawancara kerja

Salut, orang Khabrovit! Untuk mengantisipasi peluncuran utas baru pada kursus "Pengembang web dengan Python" kami ingin membagikan terjemahan baru yang bermanfaat. Ayo pergi!



Setelah pergi ke beberapa wawancara lagi dan lulus tugas tes, saya perhatikan bahwa pewawancara menyukai tugas-tugas seperti berikut.

def f(x, l=[]): for i in range(x): l.append(i * i) return l >>> f(2) >>> f(3, [0, 1, 2]) >>> f(3) 


Pertanyaan: Apa yang akan dihasilkan oleh kode ini?

Output dari dua baris pertama cukup jelas, tetapi hasil dari baris ketiga f(3) tampaknya tidak mudah bagi saya. Mari kita lihat apa yang terjadi setelah fungsi f diinisialisasi. Untuk menjalankan kode ini, saya akan menggunakan IPython .

 >>> f <function __main__.f(x, l=[])> >>> f.__defaults__ ([],) 


Daftar kosong yang kita lihat dari hasil eksekusi f.__defaults__ adalah variabel l dalam kode fungsi.

 >>> f(2) [0, 1] 


Tidak ada yang istimewa.

 >>> f <function __main__.f(x, l=[0, 1])> >>> f.__defaults__ ([0, 1],) 


Namun! Sekarang kita melihat bahwa variabel l memiliki nilai [0, 1] karena variabilitas objek daftar dalam Python dan meneruskan argumen fungsi sebagai referensi.

 >>> f(3, [0, 1, 2]) [0, 1, 2, 0, 1, 4] >>> f <function __main__.f(x, l=[0, 1])> 


Tidak ada yang istimewa juga. Hanya melewatkan objek list sebagai variabel l .

 >>> f(3) [0, 1, 0, 1, 4] >>> f <function __main__.f(x, l=[0, 1, 0, 1, 4])> 


Dan sekarang yang paling menarik. Ketika Anda menjalankan f(3) , Python tidak menggunakan daftar kosong yang didefinisikan dalam kode fungsi, ia menggunakan variabel l dengan nilai-nilai dari f.__defaults__ ([0, 1]) .

PS

Jika Anda memerlukan fungsi yang menggunakan daftar kosong setelah setiap panggilan, Anda harus menggunakan sesuatu seperti ini (setel nilai 'l' ke 'None' ).

 def f(x, l=None): if l is None: l = [] for i in range(x): l.append(i * i) return l >>> f(2) [0, 1] >>> f(3, [0, 1, 2]) [0, 1, 2, 0, 1, 4] >>> f(3) [0, 1, 4] 


Kesimpulan


Jadi saya membuat salah satu tugas tes paling populer untuk wawancara. Posting ini dimaksudkan untuk menunjukkan bahwa Anda tidak selalu dapat mengandalkan intuisi Anda, seperti yang saya lakukan pada saya sendiri :-).

Kami berharap terjemahan ini bermanfaat bagi Anda. Secara tradisional, kami menunggu komentar dan melihat Anda di kursus .

Source: https://habr.com/ru/post/id459518/


All Articles