Panggil fungsi dalam while loop javascript

Selain pernyataan yang baru saja diperkenalkan, Python menggunakan pernyataan kontrol aliran biasa yang dikenal dari bahasa lain, dengan beberapa perubahan

Show

4. 1. >>> 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 7 Pernyataan

Mungkin jenis pernyataan yang paling terkenal adalah pernyataan. Sebagai contoh

>>> 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
_

Bisa ada nol atau lebih bagian, dan bagian itu opsional. Kata kunci ‘

>>> 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
_9’ merupakan kependekan dari ‘else if’, dan berguna untuk menghindari indentasi yang berlebihan. Urutan
>>> 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
7 …
>>> 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
9 …
>>> 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
9 … adalah pengganti pernyataan
>>> range(10)
range(0, 10)
5 atau
>>> range(10)
range(0, 10)
6 yang ditemukan dalam bahasa lain

Jika Anda membandingkan nilai yang sama dengan beberapa konstanta, atau memeriksa jenis atau atribut tertentu, Anda mungkin juga menganggap pernyataan

>>> range(10)
range(0, 10)
7 berguna. Untuk lebih jelasnya lihat

4. 2. >>> range(10) range(0, 10) 8 Pernyataan

Pernyataan dalam Python sedikit berbeda dari yang biasa Anda gunakan di C atau Pascal. Daripada selalu mengulangi urutan aritmatika angka (seperti di Pascal), atau memberi pengguna kemampuan untuk menentukan langkah iterasi dan menghentikan kondisi (seperti C), pernyataan

>>> range(10)
range(0, 10)
8 Python mengulangi item dari urutan apa pun (daftar atau . Misalnya (tidak ada permainan kata-kata yang dimaksudkan)

>>> # 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 sambil mengulangi koleksi yang sama bisa jadi sulit untuk dilakukan dengan benar. Alih-alih, biasanya lebih mudah untuk mengulangi 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

Jika Anda perlu mengulangi urutan angka, fungsi bawaan akan berguna. Ini menghasilkan progresi aritmatika

>>> for i in range(5):
..     print(i)
...
0
1
2
3
4

Titik akhir yang diberikan tidak pernah menjadi bagian dari urutan yang dihasilkan; . Dimungkinkan untuk membiarkan rentang mulai dari angka lain, atau untuk menentukan kenaikan yang berbeda (bahkan negatif; terkadang ini disebut 'langkah')

>>> 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 mengulangi indeks urutan, Anda dapat menggabungkan dan sebagai berikut

>>> 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

Namun, dalam sebagian besar kasus seperti itu, akan lebih mudah menggunakan fungsi tersebut, lihat

Hal yang aneh terjadi jika Anda hanya mencetak rentang

>>> range(10)
range(0, 10)
_

Dalam banyak hal, objek yang dikembalikan oleh berperilaku seolah-olah itu adalah daftar, tetapi sebenarnya bukan. Ini adalah objek yang mengembalikan item berturut-turut dari urutan yang diinginkan saat Anda mengulanginya, tetapi itu tidak benar-benar membuat daftar, sehingga menghemat ruang

Kami mengatakan objek seperti itu cocok sebagai target untuk fungsi dan konstruksi yang mengharapkan sesuatu dari mana mereka dapat memperoleh item berturut-turut hingga persediaan habis. Kita telah melihat bahwa pernyataan tersebut adalah konstruk, sedangkan contoh fungsi yang menggunakan iterable adalah

>>> sum(range(4))  # 0 + 1 + 2 + 3
6

Nanti kita akan melihat lebih banyak fungsi yang mengembalikan iterables dan menjadikan iterables sebagai argumen. Dalam bab , kita akan membahas lebih detail tentang

4. 4. >>> 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 1 dan >>> 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 2 Pernyataan, dan >>> range(10) range(0, 10) 0 Klausul tentang Pengulangan

Pernyataan, seperti di C, keluar dari penutup atau loop terdalam

Pernyataan pengulangan mungkin memiliki klausa

>>> range(10)
range(0, 10)
0; . Ini dicontohkan oleh loop berikut, yang mencari bilangan prima

>>> 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. klausa

>>> range(10)
range(0, 10)
_0 milik loop, bukan pernyataan. )

Saat digunakan dengan perulangan, klausa

>>> range(10)
range(0, 10)
_0 memiliki lebih banyak kesamaan dengan klausa
>>> range(10)
range(0, 10)
0 dari sebuah pernyataan daripada dengan pernyataan itu. klausa
>>> range(10)
range(0, 10)
_0 pernyataan berjalan ketika tidak ada pengecualian terjadi, dan klausa
>>> range(10)
range(0, 10)
0 loop berjalan ketika tidak ada
>>> 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
1 terjadi. Untuk informasi lebih lanjut tentang pernyataan dan pengecualian
>>> 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
_6, lihat

Pernyataan, juga dipinjam dari C, dilanjutkan dengan iterasi berikutnya dari loop

>>> 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. >>> # Measure some strings: .. words = ['cat', 'window', 'defenestrate'] >>> for w in words: .. print(w, len(w)) ... cat 3 window 6 defenestrate 12 04 Pernyataan

Pernyataan itu tidak menghasilkan apa-apa. Itu dapat digunakan ketika pernyataan diperlukan secara sintaksis tetapi program tidak memerlukan tindakan. Sebagai contoh

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
_0

Ini biasanya digunakan untuk membuat kelas minimal

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
_1

Tempat lain yang dapat digunakan adalah sebagai tempat untuk fungsi atau badan kondisional saat Anda mengerjakan kode baru, memungkinkan Anda untuk terus berpikir pada tingkat yang lebih abstrak.

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
_04 diam-diam diabaikan

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
_2

4. 6. >>> range(10) range(0, 10) 7 Pernyataan

Pernyataan mengambil ekspresi dan membandingkan nilainya dengan pola berurutan yang diberikan sebagai satu atau lebih blok kasus. Ini secara dangkal mirip dengan pernyataan switch di C, Java atau JavaScript (dan banyak bahasa lainnya), tetapi lebih mirip dengan pencocokan pola dalam bahasa seperti Rust atau Haskell. Hanya pola pertama yang cocok yang dieksekusi dan juga dapat mengekstrak komponen (elemen urutan atau atribut objek) dari nilai menjadi variabel

Bentuk paling sederhana membandingkan nilai subjek terhadap satu atau lebih literal

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
_3

Perhatikan blok terakhir. "nama variabel"

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
_10 bertindak sebagai wildcard dan tidak pernah gagal untuk mencocokkan. Jika tidak ada case yang cocok, tidak ada cabang yang dieksekusi

Anda dapat menggabungkan beberapa literal dalam satu pola menggunakan

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
11 (“atau”)

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
_4

Pola dapat terlihat seperti tugas membongkar, dan dapat digunakan untuk mengikat variabel

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
_5

Pelajari yang itu dengan cermat. Pola pertama memiliki dua literal, dan dapat dianggap sebagai perluasan dari pola literal yang ditunjukkan di atas. Tapi dua pola berikutnya menggabungkan literal dan variabel, dan variabel mengikat nilai dari subjek (

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
12). Pola keempat menangkap dua nilai, yang membuatnya secara konseptual mirip dengan tugas membongkar
>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
13

Jika Anda menggunakan kelas untuk menyusun data, Anda dapat menggunakan nama kelas diikuti dengan daftar argumen yang menyerupai konstruktor, tetapi dengan kemampuan untuk menangkap atribut ke dalam variabel

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
_6

Anda dapat menggunakan parameter posisi dengan beberapa kelas bawaan yang menyediakan pengurutan untuk atributnya (mis. g. kelas data). Anda juga dapat menentukan posisi tertentu untuk atribut dalam pola dengan menyetel

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
14 atribut khusus di kelas Anda. Jika disetel ke (“x”, “y”), pola berikut semuanya setara (dan semua mengikat atribut
>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
15 ke variabel
>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
16)

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
_7

Cara yang disarankan untuk membaca pola adalah melihatnya sebagai bentuk perluasan dari apa yang akan Anda letakkan di sebelah kiri tugas, untuk memahami variabel mana yang akan disetel ke apa. Hanya nama yang berdiri sendiri (seperti

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
16 di atas) yang ditetapkan oleh pernyataan kecocokan. Nama bertitik (seperti
>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
_18), nama atribut (
>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
19 dan
>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
20 di atas) atau nama kelas (dikenali dengan “(…)” di sebelahnya seperti
>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
21 di atas) tidak pernah ditugaskan ke

Pola dapat disarangkan secara sewenang-wenang. Misalnya, jika kita memiliki daftar poin yang pendek, kita bisa mencocokkannya seperti ini

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
_8

Kita bisa menambahkan

>>> 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
7 klausa ke pola, yang dikenal sebagai "penjaga". Jika penjaga salah,
>>> range(10)
range(0, 10)
_7 melanjutkan untuk mencoba blok kasus berikutnya. Perhatikan bahwa pengambilan nilai terjadi sebelum penjaga dievaluasi

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
_9

Beberapa fitur kunci lain dari pernyataan ini

  • Seperti tugas membongkar, pola tuple dan daftar memiliki arti yang persis sama dan benar-benar cocok dengan urutan arbitrer. Pengecualian penting adalah bahwa mereka tidak cocok dengan iterator atau string

  • Pola urutan mendukung pembongkaran yang diperpanjang.

    >>> # Measure some strings:
    .. words = ['cat', 'window', 'defenestrate']
    >>> for w in words:
    ..     print(w, len(w))
    ...
    cat 3
    window 6
    defenestrate 12
    
    _24 dan
    >>> # Measure some strings:
    .. words = ['cat', 'window', 'defenestrate']
    >>> for w in words:
    ..     print(w, len(w))
    ...
    cat 3
    window 6
    defenestrate 12
    
    25 pekerjaan serupa dengan tugas membongkar. Nama setelah
    >>> # Measure some strings:
    .. words = ['cat', 'window', 'defenestrate']
    >>> for w in words:
    ..     print(w, len(w))
    ...
    cat 3
    window 6
    defenestrate 12
    
    _26 mungkin juga
    >>> # Measure some strings:
    .. words = ['cat', 'window', 'defenestrate']
    >>> for w in words:
    ..     print(w, len(w))
    ...
    cat 3
    window 6
    defenestrate 12
    
    10, jadi
    >>> # Measure some strings:
    .. words = ['cat', 'window', 'defenestrate']
    >>> for w in words:
    ..     print(w, len(w))
    ...
    cat 3
    window 6
    defenestrate 12
    
    28 cocok dengan urutan setidaknya dua item tanpa mengikat item yang tersisa

  • Pola pemetaan.

    >>> # Measure some strings:
    .. words = ['cat', 'window', 'defenestrate']
    >>> for w in words:
    ..     print(w, len(w))
    ...
    cat 3
    window 6
    defenestrate 12
    
    _29 menangkap nilai
    >>> # Measure some strings:
    .. words = ['cat', 'window', 'defenestrate']
    >>> for w in words:
    ..     print(w, len(w))
    ...
    cat 3
    window 6
    defenestrate 12
    
    30 dan
    >>> # Measure some strings:
    .. words = ['cat', 'window', 'defenestrate']
    >>> for w in words:
    ..     print(w, len(w))
    ...
    cat 3
    window 6
    defenestrate 12
    
    31 dari kamus. Tidak seperti pola urutan, kunci tambahan diabaikan. Pembongkaran seperti
    >>> # Measure some strings:
    .. words = ['cat', 'window', 'defenestrate']
    >>> for w in words:
    ..     print(w, len(w))
    ...
    cat 3
    window 6
    defenestrate 12
    
    _32 juga didukung. (Tapi
    >>> # Measure some strings:
    .. words = ['cat', 'window', 'defenestrate']
    >>> for w in words:
    ..     print(w, len(w))
    ...
    cat 3
    window 6
    defenestrate 12
    
    _33 akan berlebihan, jadi tidak diperbolehkan. )

  • Subpola dapat ditangkap menggunakan kata kunci ________11______34

    # 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
    
    0

    akan menangkap elemen kedua dari input sebagai

    >>> # Measure some strings:
    .. words = ['cat', 'window', 'defenestrate']
    >>> for w in words:
    ..     print(w, len(w))
    ...
    cat 3
    window 6
    defenestrate 12
    
    35 (selama input adalah urutan dua titik)

  • Sebagian besar literal dibandingkan dengan kesetaraan, namun singleton

    >>> # Measure some strings:
    .. words = ['cat', 'window', 'defenestrate']
    >>> for w in words:
    ..     print(w, len(w))
    ...
    cat 3
    window 6
    defenestrate 12
    
    36,
    >>> # Measure some strings:
    .. words = ['cat', 'window', 'defenestrate']
    >>> for w in words:
    ..     print(w, len(w))
    ...
    cat 3
    window 6
    defenestrate 12
    
    37 dan
    >>> # Measure some strings:
    .. words = ['cat', 'window', 'defenestrate']
    >>> for w in words:
    ..     print(w, len(w))
    ...
    cat 3
    window 6
    defenestrate 12
    
    38 dibandingkan dengan identitas

  • Pola dapat menggunakan konstanta bernama. Ini harus berupa nama bertitik untuk mencegahnya ditafsirkan sebagai variabel tangkapan

    # 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
    
    1

Untuk penjelasan lebih rinci dan contoh tambahan, Anda dapat melihat PEP 636 yang ditulis dalam format tutorial

4. 7. Mendefinisikan Fungsi

Kita dapat membuat fungsi yang menulis deret Fibonacci ke batas arbitrer

# 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
2

Kata kunci memperkenalkan definisi fungsi. Itu harus diikuti oleh nama fungsi dan daftar parameter formal yang dikurung. Pernyataan yang membentuk isi fungsi dimulai dari baris berikutnya, dan harus diberi indentasi

Pernyataan pertama dari badan fungsi secara opsional dapat berupa string literal; . (Selengkapnya tentang docstrings dapat ditemukan di bagian. ) Ada alat yang menggunakan docstrings untuk secara otomatis menghasilkan dokumentasi online atau cetak, atau membiarkan pengguna menelusuri kode secara interaktif;

Eksekusi suatu fungsi memperkenalkan tabel simbol baru yang digunakan untuk variabel lokal dari fungsi tersebut. Lebih tepatnya, semua penugasan variabel dalam suatu fungsi menyimpan nilai dalam tabel simbol lokal; . Dengan demikian, variabel global dan variabel fungsi terlampir tidak dapat secara langsung diberi nilai dalam suatu fungsi (kecuali, untuk variabel global, disebutkan dalam pernyataan, atau, untuk variabel fungsi terlampir, disebutkan dalam pernyataan), meskipun mereka dapat direferensikan

Parameter aktual (argumen) untuk pemanggilan fungsi diperkenalkan di tabel simbol lokal dari fungsi yang dipanggil saat dipanggil; . Saat sebuah fungsi memanggil fungsi lain, atau memanggil dirinya sendiri secara rekursif, tabel simbol lokal baru akan dibuat untuk panggilan tersebut

Definisi fungsi mengaitkan nama fungsi dengan objek fungsi dalam tabel simbol saat ini. Penerjemah mengenali objek yang ditunjuk oleh nama itu sebagai fungsi yang ditentukan pengguna. Nama lain juga dapat menunjuk ke objek fungsi yang sama dan juga dapat digunakan untuk mengakses fungsi tersebut

# 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
3

Berasal dari bahasa lain, Anda mungkin keberatan bahwa

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
42 bukan fungsi tetapi prosedur karena tidak mengembalikan nilai. Faktanya, bahkan fungsi tanpa pernyataan mengembalikan nilai, meskipun agak membosankan. Nilai ini disebut
>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
_38 (ini adalah nama bawaan). Menulis nilai
>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
38 biasanya ditekan oleh juru bahasa jika itu akan menjadi satu-satunya nilai yang ditulis. Anda dapat melihatnya jika Anda benar-benar ingin menggunakannya

# 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

Sangat mudah untuk menulis fungsi yang mengembalikan daftar angka dari deret Fibonacci, daripada mencetaknya

# 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
5

Contoh ini, seperti biasa, menunjukkan beberapa fitur baru Python

  • Pernyataan kembali dengan nilai dari suatu fungsi.

    >>> # Measure some strings:
    .. words = ['cat', 'window', 'defenestrate']
    >>> for w in words:
    ..     print(w, len(w))
    ...
    cat 3
    window 6
    defenestrate 12
    
    _43 tanpa argumen ekspresi mengembalikan
    >>> # Measure some strings:
    .. words = ['cat', 'window', 'defenestrate']
    >>> for w in words:
    ..     print(w, len(w))
    ...
    cat 3
    window 6
    defenestrate 12
    
    38. Jatuh dari akhir fungsi juga mengembalikan
    >>> # Measure some strings:
    .. words = ['cat', 'window', 'defenestrate']
    >>> for w in words:
    ..     print(w, len(w))
    ...
    cat 3
    window 6
    defenestrate 12
    
    38

  • Pernyataan

    >>> # Measure some strings:
    .. words = ['cat', 'window', 'defenestrate']
    >>> for w in words:
    ..     print(w, len(w))
    ...
    cat 3
    window 6
    defenestrate 12
    
    _51 memanggil metode dari objek daftar
    >>> # Measure some strings:
    .. words = ['cat', 'window', 'defenestrate']
    >>> for w in words:
    ..     print(w, len(w))
    ...
    cat 3
    window 6
    defenestrate 12
    
    52. Metode adalah fungsi yang 'milik' objek dan diberi nama
    >>> # Measure some strings:
    .. words = ['cat', 'window', 'defenestrate']
    >>> for w in words:
    ..     print(w, len(w))
    ...
    cat 3
    window 6
    defenestrate 12
    
    53, di mana
    >>> # Measure some strings:
    .. words = ['cat', 'window', 'defenestrate']
    >>> for w in words:
    ..     print(w, len(w))
    ...
    cat 3
    window 6
    defenestrate 12
    
    54 adalah beberapa objek (ini mungkin ekspresi), dan
    >>> # Measure some strings:
    .. words = ['cat', 'window', 'defenestrate']
    >>> for w in words:
    ..     print(w, len(w))
    ...
    cat 3
    window 6
    defenestrate 12
    
    55 adalah nama metode yang ditentukan oleh jenis objek. Jenis yang berbeda menentukan metode yang berbeda. Metode dari jenis yang berbeda dapat memiliki nama yang sama tanpa menimbulkan ambiguitas. (Dimungkinkan untuk menentukan jenis dan metode objek Anda sendiri, menggunakan kelas, lihat ) Metode
    >>> # Measure some strings:
    .. words = ['cat', 'window', 'defenestrate']
    >>> for w in words:
    ..     print(w, len(w))
    ...
    cat 3
    window 6
    defenestrate 12
    
    56 yang ditunjukkan dalam contoh didefinisikan untuk objek daftar; . Dalam contoh ini setara dengan
    >>> # Measure some strings:
    .. words = ['cat', 'window', 'defenestrate']
    >>> for w in words:
    ..     print(w, len(w))
    ...
    cat 3
    window 6
    defenestrate 12
    
    _57, tetapi lebih efisien

4. 8. Selengkapnya tentang Menentukan Fungsi

Dimungkinkan juga untuk mendefinisikan fungsi dengan sejumlah variabel argumen. Ada tiga bentuk yang bisa digabungkan

4. 8. 1. Nilai Argumen Default

Bentuk yang paling berguna adalah menentukan nilai default untuk satu atau beberapa argumen. Ini menciptakan fungsi yang dapat dipanggil dengan lebih sedikit argumen daripada yang diizinkan. Sebagai contoh

# 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
6

Fungsi ini dapat dipanggil dengan beberapa cara

  • hanya memberikan argumen wajib.

    >>> # Measure some strings:
    .. words = ['cat', 'window', 'defenestrate']
    >>> for w in words:
    ..     print(w, len(w))
    ...
    cat 3
    window 6
    defenestrate 12
    
    _58

  • memberikan salah satu argumen opsional.

    >>> # Measure some strings:
    .. words = ['cat', 'window', 'defenestrate']
    >>> for w in words:
    ..     print(w, len(w))
    ...
    cat 3
    window 6
    defenestrate 12
    
    _59

  • atau bahkan memberikan semua argumen.

    >>> # Measure some strings:
    .. words = ['cat', 'window', 'defenestrate']
    >>> for w in words:
    ..     print(w, len(w))
    ...
    cat 3
    window 6
    defenestrate 12
    
    _60

Contoh ini juga memperkenalkan kata kunci. Ini menguji apakah urutan berisi nilai tertentu atau tidak

Nilai default dievaluasi pada titik definisi fungsi dalam lingkup pendefinisian, sehingga

# 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
7

akan mencetak

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
_62

Peringatan penting. Nilai default dievaluasi hanya sekali. Ini membuat perbedaan ketika defaultnya adalah objek yang dapat diubah seperti daftar, kamus, atau instance dari sebagian besar kelas. Misalnya, fungsi berikut mengakumulasikan argumen yang diteruskan ke fungsi tersebut pada panggilan berikutnya

# 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
8

Ini akan dicetak

# 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
_9

Jika Anda tidak ingin default dibagikan di antara panggilan berikutnya, Anda dapat menulis fungsi seperti ini

>>> for i in range(5):
..     print(i)
...
0
1
2
3
4
0

4. 8. 2. Argumen Kata Kunci

Fungsi juga bisa disebut menggunakan bentuk

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
63. Misalnya, fungsi berikut

>>> for i in range(5):
..     print(i)
...
0
1
2
3
4
1

menerima satu argumen wajib (

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
_64) dan tiga argumen opsional (
>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
65,
>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
66, dan
>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
67). Fungsi ini dapat dipanggil dengan salah satu cara berikut

>>> for i in range(5):
..     print(i)
...
0
1
2
3
4
2

tetapi semua panggilan berikut tidak valid

>>> for i in range(5):
..     print(i)
...
0
1
2
3
4
3

Dalam pemanggilan fungsi, argumen kata kunci harus mengikuti argumen posisi. Semua argumen kata kunci yang diteruskan harus cocok dengan salah satu argumen yang diterima oleh fungsi (mis. g.

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
_68 bukan argumen yang valid untuk fungsi
>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
69), dan urutannya tidak penting. Ini juga termasuk argumen non-opsional (mis. g.
>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
_70 juga berlaku). Tidak ada argumen yang boleh menerima nilai lebih dari satu kali. Berikut adalah contoh yang gagal karena pembatasan ini

>>> for i in range(5):
..     print(i)
...
0
1
2
3
4
4

Ketika parameter formal akhir dari bentuk

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
71 hadir, ia menerima kamus (lihat ) yang berisi semua argumen kata kunci kecuali yang sesuai dengan parameter formal. Ini dapat digabungkan dengan parameter formal dalam bentuk
>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
72 (dijelaskan dalam sub-bagian berikutnya) yang menerima a berisi argumen posisi di luar daftar parameter formal. (
>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
72 harus terjadi sebelum
>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
71. ) Misalnya, jika kita mendefinisikan fungsi seperti ini

>>> for i in range(5):
..     print(i)
...
0
1
2
3
4
5

Bisa disebut seperti ini

>>> for i in range(5):
..     print(i)
...
0
1
2
3
4
6

dan tentu saja itu akan dicetak

>>> for i in range(5):
..     print(i)
...
0
1
2
3
4
7

Perhatikan bahwa urutan argumen kata kunci dicetak dijamin cocok dengan urutan yang diberikan dalam pemanggilan fungsi

4. 8. 3. Parameter khusus

Secara default, argumen dapat diteruskan ke fungsi Python baik dengan posisi atau secara eksplisit dengan kata kunci. Untuk keterbacaan dan kinerja, masuk akal untuk membatasi cara argumen dapat diteruskan sehingga pengembang hanya perlu melihat definisi fungsi untuk menentukan apakah item diteruskan oleh posisi, posisi atau kata kunci, atau kata kunci

Definisi fungsi mungkin terlihat seperti

>>> for i in range(5):
..     print(i)
...
0
1
2
3
4
8

di mana

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
_75 dan
>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
26 adalah opsional. Jika digunakan, simbol-simbol ini menunjukkan jenis parameter dengan bagaimana argumen dapat diteruskan ke fungsi. posisi-saja, posisi-atau-kata kunci, dan kata kunci saja. Parameter kata kunci juga disebut sebagai parameter bernama

4. 8. 3. 1. Argumen Posisi atau Kata Kunci

Jika

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
_75 dan
>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
26 tidak ada dalam definisi fungsi, argumen dapat diteruskan ke fungsi berdasarkan posisi atau dengan kata kunci

4. 8. 3. 2. Parameter Hanya Posisi

Melihat ini sedikit lebih detail, dimungkinkan untuk menandai parameter tertentu sebagai hanya posisi. Jika hanya posisional, urutan parameter penting, dan parameter tidak dapat diteruskan dengan kata kunci. Parameter khusus posisi ditempatkan sebelum

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
75 (garis miring ke depan).
>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
_75 digunakan untuk secara logis memisahkan parameter hanya-posisi dari parameter lainnya. Jika tidak ada
>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
_75 dalam definisi fungsi, tidak ada parameter hanya posisional

Parameter yang mengikuti

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
75 dapat berupa posisi-atau-kata kunci atau hanya kata kunci

4. 8. 3. 3. Argumen Khusus Kata Kunci

Untuk menandai parameter sebagai hanya kata kunci, yang menunjukkan bahwa parameter harus diteruskan oleh argumen kata kunci, tempatkan

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
26 dalam daftar argumen tepat sebelum parameter khusus kata kunci pertama

4. 8. 3. 4. Contoh Fungsi

Perhatikan contoh definisi fungsi berikut dengan memperhatikan penanda

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
75 dan
>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
26

>>> for i in range(5):
..     print(i)
...
0
1
2
3
4
_9

Definisi fungsi pertama,

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
_86, bentuk yang paling umum, tidak membatasi konvensi pemanggilan dan argumen dapat diteruskan oleh posisi atau kata kunci

>>> 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]
0

Fungsi kedua

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
_87 dibatasi untuk hanya menggunakan parameter posisi karena ada
>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
75 dalam definisi fungsi

>>> 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]
1

Fungsi ketiga

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
_89 hanya mengizinkan argumen kata kunci seperti yang ditunjukkan oleh
>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
26 dalam definisi fungsi

>>> 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]
2

Dan yang terakhir menggunakan ketiga konvensi pemanggilan dalam definisi fungsi yang sama

>>> 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]
_3

Terakhir, pertimbangkan definisi fungsi ini yang berpotensi bertabrakan antara argumen posisi

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
91 dan
>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
92 yang memiliki
>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
91 sebagai kunci

>>> 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]
4

Tidak ada kemungkinan panggilan yang membuatnya kembali

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
36 karena kata kunci
>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
95 akan selalu mengikat ke parameter pertama. Sebagai contoh

>>> 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]
5

Tetapi menggunakan

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
_75 (argumen hanya posisional), itu dimungkinkan karena memungkinkan
>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
91 sebagai argumen posisional dan
>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
95 sebagai kunci dalam argumen kata kunci

>>> 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]
6

Dengan kata lain, nama parameter hanya-posisi dapat digunakan di

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
92 tanpa ambiguitas

4. 8. 3. 5. Rekapitulasi

Kasus penggunaan akan menentukan parameter mana yang akan digunakan dalam definisi fungsi

>>> 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]
7

Sebagai pedoman

  • Gunakan hanya posisi jika Anda ingin nama parameter tidak tersedia untuk pengguna. Ini berguna ketika nama parameter tidak memiliki arti sebenarnya, jika Anda ingin menegakkan urutan argumen saat fungsi dipanggil atau jika Anda perlu mengambil beberapa parameter posisi dan kata kunci arbitrer

  • Gunakan hanya kata kunci jika nama memiliki arti dan definisi fungsi lebih mudah dipahami dengan nama yang eksplisit atau Anda ingin mencegah pengguna bergantung pada posisi argumen yang diteruskan

  • Untuk API, gunakan hanya-posisi untuk mencegah kerusakan perubahan API jika nama parameter diubah di masa mendatang

4. 8. 4. Daftar Argumen Sewenang-wenang

Terakhir, opsi yang paling jarang digunakan adalah menentukan bahwa suatu fungsi dapat dipanggil dengan jumlah argumen yang berubah-ubah. Argumen ini akan dibungkus dalam tuple (lihat ). Sebelum jumlah argumen variabel, nol atau lebih argumen normal dapat terjadi

>>> 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]
8

Biasanya, argumen variadik ini akan menjadi yang terakhir dalam daftar parameter formal, karena mereka mengumpulkan semua argumen masukan yang tersisa yang diteruskan ke fungsi. Parameter formal apa pun yang terjadi setelah parameter

# 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
00 adalah argumen 'hanya kata kunci', yang berarti bahwa parameter tersebut hanya dapat digunakan sebagai kata kunci daripada argumen posisi

>>> 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]
_9

4. 8. 5. Membongkar Daftar Argumen

Situasi sebaliknya terjadi ketika argumen sudah ada dalam daftar atau tuple tetapi perlu dibongkar untuk pemanggilan fungsi yang memerlukan argumen posisi terpisah. Misalnya, fungsi bawaan mengharapkan argumen start dan stop yang terpisah. Jika tidak tersedia secara terpisah, tulis pemanggilan fungsi dengan operator

>>> # Measure some strings:
.. words = ['cat', 'window', 'defenestrate']
>>> for w in words:
..     print(w, len(w))
...
cat 3
window 6
defenestrate 12
26 untuk membongkar argumen dari daftar atau tupel

>>> 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
0

Dengan cara yang sama, kamus dapat mengirimkan argumen kata kunci dengan operator

# 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
03

>>> 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
_1

4. 8. 6. Ekspresi Lambda

Fungsi anonim kecil dapat dibuat dengan kata kunci. Fungsi ini mengembalikan jumlah dari dua argumennya.

# 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
_05. Fungsi Lambda dapat digunakan di mana pun objek fungsi diperlukan. Mereka secara sintaksis dibatasi untuk satu ekspresi. Secara semantik, mereka hanyalah gula sintaksis untuk definisi fungsi normal. Seperti definisi fungsi bersarang, fungsi lambda dapat mereferensikan variabel dari cakupan yang memuatnya

>>> 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
_2

Contoh di atas menggunakan ekspresi lambda untuk mengembalikan fungsi. Kegunaan lain adalah untuk melewatkan fungsi kecil sebagai argumen

>>> 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
_3

4. 8. 7. String Dokumentasi

Berikut adalah beberapa konvensi tentang konten dan pemformatan string dokumentasi

Baris pertama harus selalu merupakan 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 kebetulan merupakan kata kerja yang menjelaskan 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 deskripsi lainnya. Baris berikut harus berupa satu atau lebih paragraf yang menjelaskan konvensi pemanggilan objek, efek sampingnya, dll

Parser Python tidak menghapus lekukan dari literal string multi-baris di Python, jadi alat yang memproses dokumentasi harus menghapus lekukan jika diinginkan. Ini dilakukan dengan menggunakan konvensi berikut. Baris tidak kosong pertama setelah baris pertama string menentukan jumlah lekukan untuk seluruh string dokumentasi. (Kita tidak dapat menggunakan baris pertama karena biasanya berdekatan dengan tanda kutip pembuka string sehingga indentasinya tidak terlihat dalam literal string. ) Spasi "setara" dengan lekukan ini kemudian dilucuti dari awal semua baris string. Garis yang indentasinya lebih kecil tidak boleh muncul, tetapi jika muncul, semua spasi putih di depannya harus dihilangkan. Kesetaraan spasi harus diuji setelah perluasan tab (biasanya menjadi 8 spasi)

Berikut adalah contoh docstring multi-baris

>>> 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
_4

4. 8. 8. Anotasi Fungsi

adalah informasi metadata yang sepenuhnya opsional tentang jenis yang digunakan oleh fungsi yang ditentukan pengguna (lihat PEP 3107 dan PEP 484 untuk informasi lebih lanjut)

disimpan di

# 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
06 atribut fungsi sebagai kamus dan tidak berpengaruh pada bagian lain dari fungsi. Anotasi parameter ditentukan oleh tanda titik dua setelah nama parameter, diikuti dengan ekspresi yang mengevaluasi nilai anotasi. Anotasi pengembalian ditentukan oleh literal
# 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
07, diikuti oleh ekspresi, antara daftar parameter dan titik dua yang menunjukkan akhir pernyataan. Contoh berikut memiliki argumen yang diperlukan, argumen opsional, dan nilai pengembalian yang dianotasi

>>> 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
5

4. 9. Intermezzo. Gaya Pengodean

Sekarang Anda akan menulis potongan Python yang lebih panjang dan lebih kompleks, inilah saat yang tepat untuk berbicara tentang gaya pengkodean. Sebagian besar bahasa dapat ditulis (atau lebih ringkas, diformat) dalam gaya yang berbeda; . Memudahkan orang lain untuk membaca kode Anda selalu merupakan ide yang bagus, dan mengadopsi gaya pengkodean yang bagus sangat membantu untuk itu

Untuk Python, PEP 8 telah muncul sebagai panduan gaya yang dipatuhi sebagian besar proyek; . Setiap pengembang Python harus membacanya di beberapa titik;

  • Gunakan lekukan 4 spasi, dan tanpa tab

    4 spasi adalah kompromi yang baik antara lekukan kecil (memungkinkan kedalaman sarang yang lebih besar) dan lekukan besar (lebih mudah dibaca). Tab menimbulkan kebingungan, dan sebaiknya ditinggalkan

  • Bungkus garis sehingga tidak melebihi 79 karakter

    Ini membantu pengguna dengan tampilan kecil dan memungkinkan beberapa file kode berdampingan pada tampilan yang lebih besar

  • Gunakan baris kosong untuk memisahkan fungsi dan kelas, dan blok kode yang lebih besar di dalam fungsi

  • Jika memungkinkan, beri komentar pada baris mereka sendiri

  • Gunakan docstring

  • Gunakan spasi di sekitar operator dan setelah koma, tetapi tidak langsung di dalam konstruksi tanda kurung.

    # 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
    
    _09

  • Beri nama kelas dan fungsi Anda secara konsisten; . Selalu gunakan

    # 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
    
    _12 sebagai nama untuk argumen metode pertama (lihat lebih lanjut tentang kelas dan metode)

  • Jangan gunakan penyandian mewah jika kode Anda dimaksudkan untuk digunakan di lingkungan internasional. Default Python, UTF-8, atau bahkan ASCII biasa berfungsi paling baik dalam hal apa pun

  • Demikian pula, jangan gunakan karakter non-ASCII dalam pengidentifikasi jika hanya ada sedikit kemungkinan orang yang berbicara bahasa berbeda akan membaca atau mempertahankan kode tersebut

Catatan kaki

Sebenarnya, referensi panggilan dengan objek akan menjadi deskripsi yang lebih baik, karena jika objek yang dapat diubah diteruskan, penelepon akan melihat perubahan apa pun yang dibuat oleh penerima (item dimasukkan ke dalam daftar)

Bisakah Anda memanggil fungsi dalam loop sementara?

Ya, Anda dapat menggunakan pemanggilan fungsi dalam ekspresi while . Jika hanya memanggil fungsi dalam ekspresi, itu harus mengembalikan Benar atau Salah. Jika fungsi adalah bagian dari ekspresi yang lebih kompleks, maka hasil akhir dari ekspresi harus dievaluasi menjadi Benar atau Salah.

Bagaimana cara memanggil fungsi untuk loop js?

Untuk Putaran. var i; . .
Sebagai contoh
biarkan tambahkan = (a,b) => a+b;
untuk(. .
Tugas yang ingin Anda lakukan di dalam loop

Bisakah Anda mengulang fungsi dalam JavaScript?

JavaScript mendukung berbagai jenis loop . for - loop melalui blok kode beberapa kali. for/in - loop melalui properti objek. for/of - loop melalui nilai objek yang dapat diubah.

Bagaimana Anda menggunakan fungsi dalam satu lingkaran?

Operasi fungsi loop melibatkan pengulangan pada objek R (e. g. daftar atau vektor atau matriks), menerapkan fungsi ke setiap elemen objek, dan menyusun hasil dan mengembalikan hasil yang disusun .