Cara menggunakan python response ok
Selain pernyataan Show
4.1. Pernyataan if¶Mungkin tipe pernyataan yang paling terkenal adalah pernyataan >>> x = int(input("Please enter an integer: ")) Please enter an integer: 42 >>> if x < 0: ... x = 0 ... print('Negative changed to zero') ... elif x == 0: ... print('Zero') ... elif x == 1: ... print('Single') ... else: ... print('More') ... More Mungkin ada nol atau lebih bagian
If you're comparing the same value to several constants, or checking for specific types or attributes, you may also find the 4.2. Pernyataan for¶Pernyataan >>> # Measure some strings: ... words = ['cat', 'window', 'defenestrate'] >>> for w in words: ... print(w, len(w)) ... cat 3 window 6 defenestrate 12 Kode yang memodifikasi koleksi collection sambil mengulangi koleksi yang sama bisa sulit untuk diperbaiki. Sebagai gantinya, biasanya lebih mudah untuk mengulang salinan koleksi atau membuat koleksi baru: # Create a sample collection users = {'Hans': 'active', 'Éléonore': 'inactive', '景太郎': 'active'} # Strategy: Iterate over a copy for user, status in users.copy().items(): if status == 'inactive': del users[user] # Strategy: Create a new collection active_users = {} for user, status in users.items(): if status == 'active': active_users[user] = status 4.3. Fungsi range()¶Jika Anda perlu mengulangi urutan angka, fungsi bawaan
>>> for i in range(5): ... print(i) ... 0 1 2 3 4 Titik akhir yang diberikan tidak pernah menjadi bagian dari urutan yang dihasilkan; >>> list(range(5, 10)) [5, 6, 7, 8, 9] >>> list(range(0, 10, 3)) [0, 3, 6, 9] >>> list(range(-10, -100, -30)) [-10, -40, -70] Untuk beralih pada indeks urutan, Anda dapat menggabungkan >>> a = ['Mary', 'had', 'a', 'little', 'lamb'] >>> for i in range(len(a)): ... print(i, a[i]) ... 0 Mary 1 had 2 a 3 little 4 lamb Dalam kebanyakan kasus seperti itu, bagaimanapun, lebih mudah untuk menggunakan fungsi
Hal aneh terjadi jika Anda hanya mencetak rentang range: >>> range(10) range(0, 10) Dalam banyak hal objek dikembalikan oleh Kami mengatakan bahwa objek seperti itu adalah iterable, yaitu, cocok sebagai target untuk fungsi dan konstruksi yang
mengharapkan sesuatu dari mana mereka dapat memperoleh item berturut-turut sampai pasokan habis. Kita telah melihat bahwa pernyataan >>> sum(range(4)) # 0 + 1 + 2 + 3 6 Later we will see more functions that return
iterables and take iterables as arguments. In chapter Struktur Data, we will discuss in more detail about 4.4. Pernyataan break dan continue, dan else Klausa pada Perulangan Loops¶Pernyataan Pernyataan perulangan loop mungkin memiliki klausa >>> for n in range(2, 10): ... for x in range(2, n): ... if n % x == 0: ... print(n, 'equals', x, '*', n//x) ... break ... else: ... # loop fell through without finding a factor ... print(n, 'is a prime number') ... 2 is a prime number 3 is a prime number 4 equals 2 * 2 5 is a prime number 6 equals 2 * 3 7 is a prime number 8 equals 2 * 4 9 equals 3 * 3 (Ya, ini adalah kode yang benar. Perhatikan baik-baik: klausul Ketika digunakan dengan sebuah perulangan, klausa Pernyataan >>> for num in range(2, 10): ... if num % 2 == 0: ... print("Found an even number", num) ... continue ... print("Found an odd number", num) ... Found an even number 2 Found an odd number 3 Found an even number 4 Found an odd number 5 Found an even number 6 Found an odd number 7 Found an even number 8 Found an odd number 9 4.5. Pernyataan pass¶Pernyataan >>> while True: ... pass # Busy-wait for keyboard interrupt (Ctrl+C) ... Ini biasanya digunakan untuk membuat kelas minimal: >>> class MyEmptyClass: ... pass ... Tempat lain >>> def initlog(*args): ... pass # Remember to implement this! ... 4.6. match Statements¶A The simplest form compares a subject value against one or more literals: def http_error(status): match status: case 400: return "Bad request" case 404: return "Not found" case 418: return "I'm a teapot" case _: return "Something's wrong with the internet" Note the last block: the "variable name" You can combine several literals in a single pattern using case 401 | 403 | 404: return "Not allowed" Patterns can look like unpacking assignments, and can be used to bind variables: # point is an (x, y) tuple match point: case (0, 0): print("Origin") case (0, y): print(f"Y={y}") case (x, 0): print(f"X={x}") case (x, y): print(f"X={x}, Y={y}") case _: raise ValueError("Not a point") Study that one carefully! The first pattern has two literals, and can be thought of as an extension of the literal pattern shown above. But the next two patterns combine a literal and a variable, and the variable binds a value from the subject
( If you are using classes to structure your data you can use the class name followed by an argument list resembling a constructor, but with the ability to capture attributes into variables: class Point: x: int y: int def where_is(point): match point: case Point(x=0, y=0): print("Origin") case Point(x=0, y=y): print(f"Y={y}") case Point(x=x, y=0): print(f"X={x}") case Point(): print("Somewhere else") case _: print("Not a point") You can use positional parameters with some builtin classes that provide an ordering for their attributes (e.g. dataclasses). You
can also define a specific position for attributes in patterns by setting the Point(1, var) Point(1, y=var) Point(x=1, y=var) Point(y=var, x=1) A recommended way to read patterns is to look at them as an extended form of what you would put on the left of an assignment, to understand which variables would be set to what. Only the standalone names (like Patterns can be arbitrarily nested. For example, if we have a short list of points, we could match it like this: match points: case []: print("No points") case [Point(0, 0)]: print("The origin") case [Point(x, y)]: print(f"Single point {x}, {y}") case [Point(0, y1), Point(0, y2)]: print(f"Two on the Y axis at {y1}, {y2}") case _: print("Something else") We can add an match point: case Point(x, y) if x == y: print(f"Y=X at {x}") case Point(x, y): print(f"Not on the diagonal") Several other key features of this statement:
For a more detailed explanation and additional examples, you can look into PEP 636 which is written in a tutorial format. 4.7. Mendefinisikan Fungsi¶Kita dapat membuat fungsi yang menulis seri Fibonacci ke batas acak arbitrary: >>> def fib(n): # write Fibonacci series up to n ... """Print a Fibonacci series up to n.""" ... a, b = 0, 1 ... while a < n: ... print(a, end=' ') ... a, b = b, a+b ... print() ... >>> # Now call the function we just defined: ... fib(2000) 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 Kata kunci Pernyataan pertama dari tubuh fungsi secara opsional dapat berupa string literal; string literal ini adalah string dokumentasi fungsi, atau docstring. (Lebih lanjut tentang docstring dapat ditemukan di bagian String Dokumentasi.) Ada alat yang menggunakan docstring untuk secara otomatis menghasilkan dokumentasi online atau cetak, atau untuk membiarkan pengguna menelusuri kode secara interaktif; itu praktik yang baik untuk memasukkan dokumen dalam kode yang Anda tulis, jadi biasakan seperti itu. execution dari suatu fungsi memperkenalkan tabel simbol baru yang digunakan untuk variabel lokal dari fungsi tersebut. Lebih tepatnya, semua tugas variabel dalam suatu fungsi menyimpan nilai dalam tabel simbol lokal; sedangkan referensi variabel pertama-tama terlihat pada tabel simbol lokal, kemudian pada tabel simbol lokal lampiran enclosing fungsi, kemudian pada tabel simbol global, dan akhirnya pada tabel nama bawaan.
Dengan demikian, variabel global dan variabel lampiran enclosing fungsi tidak dapat secara langsung menetapkan nilai dalam suatu fungsi (kecuali, untuk variabel global, disebutkan dalam pernyataan The actual parameters (arguments) to a function call are introduced in the local symbol table of the called function when it is called; thus, arguments are passed using call by value (where the value is always an object reference, not the value of the object). 1 When a function calls another function, or calls itself recursively, a new local symbol table is created for that call. Definisi fungsi mengasosiasikan nama fungsi dengan objek fungsi dalam tabel simbol saat ini. Sebuah interpreter dapat mengenali objek yang ditunjuk dengan nama itu sebagai fungsi yang ditentukan oleh pengguna. Nama lain juga dapat menunjuk ke objek fungsi yang sama dan juga dapat digunakan untuk mengakses fungsi tersebut: >>> fib Berasal dari bahasa lain, Anda mungkin keberatan bahwa >>> fib(0) >>> print(fib(0)) None Sangat mudah untuk menulis fungsi yang mengembalikan daftar list nomor seri Fibonacci, alih-alih mencetaknya: >>> def fib2(n): # return Fibonacci series up to n ... """Return a list containing the Fibonacci series up to n.""" ... result = [] ... a, b = 0, 1 ... while a < n: ... result.append(a) # see below ... a, b = b, a+b ... return result ... >>> f100 = fib2(100) # call it >>> f100 # write the result [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] Contoh ini, seperti biasa, menunjukkan beberapa fitur Python baru:
4.8. Lebih lanjut tentang Mendefinisikan Fungsi¶Dimungkinkan juga untuk mendefinisikan fungsi dengan sejumlah variabel argumen. Ada tiga bentuk, yang bisa digabungkan. 4.8.1. Nilai Argumen Bawaan¶Bentuk yang paling berguna adalah menentukan nilai bawaan untuk satu atau lebih argumen. Ini menciptakan fungsi yang bisa dipanggil dengan argumen yang lebih sedikit daripada yang didefinisikan untuk diizinkan. Sebagai contoh: def ask_ok(prompt, retries=4, reminder='Please try again!'): while True: ok = input(prompt) if ok in ('y', 'ye', 'yes'): return True if ok in ('n', 'no', 'nop', 'nope'): return False retries = retries - 1 if retries < 0: raise ValueError('invalid user response') print(reminder) Fungsi ini dapat dipanggil dengan beberapa cara:
Contoh ini juga memperkenalkan kata kunci Nilai bawaan dievaluasi pada titik definisi fungsi dalam lingkup defining, sehingga: i = 5 def f(arg=i): print(arg) i = 6 f() akan mencetak Peringatan penting: Nilai bawaan dievaluasi hanya sekali. Ini membuat perbedaan ketika bawaan adalah objek yang dapat diubah seperti daftar list, kamus dictionary, atau instances dari sebagian besar kelas. Misalnya, fungsi berikut mengakumulasi argumen yang diteruskan pada panggilan berikutnya: def f(a, L=[]): L.append(a) return L print(f(1)) print(f(2)) print(f(3)) Ini akan mencetak: Jika Anda tidak ingin bawaan dibagi dengan panggilan berikutnya, Anda dapat menulis fungsi seperti ini sebagai gantinya: def f(a, L=None): if L is None: L = [] L.append(a) return L 4.8.2. Argumen Kata Kunci Keyword Arguments¶Fungsi juga dapat dipanggil menggunakan
keyword argument dari bentuk def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'): print("-- This parrot wouldn't", action, end=' ') print("if you put", voltage, "volts through it.") print("-- Lovely plumage, the", type) print("-- It's", state, "!") menerima satu argumen yang diperlukan ( parrot(1000) # 1 positional argument parrot(voltage=1000) # 1 keyword argument parrot(voltage=1000000, action='VOOOOOM') # 2 keyword arguments parrot(action='VOOOOOM', voltage=1000000) # 2 keyword arguments parrot('a million', 'bereft of life', 'jump') # 3 positional arguments parrot('a thousand', state='pushing up the daisies') # 1 positional, 1 keyword tetapi semua pemanggilan berikut ini tidak valid: parrot() # required argument missing parrot(voltage=5.0, 'dead') # non-keyword argument after a keyword argument parrot(110, voltage=220) # duplicate value for the same argument parrot(actor='John Cleese') # unknown keyword argument Dalam pemanggilan fungsi, argumen kata
kunci keyword argument harus mengikuti argumen posisi. Semua argumen kata kunci keyword argument yang diteruskan harus cocok dengan salah satu argumen yang diterima oleh fungsi (mis. >>> def function(a): ... pass ... >>> function(0, a=0) Traceback (most recent call last): File " Ketika
parameter formal terakhir dari bentuk def cheeseshop(kind, *arguments, **keywords): print("-- Do you have any", kind, "?") print("-- I'm sorry, we're all out of", kind) for arg in arguments: print(arg) print("-" * 40) for kw in keywords: print(kw, ":", keywords[kw]) Ini bisa disebut seperti ini: cheeseshop("Limburger", "It's very runny, sir.", "It's really very, VERY runny, sir.", shopkeeper="Michael Palin", client="John Cleese", sketch="Cheese Shop Sketch") dan tentu saja itu akan mencetak: -- Do you have any Limburger ? -- I'm sorry, we're all out of Limburger It's very runny, sir. It's really very, VERY runny, sir. ---------------------------------------- shopkeeper : Michael Palin client : John Cleese sketch : Cheese Shop Sketch Perhatikan bahwa bagaimana urutan argumen kata kunci dicetak telah dijamin sesuai dengan urutan yang disediakan dalam pemanggilan fungsi. 4.8.3. Parameter spesial¶Secara bawaan, argumen dapat diteruskan ke fungsi Python baik dengan posisi atau secara eksplisit oleh kata kunci. Untuk keterbacaan dan kinerja, masuk akal untuk membatasi cara argumen dapat dilewatkan sehingga pengembang hanya perlu melihat definisi fungsi untuk menentukan apakah item dilewatkan secara posisi saja, posisi atau kata kunci, atau kata kunci saja. Definisi fungsi mungkin terlihat seperti: def f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2): ----------- ---------- ---------- | | | | Positional or keyword | | - Keyword only -- Positional only di mana 4.8.3.1. Argumen Posisi-atau-Kata Kunci¶Jika 4.8.3.2. Parameter Posisi-saja¶Melihat ini sedikit lebih detail, dimungkinkan untuk menandai parameter tertentu sebagai positional-only. Jika positional-only, urutan parameter penting, dan parameter tidak dapat dilewatkan dengan kata kunci. Parameter posisi-saja ditempatkan sebelum Parameter yang mengikuti 4.8.3.3. Argumen Kata Kunci-saja¶Untuk menandai parameter sebagai keyword-only, yang menunjukkan parameter harus dilewatkan dengan argumen kata kunci, tempatkan 4.8.3.4. Contoh Fungsi¶Perhatikan definisi fungsi contoh berikut dengan memperhatikan marker >>> def standard_arg(arg): ... print(arg) ... >>> def pos_only_arg(arg, /): ... print(arg) ... >>> def kwd_only_arg(*, arg): ... print(arg) ... >>> def combined_example(pos_only, /, standard, *, kwd_only): ... print(pos_only, standard, kwd_only) Definisi fungsi pertama, >>> standard_arg(2) 2 >>> standard_arg(arg=2) 2 Fungsi kedua >>> pos_only_arg(1) 1 >>> pos_only_arg(arg=1) Traceback (most recent call last): File " Fungsi ketiga >>> kwd_only_arg(3) Traceback (most recent call last): File " Dan yang terakhir menggunakan ketiga konvensi pemanggilan dalam definisi fungsi yang sama: >>> combined_example(1, 2, 3) Traceback (most recent call last): File " Akhirnya, pertimbangkan definisi fungsi ini yang memiliki potensi tabrakan antara argumen posisi def foo(name, **kwds): return 'name' in kwds Tidak ada kemungkinan panggilan yang memungkinkan untuk mengembalikan ke dalam ``True'' karena kata kunci `` 'nama' 'akan selalu terikat ke parameter pertama. Sebagai contoh: >>> foo(1, **{'name': 2}) Traceback (most recent call last): File " Tetapi menggunakan def foo(name, /, **kwds): return 'name' in kwds >>> foo(1, **{'name': 2}) True Dengan kata lain, nama-nama parameter posisi-saja dapat digunakan dalam 4.8.3.5. Rekap¶Contoh kasus dimana akan menentukan parameter mana yang akan digunakan dalam definisi fungsi: def f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2): Sebagai pedoman:
4.8.4. Daftar Argumen Berubah-ubah Arbitrary¶Akhirnya, opsi yang paling jarang digunakan adalah menentukan bahwa suatu fungsi dapat dipanggil dengan sejumlah argumen acak arbitrary. Argumen-argumen ini akan dibungkus dalam sebuah tuple (lihat tuttuples). Sebelum jumlah variabel argumen, nol atau lebih argumen normal dapat muncul. def write_multiple_items(file, separator, *args): file.write(separator.join(args)) Normally, these variadic arguments will be last in the list of formal parameters, because they scoop up all remaining input arguments that are passed to the function. Any formal parameters which occur after the >>> def concat(*args, sep="/"): ... return sep.join(args) ... >>> concat("earth", "mars", "venus") 'earth/mars/venus' >>> concat("earth", "mars", "venus", sep=".") 'earth.mars.venus' 4.8.5. Pembukaan Paket Unpacking Daftar Argumen¶Situasi sebaliknya terjadi ketika argumen sudah ada dalam daftar list atau tuple tetapi perlu dibongkar untuk panggilan fungsi yang membutuhkan argumen posisi terpisah. Sebagai contoh, fungsi bawaan
>>> list(range(3, 6)) # normal call with separate arguments [3, 4, 5] >>> args = [3, 6] >>> list(range(*args)) # call with arguments unpacked from a list [3, 4, 5] Dengan cara yang sama, kamus dapat mengirimkan argumen kata kunci dengan operator- >>> def parrot(voltage, state='a stiff', action='voom'): ... print("-- This parrot wouldn't", action, end=' ') ... print("if you put", voltage, "volts through it.", end=' ') ... print("E's", state, "!") ... >>> d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"} >>> parrot(**d) -- This parrot wouldn't VOOM if you put four million volts through it. E's bleedin' demised ! 4.8.6. Ekspresi Lambda¶Fungsi kecil anonim dapat dibuat dengan kata kunci >>> def make_incrementor(n): ... return lambda x: x + n ... >>> f = make_incrementor(42) >>> f(0) 42 >>> f(1) 43 Contoh di atas menggunakan ekspresi lambda untuk mengembalikan fungsi. Penggunaan lain adalah untuk melewatkan fungsi kecil sebagai argumen: >>> pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')] >>> pairs.sort(key=lambda pair: pair[1]) >>> pairs [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')] 4.8.7. String Dokumentasi¶Berikut adalah beberapa konvensi tentang konten dan format string dokumentasi. Baris pertama harus selalu berupa ringkasan singkat dan ringkas dari tujuan objek. Untuk singkatnya, itu tidak boleh secara eksplisit menyatakan nama atau jenis objek, karena ini tersedia dengan cara lain (kecuali jika nama tersebut merupakan kata kerja yang menggambarkan operasi fungsi). Baris ini harus dimulai dengan huruf kapital dan diakhiri dengan titik. Jika ada lebih banyak baris dalam string dokumentasi, baris kedua harus kosong, memisahkan ringkasan secara visual dari sisa deskripsi. Baris berikut harus satu atau lebih paragraf yang menggambarkan konvensi pemanggilan objek, efek sampingnya, dll. Pengurai Python tidak menghapus lekukan dari string multi-baris literal di Python, jadi alat yang memproses dokumentasi harus menghapus indentasi jika diinginkan. Ini dilakukan dengan menggunakan konvensi berikut. Baris tidak-kosong pertama setelah baris pertama string menentukan jumlah indentasi untuk seluruh string dokumentasi. (Kami tidak dapat menggunakan baris pertama karena umumnya berbatasan dengan tanda kutip pembukaan string sehingga indentasinya tidak terlihat dalam string literal.) Spasi "equivalent" untuk indentasi ini kemudian dihilangkan dari awal semua baris string. Baris yang indentasi lebih sedikit seharusnya tidak terjadi, tetapi jika terjadi semua spasi whitespace utama harus dihilangkan. Kesetaraan spasi harus diuji setelah ekspansi tab (hingga 8 spasi, biasanya). Berikut adalah contoh dari multi-baris docstring: >>> def my_function(): ... """Do nothing, but document it. ... ... No, really, it doesn't do anything. ... """ ... pass ... >>> print(my_function.__doc__) Do nothing, but document it. No, really, it doesn't do anything. 4.8.8. Anotasi Fungsi¶Function annotations informasi metadata yang sepenuhnya opsional tentang jenis yang digunakan oleh fungsi yang ditentukan pengguna (lihat PEP 3107 dan PEP 484 untuk informasi lebih lanjut). Annotations are stored in the >>> def f(ham: str, eggs: str = 'eggs') -> str: ... print("Annotations:", f.__annotations__) ... print("Arguments:", ham, eggs) ... return ham + ' and ' + eggs ... >>> f('spam') Annotations: {'ham': 4.9. Intermezzo: Gaya Coding¶Sekarang Anda akan menulis potongan Python yang lebih panjang dan lebih kompleks, ini adalah saat yang tepat untuk berbicara tentang coding style. Sebagian besar bahasa dapat ditulis (atau lebih ringkas, formatted) dalam gaya yang berbeda; beberapa lebih mudah dibaca daripada yang lain. Memudahkan orang lain untuk membaca kode Anda selalu merupakan ide yang baik, dan mengadopsi gaya pengkodean yang bagus sangat membantu untuk itu. Untuk Python, PEP 8 telah muncul sebagai panduan gaya yang dipatuhi sebagian besar proyek; itu mempromosikan gaya pengkodean yang sangat mudah dibaca dan menyenangkan. Setiap pengembang Python harus membacanya di beberapa bagian; di sini adalah poin paling penting yang ditunjukkan untuk Anda:
Catatan kaki 1Sebenarnya, call by object reference akan menjadi deskripsi yang lebih baik, karena jika objek yang bisa ditransmisikan dilewatkan, pemanggil akan melihat perubahan yang dibuat oleh yang dipanggil callee (item dimasukkan ke dalam daftar). |