Dalam dua tahun kebelakangan ini, saya telah menggunakan Python sebagai bahasa pengaturcaraan utama saya. Saya fikir mungkin ini sebab yang baik untuk "mendalam" seperti yang saya lakukan dalam Soalan JavaScript Tricky. beberapa soalan seterusnya ialah isu yang perlu saya tangani dalam pekerjaan semasa saya, yang lain diilhamkan oleh web.
Jadi adakah anda bersedia untuk membuat fikiran anda terpesona (daripada soalan Python)?
Notis 1!: Untuk setiap soalan, terdapat jawapan dengan penjelasan (pautan di bawah setiap item).
Notis 2!: Untuk setiap soalan fikirkan apa yang akan menjadi output.
Soalan 1
exapmle_dict = dict()
exapmle_dict.a = "string"
print(exapmle_dict)
Pergi ke jawapan 1
Soalan 2
class Json:
def __init__(self, *args, **kwargs):
import json
def print_dict_as_json(self, obj):
print(json.dumps(obj))
example_json = Json()
example_json.print_dict_as_json({"a": "string"})
Pergi ke jawapan 2
Soalan 3
def myFun(arg1, arg3, **kwargs):
for key, value in kwargs.items():
print("%s == %s" % (key, value))
my_dict = {'arg1':1, 'arg2': 2}
myFun(**my_dict, arg3=3)
Pergi ke jawapan 3
Soalan 4
def add_to_all_1(arr):
for i in range(len(arr)):
arr[i] +=1
def my_func():
arr = [1,2,3]
add_to_all_1(arr)
arr2 = arr
print(arr2)
my_func()
Pergi ke jawapan 4
Jika anda berkata:
{"a": "string"}
malangnya, anda salah, jawapannya ialah:
AttributeError: 'dict' object has no attribute 'a'
Jika anda menyukai saya dan datang dari javascript dahulu, kamus akses (objek dalam Javascript) bukan dengan titik seperti dalam Javascript, anda boleh mengakses hanya dengan [], dan di dalam kunci yang anda mahu tetapkan "a".
Kembali kepada soalan 1
Jika anda berkata:
{"a": "string"}
Anda salah lagi, jawapannya ialah:
... NameError: name 'json' is not define
Anda mungkin tahu perbezaan antara skop tempatan dan global dalam Python (jika tidak anda harus membaca ini: Skop Python). __init__ ialah fungsi , import berada di dalam skop tempatan jadi ia tidak tahu apa itu json. Anda boleh membetulkannya dengan mengimportnya secara global seperti ini:
import json class Json: def print_dict_as_json(self, obj): print(json.dumps(obj)) example_json = Json() example_json.print_dict_as_json({"a": "string"})
Atau dengan cara yang lebih maju:
class Json: import json as json def print_dict_as_json(self, obj): print(self.json.dumps(obj)) example_json = Json() example_json.print_dict_as_json({"a": "string"})
Anda boleh melihat menggunakan import dalam kelas untuk mendapatkan butiran lanjut.
Kembali ke soalan 2
Jika anda berkata:
arg2 == 2
Anda betul! Dalam Python, kita mempunyai 3 cara untuk meluluskan hujah:
def myFun(arg1): print(arg1) myFun('arg1')
def myFun(*arg1): print(*arg1) my_tuple = ('arg1', 'arg2') myFun(my_tuple)
Kembali kepada soalan 3
Jawapannya ialah:
[2, 3, 4]
Bagi sesetengah orang yang mengetahui skop dan tugasan, ia boleh kelihatan seperti soalan yang agak mudah. Bagi mereka yang tidak tahu, python menyimpan memori berubah-ubah sebagai rujukan, jadi dalam kes ini, arr akan menunjuk kepada rujukan dalam memori -> fungsi akan menukar nilai (tetapi masih rujukan yang sama) -> arr2 akan mendapat alamat rujukan arr tetapi selepas nilai diubah suai.
Kembali ke soalan 4
Terima kasih kerana membaca artikel ini. Saya harap anda menikmati dan belajar perkara baru. Jika anda mempunyai sebarang soalan atau cadangan, sila tinggalkan komen.
Atas ialah kandungan terperinci Soalan Sawa Rumit. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!