Không giống như các chức năng tích hợp sẵn được bao gồm trong ngôn ngữ lập trình Python mới nhất, một chức năng do người dùng xác định cho phép bạn có chức năng tạo công cụ tùy chỉnh hoàn toàn của riêng mình;
Ưu điểm cốt lõi của việc sử dụng hàm do người dùng xác định trong mã nguồn của bạn là tính linh hoạt. Nó cung cấp cho bạn sức mạnh để thực hiện lặp đi lặp lại một nhiệm vụ nhất định mà không cần phải viết lại toàn bộ chương trình của bạn theo từng dòng
Trong hướng dẫn này, tôi sẽ dạy bạn về các hàm do người dùng định nghĩa và cú pháp của chúng
- từ khóa chắc chắn
- xác định thân hàm
- tham số và đối số
- tham số mặc định
- khẳng định điều kiện tiên quyết
- chức năng đoản mạch với từ khóa return
- xác định docstrings
- *args [đối số]
- **kwargs [từ khóa-đối số],
- phạm vi [Toàn cầu và địa phương]
- gọi chức năng của bạn
Mục lục
- Cấu trúc hàm do người dùng định nghĩa trong Python
- Cách gọi một hàm trong Python
- Thông số so với. Tranh luận
- Đối số mặc định
- Các đối số có tiền tố * và ** có thuộc tính đặc biệt nào? . g. *args, **kwargs]
- * lập luận
- **kwargs
- Tài liệu [Docstrings]
- Tuyên bố trở lại
- Khẳng định điều kiện tiên quyết
- Phạm vi địa phương và Phạm vi toàn cầu
- Ví dụ thực tế về lý do tại sao các chức năng do người dùng xác định lại quan trọng
- Thí dụ
- Sự kết luận
Cấu trúc hàm do người dùng định nghĩa trong Python
Các hàm trong Python tuân theo một cú pháp cụ thể với ít biến thể. Cú pháp này phải được tuân theo, nếu không, bạn sẽ nhận được thông báo lỗi từ bảng điều khiển Python
Trong khối mã bên dưới, bạn sẽ tìm thấy cú pháp tiêu chuẩn của hàm do người dùng Python xác định.def function_name[parameters]:
"""docstring"""
statement[s]
return
Việc xác định một hàm yêu cầu sử dụng từ khóa Python tích hợp sẵn def, cho Trình thông dịch Python biết rằng bạn sẽ xác định thân hàm
Từ khóa def cần phải được theo sau bởi tên của chức năng
Thông thường, khi tôi đặt tên cho một hàm, tôi tuân theo thông lệ chung là đặt tên cho hàm của mình dựa trên hành động sẽ được thực hiện bởi hàm đó. Theo quy ước, tôi viết tên các chức năng của mình theo một mẫu chuẩn gọi là “trường hợp rắn” [ví dụ. Tên chức năng]
Tên hàm [ở định dạng Snake Case]Hành động [Nhiệm vụ mà hàm hoàn thành. ]upper_caseChuyển đổi tất cả các ký tự chữ cái trong chuỗi thành chữ hoa. Lower_caseChuyển đổi tất cả các ký tự chữ cái trong chuỗi thành chữ thường. times_twoNhân hai số nguyên bất kỳ. Các ví dụ về trường hợp rắn để đặt tên cho các hàm do người dùng xác định trong PythonCác tham số bên trong dấu ngoặc đơn sẽ truyền một số giá trị vào hàm này. Các tham số là tùy chọn;
Sau dấu ngoặc đơn, bạn phải nhập dấu hai chấm ở cuối tiêu đề hàm để thông báo cho Trình thông dịch Python rằng đây là phần cuối của dòng đầu tiên trong hàm của chúng ta
Tiếp theo, chúng ta phải xem xét Docstring của mình;
Chẳng hạn, chức năng của bạn cũng nên bao gồm ít nhất một câu lệnh hợp lệ làm cho chức năng trở nên hữu ích;
Cuối cùng, câu lệnh return sẽ trả về giá trị cuối của hàm;
Sau khi thực hiện một hành động cụ thể mà bạn chọn, giá trị được trả về này có thể được lưu trữ trong một biến bằng cách gán hàm của bạn cho một biến trong khi nó đang được gọi, chúng ta cũng sẽ khám phá chủ đề này sau, nhưng trước tiên, hãy xem qua
def greeting[name]:
"""
This is a simple function
to pass your name and greeting you
"""
print["Hello " + name]
Cách gọi một hàm trong Python
Đoạn mã trên là một ví dụ đơn giản về việc tạo chức năng của riêng bạn để chào người dùng, sau đó in lời chào đó ra Bảng điều khiển Python nơi người dùng có thể đọc được
Khối mã bên dưới cho biết cách gọi hàm “chào hỏi” do người dùng định nghĩa của chúng tôi. Lưu ý cách chức năng của chúng tôi không cần dấu gạch dưới trong tên của nó vì nó chỉ được đặt tên bằng một từ [lời chào], mặc dù nó vẫn ở định dạng chữ hoa chữ thường
greeting["Biden"]
đầu ra
Hello Biden
Lưu ý rằng chúng tôi đã viết “Biden” trong dấu ngoặc đơn của hàm khi gọi hàm
Chuỗi “Biden” được gọi là một đối số được gán cho tham số “tên” được xác định trong tiêu đề hàm của chúng tôi. Bây giờ chúng ta sẽ khám phá các tham số và đối số
Thông số so với. Tranh luận
Hầu hết các lập trình viên Python mới làm quen không biết sự khác biệt giữa các tham số và đối số, vì vậy hãy phân biệt chúng là gì…
Thông số. [các] từ khóa tùy ý nằm trong dấu ngoặc đơn của định nghĩa hàm, hoạt động như một trình giữ chỗ, tương tự như một biến, nó lưu trữ các giá trị có thể được truy cập để thao tác và tính toán dữ liệu sau khi hàm được gọi
Tranh luận. [các] giá trị được truyền cho một hàm, sau đó được lưu trữ trong các tham số để sử dụng tính toán, thao tác dữ liệu hoặc các tác vụ quan trọng khác hỗ trợ mục đích của một hàm trong chương trình
- đối số vị trí– một đối số trong đó giá trị được lưu trữ trong tham số được gán cho tham số đó dựa trên vị trí của đối số trong dấu ngoặc đơn và không được gán trực tiếp cho tham số bằng toán tử gán “=”, giống như phép gán biến, ví dụ:. chức năng[“Biden”]
- đối số từ khóa– một đối số được gán trực tiếp cho một tham số với toán tử gán “=”, tương tự như gán biến, ví dụ:. hàm[tên=”Biden”]
def greeting[name]:
"""
This is a simple function
to pass your name and greeting you
"""
print["Hello " + name]
greeting["Biden"]
greeting[name="Biden"]
đầu ra
Hello Biden Hello Biden
Đối số mặc định
Đối số mặc định là đối số từ khóa được gán trong định nghĩa hàm thay vì khi hàm được gọi
Mặc dù vậy, khi hàm được gọi, người dùng có cơ hội sử dụng đối số mặc định được gán cho tham số từ khóa bằng cách gọi hàm mà không chuyển bất kỳ giá trị mới nào cho đối số từ khóa
Mặt khác, người dùng có thể ghi đè giá trị được lưu trữ trong tham số từ khóa bằng cách chuyển một giá trị mới cho tham số từ khóa trong khi gọi hàm, tốt nhất là cùng loại dữ liệu với đối số từ khóa mặc định để tránh gặp phải bất kỳ lỗi nào trong chương trình của bạn
def hello[greeting="Hello"]:
print[f"{greeting}, what is your name?"]
hello[greeting='Hi there'] # overwriting the default argument
đầu ra
Hi there, what is your name?
Nói về lập luận, hãy thảo luận thêm hai loại lập luận nữa…
Các đối số có tiền tố * và ** có thuộc tính đặc biệt nào? . g. *args, **kwargs]
Khi tạo một hàm, chúng ta phải làm cho nó có thể nhận các giá trị để nó có thể được sử dụng nhiều lần bên trong [các] tập lệnh của bạn, nhưng nếu bạn không chắc chắn về số lượng đối số mà bạn sẽ cần truyền cho hàm của mình thì sao?
Hãy xem một ví dụ nhỏ
________số 8đầu ra
Traceback [most recent call last]: File "main.py", line 5, in update[[1, 2, 3], ["a", "b", "c"]] TypeError: update[] takes 1 positional argument but 2 were given
Khi chạy mã ở trên, bạn sẽ gặp lỗi nói rằng “cập nhật [] nhận 1 đối số vị trí nhưng 2 đối số đã được đưa ra”
Điều này xảy ra vì trình thông dịch Python dự kiến chỉ có một đối số [danh sách] chứ không phải nhiều đối số [danh sách]
* lập luận
Đây là sức mạnh của tham số *args. Hãy sửa đoạn mã trên và xem kết quả mới
def greeting[name]:
"""
This is a simple function
to pass your name and greeting you
"""
print["Hello " + name]
0đầu ra
def greeting[name]:
"""
This is a simple function
to pass your name and greeting you
"""
print["Hello " + name]
1Bây giờ hàm có thể nhận nhiều danh sách và biến và sử dụng chúng mà không gặp bất kỳ lỗi nào
Một điều khác *args có thể thực hiện là truy cập một mục cụ thể bên trong một chuỗi
def greeting[name]:
"""
This is a simple function
to pass your name and greeting you
"""
print["Hello " + name]
2đầu ra
def greeting[name]:
"""
This is a simple function
to pass your name and greeting you
"""
print["Hello " + name]
3Mã có thể truy cập bất kỳ mục cụ thể nào bên trong bộ đối tượng đã cho. Có, *args lưu trữ các chuỗi giá trị trong một đối tượng tuple
Một điều khác tôi muốn đề cập trước khi bắt đầu sử dụng và lợi ích của **kwargs là các hàm cũng có thể chấp nhận các đối số với cú pháp key=value
Hãy xem một ví dụ
def greeting[name]:
"""
This is a simple function
to pass your name and greeting you
"""
print["Hello " + name]
4đầu ra
def greeting[name]:
"""
This is a simple function
to pass your name and greeting you
"""
print["Hello " + name]
5**kwargs
Vì chúng ta đã tạo một hàm có thể chấp nhận ba tham số nên mọi thứ sẽ hoạt động tốt khi gọi hàm có ba đối số
Nhưng, nếu bạn không biết chúng ta cần bao nhiêu đối số cho hàm thì sao?
Đây là sức mạnh của **kwargs
def greeting[name]:
"""
This is a simple function
to pass your name and greeting you
"""
print["Hello " + name]
6đầu ra
def greeting[name]:
"""
This is a simple function
to pass your name and greeting you
"""
print["Hello " + name]
7**kwargs làm cho chức năng của bạn có thể chấp nhận nhiều từ khóa mà không chỉ định số lượng đối số
Trước khi tiếp tục, hãy tóm tắt nhanh về các tham số và đối số
Từ khóa bên trong dấu ngoặc đơn của định nghĩa hàm được gọi là tham số. Bạn có thể đặt tên bất cứ thứ gì bạn muốn, mặc dù cách tốt nhất là đặt tên mô tả loại dữ liệu sẽ được chuyển đến hàm dưới dạng đối số sau khi hàm được gọi
Tài liệu [Docstrings]
Để nhắc lại từ trước đó, một chuỗi tài liệu hoàn toàn là tùy chọn, nhưng được khuyên dùng cho các chức năng do người dùng xác định, đặc biệt nếu bạn đang làm việc theo nhóm với các lập trình viên khác
Ngay bên dưới tiêu đề chức năng là nơi bạn đặt tài liệu của mình;
Rất hữu ích khi truy cập tài liệu về hàm do người dùng xác định bên trong Bảng điều khiển Python bằng cách in tên hàm của bạn bằng. __doc__ lệnh/thuộc tính hoặc chuyển tên hàm của bạn sang hàm help[] tích hợp bên dưới
def greeting[name]:
"""
This is a simple function
to pass your name and greeting you
"""
print["Hello " + name]
8đầu ra
def greeting[name]:
"""
This is a simple function
to pass your name and greeting you
"""
print["Hello " + name]
9Tuyên bố trở lại
Cho đến nay, chúng tôi chỉ sử dụng các câu lệnh in trong các chức năng của mình. Đôi khi, chúng tôi có thể không muốn in một giá trị vào Bảng điều khiển Python Thay vào đó, chúng tôi có thể muốn sử dụng một giá trị được tính bởi một hàm cho mục đích hoặc phép tính khác trong tập lệnh của chúng tôi. chúng ta làm gì sau đó?
Hãy xem một ví dụ để hiểu thêm
greeting["Biden"]
0đầu ra
greeting["Biden"]
1Khi bạn chạy mã, bạn sẽ không nhận được gì trên màn hình của mình
Điều này xảy ra bởi vì chúng tôi đã thực hiện phép tính nhưng chúng tôi đã không yêu cầu hàm trả lại bất kỳ [các] giá trị nào cho chúng tôi. vì vậy lần này hãy sử dụng câu lệnh return
greeting["Biden"]
2đầu ra
greeting["Biden"]
3Bây giờ bạn có thể thấy hàm trả về số 8 hiển nhiên khi nhân 4 hai lần
Lưu ý rằng chúng ta vẫn phải chuyển hàm tính toán của mình cho hàm in khi chúng ta gọi nó trong trường hợp chúng ta muốn thấy giá trị trả về là 8 được in ra Bảng điều khiển Python
Hàm tính toán của chúng tôi cũng có thể được lưu vào một biến trong khi nó đang được gọi, sau đó được sử dụng như bất kỳ giá trị, đối tượng hoặc biểu thức nào khác có thể được lưu vào một biến, xem bên dưới
greeting["Biden"]
4đầu ra
greeting["Biden"]
3Lưu ý rằng không có gì trong định nghĩa hàm có thể được thực thi ngoài câu lệnh return bên trong hàm. Vì vậy, trong hầu hết các trường hợp, câu lệnh return sẽ là dòng cuối cùng trong thân hàm của bạn
Quá trình kết thúc chức năng của bạn bằng từ khóa trả về được gọi là rút ngắn chức năng
Khẳng định điều kiện tiên quyết
Khẳng định là một từ khóa trong Python được sử dụng trong một hàm hoặc bất kỳ đâu trong mã python của bạn để gắn cờ lỗi nếu có điều gì đó không hợp lý xảy ra mà bạn đã đặt trước đó. Khẳng định luôn giả định một điều kiện được chỉ định đánh giá là Đúng
Hãy xem một ví dụ cho điều này để hiểu thêm
greeting["Biden"]
6đầu ra
greeting["Biden"]
7Đoạn mã trên rõ ràng sẽ hiển thị cho bạn một lỗi, giải thích “AssertionError. Độ tuổi không thể âm”. Từ khóa khẳng định sẽ hữu ích trong chức năng của bạn vì nó cho phép chương trình biết rằng có điều gì đó không ổn với một phần dữ liệu cụ thể
Phạm vi địa phương và Phạm vi toàn cầu
Phạm vi đề cập đến vị trí của một biến trong mã Python của bạn
Phạm vi toàn cầu. Biến toàn cục là một biến được đặt/xác định trong tập lệnh/tệp Python chính của bạn. Một biến toàn cầu có thể được truy cập ở bất cứ đâu trong tập lệnh Python của bạn, gợi ý. toàn cầu hoặc có thể truy cập trên toàn cầu/không dành riêng cho chương trình của bạn
Phạm vi địa phương. Biến cục bộ là một biến được đặt/xác định trong thân hàm, chỉ có thể được truy cập trong hàm đã nói. Vị trí của biến cục bộ đó nằm trong phạm vi cục bộ của hàm vì biến đó là cục bộ/chỉ dành riêng cho hàm
greeting["Biden"]
8đầu ra
greeting["Biden"]
9Trong khối mã ở trên, chúng ta có thể thấy rằng biến x cục bộ được in thay vì biến x toàn cục vì câu lệnh in được thực thi trên biến cục bộ, không phải biến toàn cục
Ví dụ thực tế về lý do tại sao các chức năng do người dùng xác định lại quan trọng
Các chương trình của chúng ta thường mô hình hóa các tình huống, sự kiện hoặc vấn đề trong thế giới thực, vì vậy, hãy áp dụng Hàm do người dùng xác định trong Python cho một vấn đề trong thế giới thực trong toán học
Thí dụ
Xác định hàm do người dùng xác định theo ký hiệu tổng
Hello Biden0
đầu ra
Hello Biden1
Sự kết luận
Khi các vấn đề kinh doanh công nghệ ngày nay buộc bạn phải tạo ra các giải pháp phần mềm rất lớn và phức tạp;