Câu lệnh lặp trong javascript

Bên cạnh câu lệnh

>>> 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
6 vừa được giới thiệu, Python sử dụng các câu lệnh điều khiển luồng thông thường được biết đến từ các ngôn ngữ khác, với một số thay đổi

4. 1. ______07 Câu lệnh¶

Có lẽ loại câu lệnh nổi tiếng nhất là câu lệnh

>>> 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. Ví dụ

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

Có thể có 0 hoặc nhiều phần

>>> 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 và phần
>>> range(10)
range(0, 10)
0 là tùy chọn. Từ khóa '
>>> 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' là viết tắt của 'else if' và rất hữu ích để tránh thụt lề quá mức. Trình tự
>>> 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 … thay thế cho câu lệnh
>>> range(10)
range(0, 10)
5 hoặc
>>> range(10)
range(0, 10)
6 được tìm thấy trong các ngôn ngữ khác

Nếu bạn đang so sánh cùng một giá trị với nhiều hằng số hoặc kiểm tra các loại hoặc thuộc tính cụ thể, bạn cũng có thể thấy câu lệnh

>>> range(10)
range(0, 10)
7 hữu ích. Để biết thêm chi tiết, hãy xem Các câu lệnh đối sánh .

4. 2. ______58 Câu lệnh¶

Câu lệnh

>>> range(10)
range(0, 10)
8 trong Python khác một chút so với những gì bạn có thể quen dùng trong C hoặc Pascal. Thay vì luôn lặp lại một cấp số cộng của các số (như trong Pascal) hoặc cung cấp cho người dùng khả năng xác định cả bước lặp và điều kiện tạm dừng (như C), câu lệnh
>>> range(10)
range(0, 10)
8 của Python lặp lại trên các mục của bất kỳ chuỗi nào (danh sách hoặc . Ví dụ (không có ý định chơi chữ)

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

Mã sửa đổi một bộ sưu tập trong khi lặp lại trên cùng một bộ sưu tập đó có thể khó hiểu đúng. Thay vào đó, việc lặp lại một bản sao của bộ sưu tập hoặc tạo một bộ sưu tập mới thường đơn giản hơn.

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

4. 3. Hàm >>> 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 81¶

Nếu bạn cần lặp lại một dãy số, hàm tích hợp sẵn

>>> 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
81 sẽ rất hữu ích. Nó tạo ra các cấp số cộng

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

Điểm cuối đã cho không bao giờ là một phần của chuỗi được tạo; . Có thể để phạm vi bắt đầu ở một số khác hoặc chỉ định một mức tăng khác (thậm chí là âm; đôi khi điều này được gọi là 'bước')

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

Để lặp lại các chỉ số của một chuỗi, bạn có thể kết hợp

>>> 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
81 và
>>> 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
85 như sau

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

Tuy nhiên, trong hầu hết các trường hợp như vậy, việc sử dụng hàm

>>> 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
86 sẽ thuận tiện hơn, hãy xem Kỹ thuật lặp .

Một điều kỳ lạ xảy ra nếu bạn chỉ in một phạm vi

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

Theo nhiều cách, đối tượng được trả về bởi

>>> 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
81 hoạt động như thể nó là một danh sách, nhưng thực tế không phải vậy. Nó là một đối tượng trả về các mục liên tiếp của chuỗi mong muốn khi bạn lặp lại nó, nhưng nó không thực sự tạo danh sách, do đó tiết kiệm không gian

Chúng tôi nói rằng một đối tượng như vậy là có thể lặp lại , nghĩa là, phù hợp làm mục tiêu cho các hàm và cấu trúc mong đợi thứ gì đó mà chúng có thể nhận được từ đó . Chúng ta đã thấy rằng câu lệnh

>>> range(10)
range(0, 10)
8 là một cấu trúc như vậy, trong khi một ví dụ về hàm có thể lặp lại là
>>> 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
89.

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

Sau này chúng ta sẽ thấy nhiều hàm hơn trả về iterables và lấy iterables làm đối số. Trong chương Cấu trúc dữ liệu , chúng ta sẽ thảo luận chi tiết hơn về

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

4. 4. ______321 và >>> 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 22 Câu lệnh, và >>> range(10) range(0, 10) 0 Mệnh đề trên Vòng lặp¶

Câu lệnh

>>> 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
21, giống như trong C, thoát ra khỏi vòng lặp
>>> range(10)
range(0, 10)
8 hoặc
>>> 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
6 kèm theo trong cùng

Câu lệnh vòng lặp có thể có mệnh đề

>>> range(10)
range(0, 10)
0; . Điều này được minh họa bằng vòng lặp sau, tìm kiếm các số nguyên tố

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

(Vâng, đây là mã chính xác. Nhìn kĩ. mệnh đề

>>> range(10)
range(0, 10)
0 thuộc về vòng lặp
>>> range(10)
range(0, 10)
8, không phải câu lệnh
>>> 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. )

Khi được sử dụng với vòng lặp, mệnh đề

>>> range(10)
range(0, 10)
0 có nhiều điểm chung với mệnh đề
>>> range(10)
range(0, 10)
0 của câu lệnh
>>> 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
96 hơn là với mệnh đề của câu lệnh
>>> 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. mệnh đề
>>> range(10)
range(0, 10)
0 của câu lệnh
>>> 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
96 chạy khi không có ngoại lệ xảy ra và mệnh đề
>>> range(10)
range(0, 10)
0 của vòng lặp chạy khi không có
>>> 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
21 xảy ra. Để biết thêm về câu lệnh
>>> 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
96 và các ngoại lệ, hãy xem Xử lý ngoại lệ .

Câu lệnh

>>> 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
22, cũng mượn từ C, tiếp tục với lần lặp tiếp theo của vòng lặp

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

4. 5. ______1604 Câu lệnh¶

Tuyên bố

>>> 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
604 không làm gì cả. Nó có thể được sử dụng khi một câu lệnh được yêu cầu về mặt cú pháp nhưng chương trình không yêu cầu hành động nào. Ví dụ

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

Điều này thường được sử dụng để tạo các lớp tối thiểu

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

Một nơi khác có thể sử dụng

>>> 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
604 làm trình giữ chỗ cho hàm hoặc phần điều kiện khi bạn đang làm việc với mã mới, cho phép bạn tiếp tục suy nghĩ ở mức độ trừu tượng hơn.
>>> 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
604 bị âm thầm bỏ qua

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

4. 6. ______57 Câu lệnh¶

Câu lệnh

>>> range(10)
range(0, 10)
7 lấy một biểu thức và so sánh giá trị của nó với các mẫu liên tiếp được đưa ra dưới dạng một hoặc nhiều khối chữ hoa chữ thường. Điều này bề ngoài giống với câu lệnh chuyển đổi trong C, Java hoặc JavaScript (và nhiều ngôn ngữ khác), nhưng nó giống với khớp mẫu hơn trong các ngôn ngữ như Rust hoặc Haskell. Chỉ mẫu đầu tiên phù hợp mới được thực thi và nó cũng có thể trích xuất các thành phần (phần tử trình tự hoặc thuộc tính đối tượng) từ giá trị thành các biến

Hình thức đơn giản nhất so sánh một giá trị chủ đề với một hoặc nhiều chữ

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

Lưu ý khối cuối cùng. “tên biến”

>>> 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
610 hoạt động như một ký tự đại diện và không bao giờ không khớp. Nếu không có trường hợp nào khớp, không có nhánh nào được thực thi

Bạn có thể kết hợp nhiều chữ trong một mẫu duy nhất bằng cách sử dụng

>>> 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
611 (“hoặc”)

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

Các mẫu có thể trông giống như các bài tập giải nén và có thể được sử dụng để liên kết các biến

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

Nghiên cứu kỹ cái đó. Mẫu đầu tiên có hai chữ và có thể được coi là phần mở rộng của mẫu chữ được hiển thị ở trên. Nhưng hai mẫu tiếp theo kết hợp một chữ và một biến, và biến liên kết một giá trị từ chủ thể (

>>> 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
612). Mẫu thứ tư nắm bắt hai giá trị, khiến nó tương tự về mặt khái niệm với bài tập giải nén
>>> 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
613

Nếu bạn đang sử dụng các lớp để cấu trúc dữ liệu của mình, bạn có thể sử dụng tên lớp theo sau là một danh sách đối số giống như một hàm tạo, nhưng với khả năng nắm bắt các thuộc tính thành các biến

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

Bạn có thể sử dụng các tham số vị trí với một số lớp dựng sẵn cung cấp thứ tự cho các thuộc tính của chúng (e. g. lớp dữ liệu). Bạn cũng có thể xác định một vị trí cụ thể cho các thuộc tính trong các mẫu bằng cách đặt thuộc tính đặc biệt

>>> 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
614 trong các lớp của bạn. Nếu nó được đặt thành (“x”, “y”), tất cả các mẫu sau đều tương đương (và tất cả đều liên kết thuộc tính
>>> 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
615 với biến
>>> 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
616)

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

Một cách được khuyến nghị để đọc các mẫu là xem chúng như một dạng mở rộng của những gì bạn sẽ đặt ở bên trái của một nhiệm vụ, để hiểu những biến nào sẽ được đặt thành những gì. Chỉ những tên độc lập (như

>>> 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
616 ở trên) được gán cho bởi câu lệnh so khớp. Các tên có dấu chấm (như
>>> 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
618), tên thuộc tính (_______1619 và
>>> 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
620 ở trên) hoặc tên lớp (được nhận dạng bởi dấu “(…)” bên cạnh chúng như
>>> 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
621 ở trên) không bao giờ được gán cho

Các mẫu có thể được lồng vào nhau tùy ý. Ví dụ: nếu chúng tôi có một danh sách ngắn các điểm, chúng tôi có thể khớp nó như thế này

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

Chúng ta có thể thêm mệnh đề

>>> 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 vào một mẫu, được gọi là “bảo vệ”. Nếu bảo vệ là sai,
>>> range(10)
range(0, 10)
7 tiếp tục thử khối trường hợp tiếp theo. Lưu ý rằng việc nắm bắt giá trị xảy ra trước khi bảo vệ được đánh giá

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

Một số tính năng chính khác của tuyên bố này

  • Giống như các bài tập giải nén, các mẫu bộ và danh sách có ý nghĩa hoàn toàn giống nhau và thực sự khớp với các chuỗi tùy ý. Một ngoại lệ quan trọng là chúng không khớp với các trình vòng lặp hoặc chuỗi

  • Các mẫu trình tự hỗ trợ giải nén mở rộng.

    >>> 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
    
    624 và
    >>> 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
    
    625 hoạt động tương tự như giải nén bài tập. Tên sau
    >>> 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
    
    626 cũng có thể là
    >>> 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
    
    610, do đó,
    >>> 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
    
    628 khớp với một chuỗi ít nhất hai mục mà không ràng buộc các mục còn lại

  • Các mẫu ánh xạ.

    >>> 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
    
    629 nắm bắt các giá trị
    >>> 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
    
    630 và
    >>> 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
    
    631 từ một từ điển. Không giống như các mẫu trình tự, các phím phụ bị bỏ qua. Giải nén như
    >>> 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
    
    632 cũng được hỗ trợ. (Nhưng
    >>> 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
    
    633 sẽ là thừa nên không được phép. )

  • Các mẫu con có thể được chụp bằng từ khóa

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

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

    sẽ nắm bắt phần tử thứ hai của đầu vào là

    >>> 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
    
    635 (miễn là đầu vào là một chuỗi gồm hai điểm)

  • Hầu hết các nghĩa đen được so sánh theo đẳng thức, tuy nhiên các singletons

    >>> 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
    
    636,
    >>> 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
    
    637 và
    >>> 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
    
    638 được so sánh theo danh tính

  • Các mẫu có thể sử dụng các hằng số được đặt tên. Đây phải là những tên chấm để ngăn chúng bị hiểu là biến chụp

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

Để có giải thích chi tiết hơn và các ví dụ bổ sung, bạn có thể xem PEP 636 được viết ở định dạng hướng dẫn

4. 7. Xác định Hàm¶

Chúng ta có thể tạo một hàm ghi chuỗi Fibonacci vào một ranh giới tùy ý

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

Từ khóa

>>> 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
639 giới thiệu định nghĩa hàm. Nó phải được theo sau bởi tên hàm và danh sách các tham số chính thức được đặt trong ngoặc đơn. Các câu lệnh tạo thành phần thân của hàm bắt đầu ở dòng tiếp theo và phải được thụt vào

Câu lệnh đầu tiên của thân hàm có thể tùy ý là một chuỗi ký tự; . (Bạn có thể tìm hiểu thêm về chuỗi tài liệu trong phần Chuỗi tài liệu . ) Có các công cụ sử dụng chuỗi tài liệu để tự động tạo tài liệu trực tuyến hoặc tài liệu in hoặc để cho phép người dùng duyệt qua mã một cách tương tác; .

Việc thực thi một hàm giới thiệu một bảng ký hiệu mới được sử dụng cho các biến cục bộ của hàm. Chính xác hơn, tất cả các phép gán biến trong một hàm đều lưu trữ giá trị trong bảng ký hiệu cục bộ; . Do đó, các biến toàn cục và các biến của các hàm bao quanh không thể được gán trực tiếp một giá trị trong một hàm (trừ khi, đối với các biến toàn cục, được đặt tên trong câu lệnh

>>> 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
640, hoặc, đối với các biến của các hàm bao quanh, được đặt tên trong một câu lệnh
>>> 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
641), mặc dù chúng có thể

Các tham số thực tế (đối số) cho một lệnh gọi hàm được đưa vào trong bảng ký hiệu cục bộ của hàm được gọi khi nó được gọi; . 1 Khi một hàm gọi một hàm khác hoặc gọi chính nó theo cách đệ quy, một bảng ký hiệu cục bộ mới sẽ được tạo cho lệnh gọi đó

Định nghĩa hàm liên kết tên hàm với đối tượng hàm trong bảng ký hiệu hiện tại. Trình thông dịch nhận ra đối tượng được trỏ tới bởi tên đó như một hàm do người dùng định nghĩa. Các tên khác cũng có thể trỏ đến cùng đối tượng chức năng đó và cũng có thể được sử dụng để truy cập chức năng

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

Đến từ các ngôn ngữ khác, bạn có thể phản đối rằng

>>> 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
642 không phải là hàm mà là thủ tục vì nó không trả về giá trị. Trên thực tế, ngay cả những hàm không có câu lệnh
>>> 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
643 cũng trả về một giá trị, mặc dù một giá trị khá nhàm chán. Giá trị này được gọi là
>>> 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
638 (đó là tên tích hợp). Việc ghi giá trị
>>> 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
638 thường bị trình thông dịch loại bỏ nếu đó là giá trị duy nhất được ghi. Bạn có thể xem nó nếu bạn thực sự muốn sử dụng
>>> 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
646

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

Thật đơn giản để viết một hàm trả về danh sách các số của dãy Fibonacci, thay vì in nó

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

Ví dụ này, như thường lệ, minh họa một số tính năng mới của Python

  • Câu lệnh

    >>> 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
    
    643 trả về với một giá trị từ một hàm.
    >>> 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
    
    643 không có đối số biểu thức trả về
    >>> 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
    
    638. Rơi khỏi phần cuối của hàm cũng trả về
    >>> 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
    
    638

  • Câu lệnh

    >>> 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
    
    651 gọi một phương thức của đối tượng danh sách
    >>> 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
    
    652. Một phương thức là một hàm 'thuộc về' một đối tượng và được đặt tên là
    >>> 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
    
    653, trong đó
    >>> 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
    
    654 là một số đối tượng (đây có thể là một biểu thức) và
    >>> 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
    
    655 là tên của một phương thức được xác định bởi kiểu của đối tượng. Các loại khác nhau xác định các phương pháp khác nhau. Các phương thức thuộc các loại khác nhau có thể có cùng tên mà không gây ra sự mơ hồ. (Có thể xác định các loại đối tượng và phương thức của riêng bạn, sử dụng các lớp, xem Lớp ) Phương thức
    >>> 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
    
    656 hiển thị trong ví dụ được xác định cho các đối tượng danh sách; . Trong ví dụ này, nó tương đương với
    >>> 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
    
    657, nhưng hiệu quả hơn.

4. 8. Thông tin thêm về cách xác định hàm¶

Cũng có thể định nghĩa các hàm với số lượng đối số thay đổi. Có ba hình thức, có thể được kết hợp

4. 8. 1. Giá trị đối số mặc định¶

Hình thức hữu ích nhất là chỉ định một giá trị mặc định cho một hoặc nhiều đối số. Điều này tạo ra một hàm có thể được gọi với ít đối số hơn nó được định nghĩa để cho phép. Ví dụ

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

Chức năng này có thể được gọi theo nhiều cách

  • chỉ đưa ra đối số bắt buộc.

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

  • đưa ra một trong những đối số tùy chọn.

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

  • hoặc thậm chí đưa ra tất cả các đối số.

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

Ví dụ này cũng giới thiệu từ khóa

>>> 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
661. Điều này kiểm tra xem một chuỗi có chứa một giá trị nhất định hay không

Các giá trị mặc định được đánh giá tại điểm định nghĩa hàm trong phạm vi xác định, sao cho

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

sẽ in

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

cảnh báo quan trọng. Giá trị mặc định chỉ được đánh giá một lần. Điều này tạo ra sự khác biệt khi mặc định là một đối tượng có thể thay đổi, chẳng hạn như danh sách, từ điển hoặc thể hiện của hầu hết các lớp. Ví dụ: hàm sau tích lũy các đối số được truyền cho nó trong các lần gọi tiếp theo

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

Điều này sẽ in

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

Nếu bạn không muốn mặc định được chia sẻ giữa các lần gọi tiếp theo, bạn có thể viết hàm như thế này để thay thế

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

4. 8. 2. Đối số từ khóa¶

Các hàm cũng có thể được gọi bằng cách sử dụng đối số từ khóa có dạng

>>> 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
663. Chẳng hạn, chức năng sau.

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

chấp nhận một đối số bắt buộc (

>>> 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
664) và ba đối số tùy chọn (
>>> 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
665,
>>> 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
666 và
>>> 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
667). Hàm này có thể được gọi theo bất kỳ cách nào sau đây

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

nhưng tất cả các cuộc gọi sau đây sẽ không hợp lệ

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

Trong một lệnh gọi hàm, các đối số từ khóa phải tuân theo các đối số vị trí. Tất cả các đối số từ khóa được truyền phải khớp với một trong các đối số được hàm chấp nhận (e. g.

>>> 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
668 không phải là đối số hợp lệ cho hàm
>>> 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
669) và thứ tự của chúng không quan trọng. Điều này cũng bao gồm các đối số không tùy chọn (e. g.
>>> 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
670 cũng hợp lệ). Không có đối số có thể nhận được một giá trị nhiều hơn một lần. Đây là một ví dụ không thành công do hạn chế này

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

Khi có tham số chính thức cuối cùng có dạng

>>> 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
671, nó sẽ nhận được một từ điển (xem Các loại ánh xạ — dict ) chứa tất cả các đối số từ khóa . Điều này có thể được kết hợp với một tham số chính thức có dạng
>>> 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
672 (được mô tả trong tiểu mục tiếp theo) nhận một bộ chứa các đối số vị trí ngoài danh sách tham số chính thức. (
>>> 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
672 phải xảy ra trước
>>> 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
671. ) Ví dụ: nếu chúng ta định nghĩa một hàm như thế này.

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

Nó có thể được gọi như thế này

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

và tất nhiên nó sẽ in

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

Lưu ý rằng thứ tự in các đối số từ khóa được đảm bảo khớp với thứ tự mà chúng được cung cấp trong lệnh gọi hàm

4. 8. 3. Tham số đặc biệt¶

Theo mặc định, các đối số có thể được chuyển đến một hàm Python theo vị trí hoặc theo từ khóa một cách rõ ràng. Đối với khả năng đọc và hiệu suất, nên hạn chế cách truyền đối số sao cho nhà phát triển chỉ cần xem định nghĩa hàm để xác định xem các mục được truyền theo vị trí, theo vị trí hoặc theo từ khóa hay theo từ khóa

Một định nghĩa chức năng có thể trông giống như

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

trong đó

>>> 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
675 và
>>> 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
626 là tùy chọn. Nếu được sử dụng, các ký hiệu này cho biết loại tham số theo cách các đối số có thể được truyền cho hàm. chỉ vị trí, vị trí hoặc từ khóa và chỉ từ khóa. Tham số từ khóa còn được gọi là tham số được đặt tên

4. 8. 3. 1. Đối số vị trí hoặc từ khóa¶

Nếu

>>> 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
675 và
>>> 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
626 không có trong định nghĩa hàm, các đối số có thể được chuyển đến hàm theo vị trí hoặc theo từ khóa

4. 8. 3. 2. Thông số chỉ dành cho vị trí¶

Xem xét điều này chi tiết hơn một chút, có thể đánh dấu các tham số nhất định là chỉ theo vị trí. Nếu chỉ có vị trí, thì thứ tự của tham số mới quan trọng và không thể chuyển tham số theo từ khóa. Các tham số chỉ vị trí được đặt trước một

>>> 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
675 (dấu gạch chéo về phía trước).
>>> 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
675 được sử dụng để phân tách hợp lý các tham số chỉ vị trí với các tham số còn lại. Nếu không có
>>> 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
675 trong định nghĩa hàm, thì không có tham số chỉ vị trí nào

Các tham số theo sau

>>> 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
675 có thể là vị trí hoặc từ khóa hoặc chỉ từ khóa

4. 8. 3. 3. Đối số chỉ có từ khóa¶

Để đánh dấu các tham số là chỉ từ khóa, cho biết các tham số phải được truyền bằng đối số từ khóa, hãy đặt một ____1626 trong danh sách đối số ngay trước tham số chỉ từ khóa đầu tiên

4. 8. 3. 4. Ví dụ hàm¶

Xem xét các định nghĩa hàm ví dụ sau chú ý đến các điểm đánh dấu

>>> 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
675 và
>>> 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
626

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

Định nghĩa hàm đầu tiên,

>>> 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
686, dạng quen thuộc nhất, không hạn chế quy ước gọi và các đối số có thể được truyền theo vị trí hoặc từ khóa

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

Hàm thứ hai

>>> 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
687 bị hạn chế chỉ sử dụng các tham số vị trí vì có một
>>> 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
675 trong định nghĩa hàm

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

Hàm thứ ba

>>> 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
689 chỉ cho phép các đối số từ khóa như được chỉ định bởi một
>>> 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
626 trong định nghĩa hàm

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

Và cái cuối cùng sử dụng cả ba quy ước gọi trong cùng một định nghĩa hàm

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

Cuối cùng, hãy xem xét định nghĩa hàm này có khả năng xung đột giữa đối số vị trí

>>> 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
691 và
>>> 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
692 có khóa
>>> 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
691

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

Không có lệnh gọi nào có thể khiến nó trả về

>>> 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
636 vì từ khóa
>>> 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
695 sẽ luôn liên kết với tham số đầu tiên. Ví dụ

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

Nhưng sử dụng

>>> 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
675 (đối số chỉ vị trí), có thể vì nó cho phép
>>> 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
691 làm đối số vị trí và
>>> 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
695 làm khóa trong đối số từ khóa

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

Nói cách khác, tên của các tham số chỉ vị trí có thể được sử dụng trong

>>> 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
692 mà không có sự mơ hồ

4. 8. 3. 5. Tóm tắt¶

Trường hợp sử dụng sẽ xác định tham số nào sẽ được sử dụng trong định nghĩa hàm

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

Theo hướng dẫn

  • Chỉ sử dụng vị trí nếu bạn muốn tên của các tham số không có sẵn cho người dùng. Điều này hữu ích khi tên tham số không có ý nghĩa thực sự, nếu bạn muốn thực thi thứ tự của các đối số khi hàm được gọi hoặc nếu bạn cần lấy một số tham số vị trí và từ khóa tùy ý

  • Chỉ sử dụng từ khóa khi tên có ý nghĩa và định nghĩa hàm dễ hiểu hơn bằng cách đặt tên rõ ràng hoặc bạn muốn ngăn người dùng dựa vào vị trí của đối số được truyền

  • Đối với API, chỉ sử dụng vị trí để ngăn các thay đổi API phá vỡ nếu tên của thông số được sửa đổi trong tương lai

4. 8. 4. Danh sách đối số tùy ý¶

Cuối cùng, tùy chọn ít được sử dụng nhất là chỉ định rằng một hàm có thể được gọi với số lượng đối số tùy ý. Các đối số này sẽ được gói gọn trong một bộ (xem Bộ và trình tự ). Trước số lượng đối số thay đổi, có thể xảy ra không hoặc nhiều đối số bình thường.

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

Thông thường, các đối số biến thiên này sẽ nằm cuối cùng trong danh sách các tham số hình thức, bởi vì chúng thu thập tất cả các đối số đầu vào còn lại được truyền cho hàm. Bất kỳ tham số chính thức nào xuất hiện sau tham số

>>> 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
700 đều là đối số 'chỉ từ khóa', nghĩa là chúng chỉ có thể được sử dụng làm từ khóa thay vì đối số vị trí

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

4. 8. 5. Giải nén danh sách đối số¶

Tình huống ngược lại xảy ra khi các đối số đã có trong danh sách hoặc bộ nhưng cần được giải nén để gọi hàm yêu cầu các đối số vị trí riêng biệt. Chẳng hạn, hàm

>>> 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
81 tích hợp mong đợi các đối số bắt đầu và dừng riêng biệt. Nếu chúng không có sẵn một cách riêng biệt, hãy viết lệnh gọi hàm với toán tử
>>> 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
626 để giải nén các đối số ra khỏi danh sách hoặc bộ dữ liệu

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

Theo cách tương tự, từ điển có thể cung cấp các đối số từ khóa với toán tử

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

>>> 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. Biểu thức Lambda¶

Các chức năng ẩn danh nhỏ có thể được tạo bằng từ khóa

>>> 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
704. Hàm này trả về tổng của hai đối số của nó.
>>> 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
705. Hàm lambda có thể được sử dụng ở bất cứ nơi nào cần có đối tượng hàm. Chúng bị giới hạn về mặt cú pháp trong một biểu thức duy nhất. Về mặt ngữ nghĩa, chúng chỉ là đường cú pháp cho một định nghĩa hàm bình thường. Giống như các định nghĩa hàm lồng nhau, các hàm lambda có thể tham chiếu các biến từ phạm vi chứa

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

Ví dụ trên sử dụng biểu thức lambda để trả về một hàm. Một cách sử dụng khác là truyền một hàm nhỏ làm đối số

>>> 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. Chuỗi tài liệu¶

Dưới đây là một số quy ước về nội dung và định dạng của chuỗi tài liệu

Dòng đầu tiên phải luôn là một bản tóm tắt ngắn gọn, súc tích về mục đích của đối tượng. Để cho ngắn gọn, nó không nên nêu rõ ràng tên hoặc loại của đối tượng, vì những thứ này có sẵn theo các cách khác (ngoại trừ nếu tên tình cờ là một động từ mô tả hoạt động của một chức năng). Dòng này phải bắt đầu bằng chữ in hoa và kết thúc bằng dấu chấm

Nếu có nhiều dòng hơn trong chuỗi tài liệu, thì dòng thứ hai phải để trống, tách phần tóm tắt khỏi phần còn lại của phần mô tả một cách trực quan. Các dòng sau phải là một hoặc nhiều đoạn văn mô tả quy ước gọi của đối tượng, tác dụng phụ của nó, v.v.

Trình phân tích cú pháp Python không loại bỏ thụt đầu dòng khỏi các ký tự chuỗi nhiều dòng trong Python, vì vậy các công cụ xử lý tài liệu phải loại bỏ thụt đầu dòng nếu muốn. Điều này được thực hiện bằng cách sử dụng quy ước sau. Dòng không trống đầu tiên sau dòng đầu tiên của chuỗi xác định số lượng thụt lề cho toàn bộ chuỗi tài liệu. (Chúng ta không thể sử dụng dòng đầu tiên vì nó thường liền kề với dấu ngoặc kép mở đầu của chuỗi nên phần thụt đầu dòng của nó không rõ ràng trong ký tự chuỗi. ) Khoảng trắng “tương đương” với thụt đầu dòng này sau đó sẽ bị xóa khỏi đầu tất cả các dòng của chuỗi. Các dòng bị thụt vào ít hơn sẽ không xảy ra, nhưng nếu chúng xuất hiện thì tất cả các khoảng trắng ở đầu của chúng sẽ bị xóa. Tính tương đương của khoảng trắng nên được kiểm tra sau khi mở rộng các tab (thông thường là 8 khoảng trắng)

Dưới đây là một ví dụ về chuỗi tài liệu nhiều dòng

>>> 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. Chú thích hàm¶

Chú thích hàm là thông tin siêu dữ liệu hoàn toàn tùy chọn về các loại được sử dụng bởi các hàm do người dùng xác định (xem PEP 3107 và PEP 484 để biết thêm thông tin).

Chú thích được lưu trữ trong thuộc tính

>>> 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
706 của hàm dưới dạng từ điển và không ảnh hưởng đến bất kỳ phần nào khác của hàm. Chú thích tham số được xác định bằng dấu hai chấm sau tên tham số, theo sau là biểu thức đánh giá giá trị của chú thích. Chú thích trả về được xác định bởi một ký tự
>>> 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
707, theo sau là một biểu thức, nằm giữa danh sách tham số và dấu hai chấm biểu thị phần cuối của câu lệnh
>>> 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
639. Ví dụ sau có đối số bắt buộc, đối số tùy chọn và giá trị trả về được chú thích.

>>> 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. Kiểu viết mã¶

Bây giờ bạn sắp viết các phần Python dài hơn, phức tạp hơn, đây là thời điểm tốt để nói về phong cách viết mã. Hầu hết các ngôn ngữ có thể được viết (hoặc ngắn gọn hơn, được định dạng) theo các phong cách khác nhau; . Giúp người khác dễ dàng đọc mã của bạn luôn là một ý tưởng hay và việc áp dụng một kiểu viết mã đẹp sẽ giúp ích rất nhiều cho điều đó

Đối với Python, PEP 8 đã nổi lên như một hướng dẫn về phong cách mà hầu hết các dự án đều tuân theo; . Mọi nhà phát triển Python nên đọc nó vào một thời điểm nào đó;

  • Sử dụng thụt lề 4 dấu cách và không có tab

    4 dấu cách là một sự thỏa hiệp tốt giữa thụt đầu dòng nhỏ (cho phép độ sâu lồng lớn hơn) và thụt đầu dòng lớn (dễ đọc hơn). Các tab giới thiệu sự nhầm lẫn và tốt nhất là bỏ qua

  • Ngắt dòng sao cho chúng không vượt quá 79 ký tự

    Điều này giúp người dùng có màn hình nhỏ và có thể có nhiều tệp mã cạnh nhau trên màn hình lớn hơn

  • Sử dụng các dòng trống để phân tách các hàm và lớp và các khối mã lớn hơn bên trong các hàm

  • Khi có thể, hãy đặt nhận xét trên một dòng của riêng họ

  • sử dụng docstrings

  • Sử dụng khoảng trắng xung quanh toán tử và sau dấu phẩy, nhưng không trực tiếp bên trong cấu trúc ngoặc.

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

  • Đặt tên nhất quán cho các lớp và chức năng của bạn; . Luôn sử dụng

    >>> 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
    
    712 làm tên cho đối số phương thức đầu tiên (xem Cái nhìn đầu tiên về các lớp để biết thêm về các lớp và phương thức).

  • Không sử dụng mã hóa ưa thích nếu mã của bạn được sử dụng trong môi trường quốc tế. Mặc định của Python, UTF-8 hoặc thậm chí ASCII đơn giản hoạt động tốt nhất trong mọi trường hợp

  • Tương tự như vậy, không sử dụng các ký tự không phải ASCII trong số nhận dạng nếu chỉ có một cơ hội nhỏ nhất là những người nói một ngôn ngữ khác sẽ đọc hoặc duy trì mã

chú thích

1

Trên thực tế, gọi theo tham chiếu đối tượng sẽ là một mô tả tốt hơn, vì nếu một đối tượng có thể thay đổi được chuyển, người gọi sẽ thấy bất kỳ thay đổi nào mà callee thực hiện đối với nó (các mục được chèn vào danh sách)