Bingungkan teman pythoneer Anda dengan pertanyaan-pertanyaan ini

Tautan untuk Bagian-1 dari cerita ini —



1.) Semuanya adalah objek dengan Python! 🤨

Coba tebak hasilnya?

print(isinstance(object, type))
print(isinstance(type, object))
print(isinstance(type, type))
print(isinstance(object, object))

Jawaban: Benar, Benar, Benar, Benar

Ini karena semuanya merupakan objek dengan python. Semua tipe seperti int, str, dan objekadalah turunan dari kelas type yang merupakan objek karena semuanya adalah objek dengan python.

2.) fungsi jumlah() 😨

Coba tebak hasilnya dalam kasus ini?

print(sum(“”))
print(sum(“”, []))
print(sum(“”, {}))

Jawaban: 0, [], {}

Untuk memahami ini, mari kita lihat cara kerja sum()-

jumlah(dapat diubah, /, mulai=0)

Jumlah dimulai dan item dari iterable dari kiri ke kanan dan mengembalikan totalnya. Item yang dapat diubah biasanya berupa angka, dan nilai awal tidak boleh berupa string. Oleh karena itu, dalam semua kasus di atas, “” diperlakukan sebagai barisan kosong, oleh karena itu sum hanya akan mengembalikan argumen start sebagai hasil total.

3.) Python itu malas! 😪

Coba tebak hasilnya dalam kasus ini?

class follow:
   def func(self):
      return follow()
a = follow()
follow = int
print(a.func())

Jawaban: 0

Ini terjadi karena kode di dalam fungsi python hanya dijalankan saat dipanggil. Artinya semua NameErrors akan dimunculkan dan variabel akan digabungkan hanya ketika kita benar-benar memanggil metode tersebut. Oleh karena itu dalam kasus kami, selama definisi metode, Python memungkinkan kami mereferensikan kelas yang belum ditentukan. Namun, selama eksekusi, Python akan mengikat nama follow dari lingkup luar, yang berarti metode function akan mengembalikan yang baru dibuat contoh int.

Sedikit membingungkan bukan? 😅

4.) Kesalahan Atribut? 😏

Coba tebak hasilnya dalam kasus ini?

print(sum([a.imag
   for a in [
      0, 5, 10e9, float(‘inf’), float(‘nan’)
   ]
]))

Jawaban: 0,0

Anda pasti mengira ini akan memberikan error bukan? Itu tidak akan terjadi. Hal ini karena semua tipe numerik dalam Python seperti int, float dll.; diwarisi dari kelas objek dasar dan semuanya mengembalikan bagian nyata dan imajiner yang mencakup Infinitydan NaN juga.

5.) Dimana matematika tidak berfungsi lagi! 😵

Tebak hasilnya dalam kasus ini?

a=(1 << 53)+1
print(a+1.0 > a)

Jawaban: Salah

Sekarang penjelasannya akan panjang, jadi bersabarlah :)

Pertama, karena perilaku kontra-intuitif dari Aritmatika presisi sewenang-wenang(aritmatika panjang). Python mendukung bilangan bulat yang sangat besar dengan tipe long, tetapi batas presisi float di Python terbatas.

Bilangannya adalah 2⁵³+ 1 = 9007199254740993

Yang kedua adalah batas presisi float yang berarti tidak dapat sepenuhnya direpresentasikan sebagai float Python dan karenanya, untuk melakukan x + 1.0, python melemparkan ake float, membulatkannya menjadi 9007199254740992.0yang dapat diwakili oleh Python dengan mudah dan kemudian menambahkan 1.0ke dalamnya. Namun karena batas representasi yang sama, ini menyetelnya kembali ke 9007199254740992.0.

Yang ketiga disebabkan oleh aturan perbandingan. Tidak seperti bahasa lain, Python tidak memunculkan kesalahan untuk perbandingan float vs int dan juga tidak mencoba memasukkan kedua operan ke tipe yang sama. Sebaliknya, mereka membandingkan nilai numerik sebenarnya. Dan karena 9007199254740992.0 lebih rendah dari 9007199254740993, maka akan dicetak False.

wahwww! 😵‍💫

Pikiran Terakhir

Jadi, berapa banyak output yang Anda tebak dengan benar kali ini? Tepat di bagian komentar!

Jika Anda belum membaca Bagian 1 artikel ini, mohon jangan membenci saya jika Anda tidak menyukai python sekarang😂. Masih banyak lagi “perangkap” seperti ini di python, tapi menurut saya ini bagus karena akan membantu Anda memahami struktur bahasa internal dan juga untuk menghindari kasus penggunaan seperti itu dalam proyek Anda yang dapat menyebabkan kesalahan yang tidak terduga. Link part 1 artikel ini sudah dibagikan di awal, yuk disimak. Dan bagikan artikel luar biasa ini dengan Teman Pythoneer Anda.😄

Sampai jumpa di artikel saya berikutnya…