Saya telah memprogram dalam python selama beberapa tahun, namun, saya baru-baru ini menyadari bahwa banyak trik yang berguna dan momen menarik berlalu begitu saja, mungkin saya bukan satu-satunya, jadi saya memutuskan untuk mendaftarkannya di sini, saya berharap trik ini akan berguna bagi seseorang di tempat kerja atau akan membuat saya saling mengenal satu sama lain dengan bahasa ini lebih dekat.
Seperti dalam banyak bahasa dalam python, 1 setara dengan True, dan 0 adalah False, mis.
1 == True.
Tampaknya, dan apa yang salah dengan itu? Namun, ini memiliki beberapa efek samping yang terkait dengan fakta bahwa objek yang sama harus memiliki hash yang sama, sehingga Anda tidak akan dapat menjejalkan tombol 1 dan True ke dalam satu kamus.
>>> a = {1: "one", 0: "zero", True: "true", False: "false"}
Ini juga memungkinkan operasi berikut:
>>> print(2 * False + True)
Dalam contoh ini, string digunakan sebagai nilai kamus, namun, saya sering ingin menggunakannya sebagai kunci kamus, saya selalu kesal ketika membuat kamus menggunakan kurung kurawal, Anda perlu menentukan string dalam tanda kutip, saya ingin menghilangkannya, ini mungkin jika Anda membuat kamus melalui dict () konstruktor.
>>> {"one": 1, "two": 2, "three": 3} == dict(one=1, two=2, three=3)
Selain itu, tidak hanya kamus, tetapi juga set (set) dibuat menggunakan kurung kurawal.
>>> a = {1, 2, 3}
Untuk menggabungkan dua set, untuk beberapa alasan saya ingin menggunakan operator +, mungkin karena cara string digabungkan. Namun, python tidak mendukung operator ini untuk set. Tapi tentu saja, ini tidak berarti bahwa kita harus selalu menggunakan fungsi, pencipta mendekati masalah ini secara lebih sistematis dan menambahkan dukungan untuk operasi dasar pada set (bukan hanya serikat pekerja) ke bahasa dan
"menggantung" mereka pada operator logis .
a = {1, 2, 3} b = {0, 2, 4} print(a & b)
Melanjutkan percakapan tentang kamus, dimulai dengan versi 3.7, spesifikasi bahasa memastikan bahwa kamus mempertahankan urutan penyisipan elemen, OrderedDict tidak lagi diperlukan.
www.python.org/downloads/release/python-370mail.python.org/pipermail/python-dev/2017-December/151283.html d = dict(zero='Cero', one='Uno', two='Dos', three='Tres', four='Cuatro', five='Cinco', six='Seis', seven='Siete', eight='Ocho', night='Nueve') for index, (key, value) in enumerate(d.items()): print(f"{index} is {key} in England and {value} in Spain")
Perhatikan garis keluaran, ini dimulai dengan awalan f - ini adalah jenis garis khusus yang diperkenalkan dengan
python 3.6 .
Ada tiga jenis string dalam bahasa: reguler, ditunjukkan oleh tanda kutip tanpa awalan, mentah \ tidak diproses (mentah), di mana karakter khusus, seperti \ n, tidak diproses dan dimasukkan sebagai teks dan f-line sendiri.
Mereka diciptakan untuk menyederhanakan keluaran, python mendukung sejumlah besar metode keluaran:
print("result" + str(2))
Sekarang menambahkan lebih banyak dan f-line. Setiap variabel dari ruang lingkup tersedia di dalamnya, Anda dapat memanggil fungsi, mendapatkan elemen dengan kunci, di samping itu, mereka mendukung format string.
from math import pi result = 4 name = "user" print(f"{name:84s} pi= {pi:.2f}, result={result}, {name[2]}")
Mereka
lebih cepat dari semua metode output lainnya, jadi jika python3.6 tersedia untuk Anda, Anda disarankan untuk menggunakannya.
Salah satu potongan python paling keren - bukan objek dan primitif yang dikemas dan dibongkar di dalamnya, tetapi parameter dan koleksi.
def func(*argv, **kwargs)
Namun, ada satu kelemahan arsitektur dalam implementasinya:
- argv - tuple, nilainya tidak dapat diubah, nilainya tidak dapat ditambahkan atau dihapus
- kwargs adalah kamus yang bisa berubah, jadi caching tidak dimungkinkan
Kekurangannya, tentu saja, tidak besar, tetapi masih tidak menyenangkan bahwa Anda tidak dapat langsung mentransfer kwarg ke cache berbasis kamus, di sisi lain, jika Anda menambahkan daftar ke tuple, maka tuple seperti itu tidak dapat ditambahkan ke kamus juga.
Set juga dibuat berdasarkan tabel hash, yang berarti bahwa nilai harus hash, di samping itu, set itu sendiri adalah tipe yang bisa berubah dan tidak hash, ada tipe khusus frozenset - set yang tidak dapat diubah (jangan tanya kenapa harus dibutuhkan).
Mereka membahas pembuatan jenis frozendict, tetapi belum menambahkannya (walaupun sudah memiliki setidaknya satu aplikasi - sebagai kwargs). Untuk kamus yang tidak dapat diubah, namesuple harus
dibusungkan . Dan juga untuk catatan dan kelas-kelas sederhana.
Siapa di tahun-tahun sekolahnya murid menulis siklus untuk menampilkan nilai-nilai array dan marah tentang koma pada akhirnya, setiap kali ia memutuskan untuk mencetak atau menulis ulang menjadi cantik, dan hanya dalam 2-3 kursus ia belajar tentang metode bergabung? Atau hanya aku satu-satunya?
Salah satu fitur yang tidak menyenangkan dari metode join untuk string adalah bahwa ia hanya bekerja dengan elemen string, jika koleksi memiliki setidaknya satu non-string, Anda harus menggunakan ekspresi generator, yang tampaknya terlalu rumit sebagai solusi untuk tugas yang begitu sederhana, namun, ada cara untuk menyederhanakan output nilai daftar (tanpa tanda kurung) .
a = list(range(5)) print(" ".join(a))
Karena string juga merupakan koleksi, mereka juga dapat "digabungkan".
print('-'.join("hello"))
Pertimbangkan garis dari contoh sebelumnya.
print(" ".join(str(i) for i in a))
Ekspresi generator diteruskan ke fungsi gabungan tanpa tanda kurung, tanda kurung dapat dihilangkan untuk menyederhanakan membaca kode. Python menjaga ekspresi.
print(sum(i**2 for i in range(10)))
Selain itu, tanda kurung dapat dihilangkan saat membuat tupel:
article = "python", 2018, "LinearLeopard"
Tanda bintang juga bisa digunakan dalam deklarasi fungsi, jadi Anda bisa membuat parameter yang hanya bisa ditentukan
dengan kunci .
def sortwords(*wordlist, case_sensitive=False):
Anda dapat mengirimkan parameter sebanyak yang Anda suka tanpa takut salah satunya akan dianggap sebagai nilai parameter case_sensitive.
Itu mungkin dan begitu.
def func(first, second, *, kwonly):
Kami akan melihat lebih dekat bagaimana perbedaannya * berbeda dari * args.
def func(first, second, *, kwonly=True): print(first, second, kwonly) def func2(first, second, *args, kwonly=True): print(first, second, *args, kwonly) func(1)
Salah satu fitur menarik dikaitkan dengan parameter default: mereka dihitung pada tahap kompilasi modul menjadi bytecode, jadi lebih baik tidak menggunakan tipe yang bisa berubah di sana. Kami mendeklarasikan fungsi yang menambahkan elemen ke akhir daftar, jika argumen kedua dihilangkan, fungsi mengembalikan daftar baru yang hanya mengandung elemen ini.
def add_to(elem, collection=[]): collection.append(elem) return collection a = ["a", "c"] print(add_to("b", a))
Nilai default disimpan di bidang __defaults__, Anda dapat mengetahui apa yang ada di sana kapan saja.
print(add_to.__defaults__)
Karena argumen default (daftar kosong) dibuat pada saat program dimulai dan tidak diciptakan kembali setiap kali, kami mendapatkan perilaku ini.
Anda dapat memperbaiki perilaku ini jika Anda menjadikan nilai default sebagai tipe yang tidak dapat diubah, dan membuat daftar di badan fungsi:
def add_to(elem, collection=None): collection = collection or [] collection.append(elem) return collection
Perhatikan perintahnya
collection = collection or []
ini adalah analog yang lebih pendek (dan kurang jelas, meskipun tidak untuk semua orang)
collection = collection if collection else []
Tautkan ke bagian selanjutnya