Hướng dẫn what are void functions in python give an example? - chức năng void trong python là gì đưa ra một ví dụ?

  1. Nhà
  2. Hướng dẫn Python
  3. Chức năng trong Python

Cập nhật lần cuối vào ngày 22 tháng 9 năm 2020

Show

Cho đến nay trong khóa học này, chúng tôi đã sử dụng các chức năng tích hợp đi kèm với Python. Trong bài học này, chúng ta sẽ tìm hiểu làm thế nào chúng ta có thể tạo ra các chức năng của riêng mình. Nhưng trước khi chúng ta làm điều đó, chúng ta hãy dành thời gian để tìm hiểu lý do tại sao chúng ta thậm chí cần chúng ngay từ đầu.

Giả sử bạn muốn tạo một chương trình cho phép người dùng tính tổng giữa hai số. Tại thời điểm này, bạn không nên có bất kỳ vấn đề nào để viết các chương trình như vậy; Dù sao, mã của bạn có thể trông giống như vậy:

sum = 0
start = 10
end = 30
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)

Thử ngay bây giờ

Chương trình này tính toán tổng của tất cả các số từ

import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
2 đến
import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
3. Nếu chúng tôi muốn tính tổng số các số từ
import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
4 đến
import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
5, chúng tôi sẽ cần cập nhật chương trình như sau:

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)

Như bạn có thể thấy cả hai phiên bản của chương trình là gần như giống hệt nhau, sự khác biệt duy nhất là các giá trị của các biến

import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
6 và
import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
7. Vì vậy, mỗi khi chúng tôi muốn tính tổng của hai số, chúng tôi sẽ cần cập nhật nguồn của chương trình. Sẽ tốt nếu chúng tôi bằng cách nào đó chỉ sử dụng lại toàn bộ mã mà không thực hiện bất kỳ sửa đổi nào. Chúng ta có thể làm điều đó bằng cách sử dụng các chức năng.

Hàm # là gì

Một chức năng được đặt tên là nhóm các câu lệnh, thực hiện một nhiệm vụ cụ thể. Cú pháp xác định hàm như sau:

def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>

Một chức năng bao gồm hai phần: tiêu đề và cơ thể. Tiêu đề chức năng bắt đầu với từ khóa

import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
8, theo sau là tên của hàm, theo sau là các đối số và kết thúc bằng dấu hai chấm (
import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
9).

import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
8 là một từ khóa dành riêng, vì vậy bạn không nên sử dụng nó như một tên biến hoặc tên chức năng trong các chương trình của mình.
Hello !
Today is 2017-06-20 13:20:45.281651
1 có thể là bất kỳ định danh hợp lệ. Sau tên hàm, chúng tôi có một danh sách các đối số bên trong dấu ngoặc đơn được phân tách bằng dấu phẩy (
Hello !
Today is 2017-06-20 13:20:45.281651
2). Chúng tôi sử dụng các đối số này để truyền dữ liệu cần thiết cho hàm. Một chức năng có thể lấy bất kỳ số lượng đối số hoặc không có gì cả. Nếu hàm không chấp nhận bất kỳ đối số nào thì dấu ngoặc đơn bị bỏ trống.

Trong dòng tiếp theo, chúng ta có một khối các câu lệnh hoặc cơ thể chức năng. Cơ thể chức năng chứa các câu lệnh xác định những gì chức năng làm. Như thường lệ, Python sử dụng thụt lề các câu lệnh để xác định khi nào khối bắt đầu và kết thúc. Tất cả các câu lệnh trong phần thân của hàm phải được thụt lề như nhau nếu không bạn sẽ gặp lỗi cú pháp.

Đặc biệt chú ý đến tuyên bố cuối cùng trong cơ thể chức năng i.e

Hello !
Today is 2017-06-20 13:20:45.281651
3. Câu lệnh
Hello !
Today is 2017-06-20 13:20:45.281651
4 được sử dụng để trả về một giá trị từ hàm. Tuyên bố
Hello !
Today is 2017-06-20 13:20:45.281651
4 không bắt buộc, một số giá trị trả về hàm trong khi khác thì không. Nếu một hàm không có câu lệnh
Hello !
Today is 2017-06-20 13:20:45.281651
4 trong phần thân thì từ khóa được dành riêng
Hello !
Today is 2017-06-20 13:20:45.281651
7 được trả về tự động.
Hello !
Today is 2017-06-20 13:20:45.281651
7 thực sự là một đối tượng của loại
Hello !
Today is 2017-06-20 13:20:45.281651
9 tích hợp. Đừng lo lắng nếu bạn thấy câu lệnh
Hello !
Today is 2017-06-20 13:20:45.281651
4 khó hiểu; Chúng không, chúng tôi sẽ thảo luận chi tiết về tuyên bố
Hello !
Today is 2017-06-20 13:20:45.281651
4 trong phần sắp tới.

Đây là chức năng nhỏ in ngày và giờ hiện tại cùng với lời chào:

python101/Chapter-13/first_function.py

import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

Thử ngay bây giờ

Chương trình này tính toán tổng của tất cả các số từ

import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
2 đến
import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
3. Nếu chúng tôi muốn tính tổng số các số từ
import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
4 đến
import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
5, chúng tôi sẽ cần cập nhật chương trình như sau:

Như bạn có thể thấy cả hai phiên bản của chương trình là gần như giống hệt nhau, sự khác biệt duy nhất là các giá trị của các biến import datetime def greet(): print("Hello !") print("Today is", datetime.datetime.now()) greet() 6 và import datetime def greet(): print("Hello !") print("Today is", datetime.datetime.now()) greet() 7. Vì vậy, mỗi khi chúng tôi muốn tính tổng của hai số, chúng tôi sẽ cần cập nhật nguồn của chương trình. Sẽ tốt nếu chúng tôi bằng cách nào đó chỉ sử dụng lại toàn bộ mã mà không thực hiện bất kỳ sửa đổi nào. Chúng ta có thể làm điều đó bằng cách sử dụng các chức năng.

Hàm # là gì

function_name(arg1, arg2, arg3, ... argN)

Một chức năng được đặt tên là nhóm các câu lệnh, thực hiện một nhiệm vụ cụ thể. Cú pháp xác định hàm như sau:

Một chức năng bao gồm hai phần: tiêu đề và cơ thể. Tiêu đề chức năng bắt đầu với từ khóa

import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
8, theo sau là tên của hàm, theo sau là các đối số và kết thúc bằng dấu hai chấm (
import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
9).

greet()  # calling greet() function

python101/Chapter-13/calling_first_function.py

import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()

Thử ngay bây giờ

Output:

Hello !
Today is 2017-06-20 13:20:45.281651

Chương trình này tính toán tổng của tất cả các số từ

import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
2 đến
import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
3. Nếu chúng tôi muốn tính tổng số các số từ
import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
4 đến
import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
5, chúng tôi sẽ cần cập nhật chương trình như sau:

python101/Chapter-13/call_before_definition.py

import datetime

greet() ## ERROR: trying to call greet() before its defined

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

Thử ngay bây giờ

Output:

q@vm:~/python101/Chapter-13$ python call_before_definition.py 
Traceback (most recent call last):
  File "call_before_definition.py", line 3, in 
    greet() ## ERROR: trying to call greet() before its defined
NameError: name 'greet' is not defined

Chương trình này tính toán tổng của tất cả các số từ

import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
2 đến
import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
3. Nếu chúng tôi muốn tính tổng số các số từ
import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
4 đến
import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
5, chúng tôi sẽ cần cập nhật chương trình như sau:

Như bạn có thể thấy cả hai phiên bản của chương trình là gần như giống hệt nhau, sự khác biệt duy nhất là các giá trị của các biến

import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
6 và
import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
7. Vì vậy, mỗi khi chúng tôi muốn tính tổng của hai số, chúng tôi sẽ cần cập nhật nguồn của chương trình. Sẽ tốt nếu chúng tôi bằng cách nào đó chỉ sử dụng lại toàn bộ mã mà không thực hiện bất kỳ sửa đổi nào. Chúng ta có thể làm điều đó bằng cách sử dụng các chức năng.

python101/Chapter-13/transfer_of_control.py

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
0

Thử ngay bây giờ

Output:

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
1

Chương trình này tính toán tổng của tất cả các số từ

import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
2 đến
import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
3. Nếu chúng tôi muốn tính tổng số các số từ
import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
4 đến
import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
5, chúng tôi sẽ cần cập nhật chương trình như sau:

Hướng dẫn what are void functions in python give an example? - chức năng void trong python là gì đưa ra một ví dụ?

Chương trình trước đây của chúng tôi chỉ có chức năng. Không có gì lạ khi các chương trình có hàng trăm hoặc thậm chí hàng ngàn chức năng. Trong Python, đó là một quy ước phổ biến để xác định một hàm gọi là

q@vm:~/python101/Chapter-13$ python call_before_definition.py 
Traceback (most recent call last):
  File "call_before_definition.py", line 3, in 
    greet() ## ERROR: trying to call greet() before its defined
NameError: name 'greet' is not defined
5 được gọi khi chương trình bắt đầu. Hàm
q@vm:~/python101/Chapter-13$ python call_before_definition.py 
Traceback (most recent call last):
  File "call_before_definition.py", line 3, in 
    greet() ## ERROR: trying to call greet() before its defined
NameError: name 'greet' is not defined
5 này sau đó tiếp tục gọi chức năng khác khi cần thiết. Chương trình sau đây thể hiện luồng kiểm soát chương trình khi chúng tôi có hai chức năng trong một chương trình.

python101/Chapter-13/two_func_program_control.py

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
2

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
3

Thử ngay bây giờ

Trong các dòng 3-5 và 8-11, chúng tôi đã xác định hai hàm

import datetime

greet() ## ERROR: trying to call greet() before its defined

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())
2 và
q@vm:~/python101/Chapter-13$ python call_before_definition.py 
Traceback (most recent call last):
  File "call_before_definition.py", line 3, in 
    greet() ## ERROR: trying to call greet() before its defined
NameError: name 'greet' is not defined
5. Hàm
import datetime

greet() ## ERROR: trying to call greet() before its defined

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())
2 hiện được cập nhật để chấp nhận một đối số gọi là
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
00, sau đó nó sử dụng trong dòng tiếp theo để chào người dùng.

Hàm

q@vm:~/python101/Chapter-13$ python call_before_definition.py 
Traceback (most recent call last):
  File "call_before_definition.py", line 3, in 
    greet() ## ERROR: trying to call greet() before its defined
NameError: name 'greet' is not defined
5 không chấp nhận bất kỳ đối số nào và có ba tuyên bố bên trong cơ thể.

Câu lệnh trong dòng 13, gọi hàm

q@vm:~/python101/Chapter-13$ python call_before_definition.py 
Traceback (most recent call last):
  File "call_before_definition.py", line 3, in 
    greet() ## ERROR: trying to call greet() before its defined
NameError: name 'greet' is not defined
5. Kiểm soát chương trình nhảy vào cơ thể của hàm
q@vm:~/python101/Chapter-13$ python call_before_definition.py 
Traceback (most recent call last):
  File "call_before_definition.py", line 3, in 
    greet() ## ERROR: trying to call greet() before its defined
NameError: name 'greet' is not defined
5. Câu lệnh đầu tiên bên trong chuỗi in
q@vm:~/python101/Chapter-13$ python call_before_definition.py 
Traceback (most recent call last):
  File "call_before_definition.py", line 3, in 
    greet() ## ERROR: trying to call greet() before its defined
NameError: name 'greet' is not defined
5
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
05 vào bảng điều khiển. Câu lệnh trong dòng 10, gọi hàm
import datetime

greet() ## ERROR: trying to call greet() before its defined

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())
2 với đối số
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
07 sẽ được gán cho biến
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
00 trong tiêu đề chức năng. Tại thời điểm này, việc thực hiện các câu lệnh sau cuộc gọi đến
import datetime

greet() ## ERROR: trying to call greet() before its defined

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())
2 dừng lại và kiểm soát chương trình nhảy vào phần thân của hàm
import datetime

greet() ## ERROR: trying to call greet() before its defined

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())
2. Sau khi thực hiện phần thân của chức năng
import datetime

greet() ## ERROR: trying to call greet() before its defined

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())
2, điều khiển chương trình nhảy trở lại nơi nó rời khỏi và thực thi câu lệnh
import datetime

greet() ## ERROR: trying to call greet() before its defined

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())
3 trong dòng 11. Vì không còn câu lệnh nào để thực thi trong hàm
q@vm:~/python101/Chapter-13$ python call_before_definition.py 
Traceback (most recent call last):
  File "call_before_definition.py", line 3, in 
    greet() ## ERROR: trying to call greet() before its defined
NameError: name 'greet' is not defined
5 và điều khiển chương trình nhảy trở lại nơi nó rời đi Tắt để thực thi các câu lệnh sau khi gọi chức năng (dòng 13).

Các biến cục bộ, biến toàn cầu và phạm vi #

Phạm vi biến: Phạm vi của một biến đề cập đến một phần của chương trình nơi nó có thể được truy cập. The scope of a variable refers to the part of the program where it can be accessed.

Biến chúng tôi tạo bên trong hàm được gọi là biến cục bộ. Các biến cục bộ chỉ có thể được truy cập bên trong phần thân của hàm được xác định. Nói cách khác, phạm vi của biến cục bộ bắt đầu từ điểm chúng được xác định và tiếp tục cho đến khi kết thúc hàm. Các biến cục bộ phải chịu bộ sưu tập rác ngay khi hàm kết thúc. Do đó, cố gắng truy cập một biến cục bộ bên ngoài phạm vi của nó sẽ dẫn đến lỗi.

Ở phía bên kia của quang phổ, chúng ta có các biến toàn cầu. Biến toàn cầu là các biến được xác định bên ngoài bất kỳ chức năng nào. Phạm vi của biến toàn cầu bắt đầu từ điểm chúng được xác định và tiếp tục cho đến khi chương trình kết thúc.

Bây giờ hãy xem xét các ví dụ sau:

Ví dụ 1::

python101/Chapter-13/variable_scope.py

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
4

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
5

Thử ngay bây giờ

Output:

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
6

Trong các dòng 3-5 và 8-11, chúng tôi đã xác định hai hàm

import datetime

greet() ## ERROR: trying to call greet() before its defined

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())
2 và
q@vm:~/python101/Chapter-13$ python call_before_definition.py 
Traceback (most recent call last):
  File "call_before_definition.py", line 3, in 
    greet() ## ERROR: trying to call greet() before its defined
NameError: name 'greet' is not defined
5. Hàm
import datetime

greet() ## ERROR: trying to call greet() before its defined

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())
2 hiện được cập nhật để chấp nhận một đối số gọi là
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
00, sau đó nó sử dụng trong dòng tiếp theo để chào người dùng.

Hàm

q@vm:~/python101/Chapter-13$ python call_before_definition.py 
Traceback (most recent call last):
  File "call_before_definition.py", line 3, in 
    greet() ## ERROR: trying to call greet() before its defined
NameError: name 'greet' is not defined
5 không chấp nhận bất kỳ đối số nào và có ba tuyên bố bên trong cơ thể.

Output:

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
7

Câu lệnh trong dòng 13, gọi hàm

q@vm:~/python101/Chapter-13$ python call_before_definition.py 
Traceback (most recent call last):
  File "call_before_definition.py", line 3, in 
    greet() ## ERROR: trying to call greet() before its defined
NameError: name 'greet' is not defined
5. Kiểm soát chương trình nhảy vào cơ thể của hàm
q@vm:~/python101/Chapter-13$ python call_before_definition.py 
Traceback (most recent call last):
  File "call_before_definition.py", line 3, in 
    greet() ## ERROR: trying to call greet() before its defined
NameError: name 'greet' is not defined
5. Câu lệnh đầu tiên bên trong chuỗi in
q@vm:~/python101/Chapter-13$ python call_before_definition.py 
Traceback (most recent call last):
  File "call_before_definition.py", line 3, in 
    greet() ## ERROR: trying to call greet() before its defined
NameError: name 'greet' is not defined
5
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
05 vào bảng điều khiển. Câu lệnh trong dòng 10, gọi hàm
import datetime

greet() ## ERROR: trying to call greet() before its defined

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())
2 với đối số
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
07 sẽ được gán cho biến
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
00 trong tiêu đề chức năng. Tại thời điểm này, việc thực hiện các câu lệnh sau cuộc gọi đến
import datetime

greet() ## ERROR: trying to call greet() before its defined

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())
2 dừng lại và kiểm soát chương trình nhảy vào phần thân của hàm
import datetime

greet() ## ERROR: trying to call greet() before its defined

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())
2. Sau khi thực hiện phần thân của chức năng
import datetime

greet() ## ERROR: trying to call greet() before its defined

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())
2, điều khiển chương trình nhảy trở lại nơi nó rời khỏi và thực thi câu lệnh
import datetime

greet() ## ERROR: trying to call greet() before its defined

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())
3 trong dòng 11. Vì không còn câu lệnh nào để thực thi trong hàm
q@vm:~/python101/Chapter-13$ python call_before_definition.py 
Traceback (most recent call last):
  File "call_before_definition.py", line 3, in 
    greet() ## ERROR: trying to call greet() before its defined
NameError: name 'greet' is not defined
5 và điều khiển chương trình nhảy trở lại nơi nó rời đi Tắt để thực thi các câu lệnh sau khi gọi chức năng (dòng 13).

Các biến cục bộ, biến toàn cầu và phạm vi #

Phạm vi biến: Phạm vi của một biến đề cập đến một phần của chương trình nơi nó có thể được truy cập.

python101/Chapter-13/same_global_and_local.py

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
8

Thử ngay bây giờ

Output:

Biến chúng tôi tạo bên trong hàm được gọi là biến cục bộ. Các biến cục bộ chỉ có thể được truy cập bên trong phần thân của hàm được xác định. Nói cách khác, phạm vi của biến cục bộ bắt đầu từ điểm chúng được xác định và tiếp tục cho đến khi kết thúc hàm. Các biến cục bộ phải chịu bộ sưu tập rác ngay khi hàm kết thúc. Do đó, cố gắng truy cập một biến cục bộ bên ngoài phạm vi của nó sẽ dẫn đến lỗi.

Ở phía bên kia của quang phổ, chúng ta có các biến toàn cầu. Biến toàn cầu là các biến được xác định bên ngoài bất kỳ chức năng nào. Phạm vi của biến toàn cầu bắt đầu từ điểm chúng được xác định và tiếp tục cho đến khi chương trình kết thúc.

python101/Chapter-13/same_variable_names_in_different_functions.py

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
9

def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
0

Thử ngay bây giờ

Output:

def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
1

Bây giờ hãy xem xét các ví dụ sau:

Ví dụ 1:

Trong dòng 1, chúng tôi đã tạo một biến toàn cầu có tên

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
14. Sau đó, nó được truy cập trong dòng 12, bên trong hàm
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
15 và trong dòng 17, bên ngoài hàm. Chúng tôi cũng đã khai báo một biến cục bộ có tên
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
16 bên trong hàm
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
15. Sau đó, nó được truy cập bên trong hàm trong dòng 9.

def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
2

Khi hàm

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
27 được gọi bằng đối số, giá trị của đối số được gán cho biến
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
20 và câu lệnh
import datetime

greet() ## ERROR: trying to call greet() before its defined

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())
3 sẽ in giá trị của
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
20 sau khi thêm
import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
4 vào nó.

Chương trình sau đây trình bày cách gọi một chức năng với đối số.

python101/Chapter-13/function_argument.py

def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
3

Thử ngay bây giờ

Output:

Trong dòng 6, hàm

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
27 được gọi với đối số
import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
4. Giá trị của đối số sau đó được gán cho biến tham số
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
20.

Ví dụ 2: Hàm để tính toán giai thừa của một số. Function to calculate the factorial of a number.

python101/Chapter-13/factorial.py

def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
4

Thử ngay bây giờ

Output:

Trong dòng 6, hàm

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
27 được gọi với đối số
import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
4. Giá trị của đối số sau đó được gán cho biến tham số
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
20.

def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
5

Ví dụ 2: Hàm để tính toán giai thừa của một số.

def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
6

Lượng của một số

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
35 được định nghĩa là phép nhân của tất cả các chữ số từ
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
36 thành
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
35.

trong đó
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
38 biểu thị giai thừa của
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
35. Dưới đây là một số ví dụ:
Bây giờ, hãy xem cách thức hoạt động của vòng lặp cho giá trị của
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
35 là
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
41:
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
43
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
44
Trước khi bắt đầu vòng lặp
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
42 không được xác định
Sau lần lặp thứ nhất
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
45
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
46
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
47
Sau lần lặp thứ 2
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
48
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
49
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
50
Sau lần lặp thứ 3
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
51
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
52
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
53
Sau lần lặp thứ 4
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
54

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
55

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
56: Passing multiple arguments to the function

python101/Chapter-13/multiple_arguments.py

def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
7

Thử ngay bây giờ

Output:

def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
8

Sau khi vòng lặp lặp thứ 4 chấm dứt và chức năng

import datetime

greet() ## ERROR: trying to call greet() before its defined

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())
3 in giai thừa của số.

Ví dụ 3: Chuyển nhiều đối số cho hàm

Khi hàm sum = 0 start = 100 end = 200 for i in range(start, end+1): sum += i print("Sum is", sum) 58 được gọi trong dòng 8, đối số import datetime def greet(): print("Hello !") print("Today is", datetime.datetime.now()) greet() 2 được truyền đến biến tham số sum = 0 start = 100 end = 200 for i in range(start, end+1): sum += i print("Sum is", sum) 60 và sum = 0 start = 100 end = 200 for i in range(start, end+1): sum += i print("Sum is", sum) 61 được chuyển đến biến tham số sum = 0 start = 100 end = 200 for i in range(start, end+1): sum += i print("Sum is", sum) 62.

Thứ tự của các đối số được truyền trong khi gọi hàm phải khớp với thứ tự của các tham số trong tiêu đề hàm, nếu không, bạn có thể nhận được kết quả không mong muốn.

Vượt qua giá trị #

def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
9

Thử ngay bây giờ

Output:

import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())
0

Hãy nhớ lại rằng mọi thứ trong Python là đối tượng. Vì vậy, một biến cho một đối tượng, thực sự là một tham chiếu đến đối tượng. Nói cách khác, một biến lưu trữ địa chỉ nơi một đối tượng được lưu trữ trong bộ nhớ. Nó không chứa chính đối tượng thực tế.

Hướng dẫn what are void functions in python give an example? - chức năng void trong python là gì đưa ra một ví dụ?

Khi một hàm được gọi với các đối số, đó là địa chỉ của đối tượng được lưu trữ trong đối số được truyền đến biến tham số. Tuy nhiên, chỉ vì mục đích đơn giản, chúng tôi nói rằng giá trị của đối số được chuyển đến tham số trong khi gọi hàm. Cơ chế này được gọi là vượt qua theo giá trị. Xem xét ví dụ sau:

  1. Lưu ý rằng các giá trị

    sum = 0
    start = 100
    end = 200
    for i in range(start, end+1):
        sum += i    
    
    print("Sum is", sum)
    
    63 là như nhau. Điều này có nghĩa là biến
    sum = 0
    start = 100
    end = 200
    for i in range(start, end+1):
        sum += i    
    
    print("Sum is", sum)
    
    64 và
    sum = 0
    start = 100
    end = 200
    for i in range(start, end+1):
        sum += i    
    
    print("Sum is", sum)
    
    65 tham chiếu cùng một đối tượng. Nói cách khác, cả
    sum = 0
    start = 100
    end = 200
    for i in range(start, end+1):
        sum += i    
    
    print("Sum is", sum)
    
    64 và
    sum = 0
    start = 100
    end = 200
    for i in range(start, end+1):
        sum += i    
    
    print("Sum is", sum)
    
    65 đều chỉ vào cùng một vị trí bộ nhớ trong đó đối tượng
    sum = 0
    start = 100
    end = 200
    for i in range(start, end+1):
        sum += i    
    
    print("Sum is", sum)
    
    68 (
    import datetime
    
    def greet():
        print("Hello !")
        print("Today is", datetime.datetime.now())
    
    greet()
    
    4) được lưu trữ.

  2. Hành vi này có hai hậu quả quan trọng:

Nếu các đối số được truyền cho chức năng là bất biến, thì các thay đổi được thực hiện đối với biến tham số sẽ không ảnh hưởng đến đối số.

Tuy nhiên, nếu đối số được truyền cho hàm là có thể thay đổi, thì các thay đổi được thực hiện đối với biến tham số sẽ ảnh hưởng đến đối số.: Passing immutable objects to function.

python101/Chapter-13/passing_immutable_objects.py

import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())
1

Thử ngay bây giờ

Output:

import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())
2

Hãy xem xét hành vi này bằng cách lấy một số ví dụ:

Ví dụ 1: Chuyển các đối tượng bất biến cho chức năng.

Trong dòng 7,

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
15 được gọi với một đối số
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
64 (chỉ vào một đối tượng bất biến
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
68). Giá trị của
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
64 được truyền đến tham số
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
65. Bên trong giá trị hàm của
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
65 được tăng lên bởi
import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
4 (dòng 3). Khi hàm kết thúc, câu lệnh in trong dòng 8 được thực thi và chuỗi
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
77 được in vào bảng điều khiển. Điều này chứng minh rằng bất kể chức năng nào làm gì đối với
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
65, giá trị của
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
64 vẫn giữ nguyên.
: Passing mutable objects to function

python101/Chapter-13/passing_mutable_objects.py

import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())
3

Thử ngay bây giờ

Output:

import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())
4

Nếu bạn nghĩ về nó, hành vi này có ý nghĩa hoàn hảo. Hãy nhớ lại rằng nội dung của các đối tượng bất biến không thể thay đổi. Vì vậy, bất cứ khi nào chúng tôi gán một giá trị số nguyên mới cho một biến, về cơ bản, chúng tôi về cơ bản, chúng tôi sẽ tạo một đối tượng

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
68 hoàn chỉnh và đồng thời gán tham chiếu của đối tượng mới cho biến. Đây chính xác là những gì đang xảy ra bên trong hàm
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
15.

Ví dụ 2: Chuyển các đối tượng có thể thay đổi cho chức năng

Mã gần như giống nhau, nhưng ở đây chúng tôi đang chuyển một danh sách cho hàm thay vì số nguyên. Vì danh sách là một đối tượng có thể thay đổi, do đó, các thay đổi được thực hiện bởi hàm

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
15 trong dòng 2, ảnh hưởng đến đối tượng được chỉ ra bởi biến
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
64.

  1. Đối số từ vị trí và từ khóa #
  2. Từ khóa đối số.

Trong phương pháp đầu tiên, chúng tôi chuyển các đối số cho một hàm theo cùng thứ tự với các tham số tương ứng của chúng trong tiêu đề hàm. Chúng tôi đã sử dụng phương pháp này để chuyển các đối số cho các chức năng của chúng tôi. Ví dụ:

python101/Chapter-13/pythagorean_triplets.py

import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())
5

Thử ngay bây giờ

Tuyên bố

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
84 vượt qua
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
85 đến
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
86,
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
41 đến
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
88 và
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
89 đến
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
90 và in
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
91. Tuy nhiên, tuyên bố
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
92, chuyển
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
85 cho cơ sở,
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
89 đến
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
88 và
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
41 đến
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
90 và in
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
98, điều này là sai. Vì vậy, khi sử dụng các đối số vị trí luôn đảm bảo rằng thứ tự của các đối số trong lệnh gọi chức năng và thứ tự của các tham số trong các tiêu đề chức năng phù hợp. Nếu không, bạn có thể nhận được kết quả mong đợi.

Một cách khác để chuyển các đối số cho một hàm là sử dụng các đối số từ khóa. Trong phương pháp này, chúng tôi vượt qua từng đối số trong mẫu sau:

trong đó

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
99 là tên của biến tham số trong tiêu đề hàm và
def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
00 đề cập đến giá trị bạn muốn chuyển đến biến tham số. Bởi vì, chúng tôi đang liên kết tên tham số với các giá trị, thứ tự đối số trong lệnh gọi hàm không quan trọng.

Dưới đây là một số cách khác nhau mà chúng ta có thể gọi chức năng

def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
01 bằng cách sử dụng các đối số từ khóa:

import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())
6

Thử ngay bây giờ

Tuyên bố

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
84 vượt qua
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
85 đến
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
86,
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
41 đến
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
88 và
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
89 đến
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
90 và in
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
91. Tuy nhiên, tuyên bố
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
92, chuyển
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
85 cho cơ sở,
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
89 đến
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
88 và
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
41 đến
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
90 và in
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
98, điều này là sai. Vì vậy, khi sử dụng các đối số vị trí luôn đảm bảo rằng thứ tự của các đối số trong lệnh gọi chức năng và thứ tự của các tham số trong các tiêu đề chức năng phù hợp. Nếu không, bạn có thể nhận được kết quả mong đợi.

Một cách khác để chuyển các đối số cho một hàm là sử dụng các đối số từ khóa. Trong phương pháp này, chúng tôi vượt qua từng đối số trong mẫu sau:

trong đó

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
99 là tên của biến tham số trong tiêu đề hàm và
def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
00 đề cập đến giá trị bạn muốn chuyển đến biến tham số. Bởi vì, chúng tôi đang liên kết tên tham số với các giá trị, thứ tự đối số trong lệnh gọi hàm không quan trọng.

import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())
7

Thử ngay bây giờ

Tuyên bố

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
84 vượt qua
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
85 đến
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
86,
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
41 đến
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
88 và
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
89 đến
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
90 và in
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
91. Tuy nhiên, tuyên bố
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
92, chuyển
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
85 cho cơ sở,
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
89 đến
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
88 và
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
41 đến
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
90 và in
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
98, điều này là sai. Vì vậy, khi sử dụng các đối số vị trí luôn đảm bảo rằng thứ tự của các đối số trong lệnh gọi chức năng và thứ tự của các tham số trong các tiêu đề chức năng phù hợp. Nếu không, bạn có thể nhận được kết quả mong đợi.

import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())
8

Thử ngay bây giờ

Tuyên bố

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
84 vượt qua
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
85 đến
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
86,
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
41 đến
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
88 và
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
89 đến
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
90 và in
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
91. Tuy nhiên, tuyên bố
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
92, chuyển
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
85 cho cơ sở,
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
89 đến
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
88 và
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
41 đến
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
90 và in
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
98, điều này là sai. Vì vậy, khi sử dụng các đối số vị trí luôn đảm bảo rằng thứ tự của các đối số trong lệnh gọi chức năng và thứ tự của các tham số trong các tiêu đề chức năng phù hợp. Nếu không, bạn có thể nhận được kết quả mong đợi.

import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())
9

Một cách khác để chuyển các đối số cho một hàm là sử dụng các đối số từ khóa. Trong phương pháp này, chúng tôi vượt qua từng đối số trong mẫu sau:

trong đó

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
99 là tên của biến tham số trong tiêu đề hàm và
def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
00 đề cập đến giá trị bạn muốn chuyển đến biến tham số. Bởi vì, chúng tôi đang liên kết tên tham số với các giá trị, thứ tự đối số trong lệnh gọi hàm không quan trọng.

Dưới đây là một số cách khác nhau mà chúng ta có thể gọi chức năng

def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
01 bằng cách sử dụng các đối số từ khóa:

Đối số từ khóa có chút linh hoạt vì chúng ta không phải nhớ thứ tự của các tham số trong tiêu đề chức năng.

Trộn các đối số từ khóa và vị trí #

Chúng ta cũng có thể trộn các đối số vị trí và đối số từ khóa trong một cuộc gọi chức năng. Khi làm như vậy, yêu cầu duy nhất là các đối số vị trí phải xuất hiện trước bất kỳ đối số từ khóa nào. Điều đó có nghĩa là hai cuộc gọi sau đây hoàn toàn hợp lệ vì trong cả hai cuộc gọi đối số vị trí xuất hiện trước các đối số từ khóa.

function_name(arg1, arg2, arg3, ... argN)
0

Tuy nhiên, chúng tôi không thể làm điều này:

Vấn đề ở đây là đối số vị trí (

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
89) đang xuất hiện sau đối số từ khóa (
def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
03). Cố gắng gọi
def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
01 theo cách này dẫn đến lỗi sau:

Thử ngay bây giờ

Trả về giá trị #

function_name(arg1, arg2, arg3, ... argN)
1

Thử ngay bây giờ

Cho đến thời điểm này, chúng tôi đã tạo ra các chức năng không trả về bất kỳ giá trị nào, các hàm như vậy còn được gọi là các hàm void.

Để trả về giá trị từ một hàm, chúng tôi sử dụng câu lệnh

Hello !
Today is 2017-06-20 13:20:45.281651
4. Đó là cú pháp là:

Các dấu ngoặc vuông (

def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
06) xung quanh
def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
07 chỉ ra rằng nó là tùy chọn. Nếu bỏ qua một giá trị đặc biệt
Hello !
Today is 2017-06-20 13:20:45.281651
7 được trả về.

python101/Chapter-13/return_factorial.py

function_name(arg1, arg2, arg3, ... argN)
2

Thử ngay bây giờ

Output:

function_name(arg1, arg2, arg3, ... argN)
3

Khi câu lệnh

Hello !
Today is 2017-06-20 13:20:45.281651
4 gặp phải bên trong một hàm, hàm sẽ chấm dứt và giá trị của
def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
07, sau đó là từ khóa
Hello !
Today is 2017-06-20 13:20:45.281651
4 được gửi lại cho một phần của chương trình được gọi là hàm. Tuyên bố
Hello !
Today is 2017-06-20 13:20:45.281651
4 có thể xuất hiện ở bất cứ đâu trong phần thân của hàm. Các hàm trả về các giá trị được gọi là các hàm trả lại giá trị.

python101/Chapter-13/is_even_or_odd.py

sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
2

function_name(arg1, arg2, arg3, ... argN)
5

Thử ngay bây giờ

Đây là một ví dụ:

function_name(arg1, arg2, arg3, ... argN)
6

Một hàm có thể được gọi theo hai cách, tùy thuộc vào việc chúng có trả lại giá trị hay không.

function_name(arg1, arg2, arg3, ... argN)
7

Nếu một hàm trả về một giá trị thì một cuộc gọi đến một hàm như vậy có thể được sử dụng như một toán hạng trong bất kỳ biểu thức nào trong chương trình. Ví dụ:

python101/Chapter-13/returning_none.py

function_name(arg1, arg2, arg3, ... argN)
8

Thử ngay bây giờ

Output:

Trong biểu thức trên, trước tiên chúng ta gọi hàm

def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
13 và sau đó gán giá trị trả về của hàm cho biến
def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
14. Nếu chúng tôi không sử dụng câu lệnh
Hello !
Today is 2017-06-20 13:20:45.281651
4 trong hàm
def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
13, chúng tôi sẽ không thể viết mã này. Dưới đây là một số cách khác mà chúng ta có thể gọi hàm
def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
13.

python101/Chapter-13/grade_calculator.py

function_name(arg1, arg2, arg3, ... argN)
9

greet()  # calling greet() function
0

Thử ngay bây giờ

Đầu ra đầu tiên:

greet()  # calling greet() function
1

Đầu ra chạy thứ hai:

greet()  # calling greet() function
2

Hàm void trả về không. #

Trong Python, các hàm void hơi khác so với các hàm được tìm thấy trong C, C ++ hoặc Java. Nếu cơ thể hàm không có bất kỳ câu lệnh

Hello !
Today is 2017-06-20 13:20:45.281651
4 nào thì giá trị đặc biệt
Hello !
Today is 2017-06-20 13:20:45.281651
7 được trả về khi hàm kết thúc. Trong Python,
Hello !
Today is 2017-06-20 13:20:45.281651
7 là một chữ của loại
Hello !
Today is 2017-06-20 13:20:45.281651
9 được sử dụng để biểu thị sự vắng mặt của một giá trị. Nó thường được gán cho một biến để chỉ ra rằng biến không trỏ đến bất kỳ đối tượng nào.

Chương trình sau đây chứng minh rằng các hàm void trả về

Hello !
Today is 2017-06-20 13:20:45.281651
7.

python101/Chapter-13/void_function.py

greet()  # calling greet() function
3

Thử ngay bây giờ

Output:

Đảm bảo đủ!

def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
13 Hàm thực sự trả về
Hello !
Today is 2017-06-20 13:20:45.281651
7. Vì vậy, chúng ta có thể nói rằng trong Python, tất cả các hàm trả về giá trị cho dù bạn có sử dụng câu lệnh
Hello !
Today is 2017-06-20 13:20:45.281651
4 hay không. Tuy nhiên, điều này không có nghĩa là bạn có thể sử dụng các hàm void giống như hàm hoàn trả giá trị. Xem xét ví dụ sau:

python101/Chapter-13/using_void_function_as_non_void_function.py

greet()  # calling greet() function
4

Thử ngay bây giờ

Output:

greet()  # calling greet() function
5

Trong dòng 5, chúng tôi đang cố gắng thêm giá trị được trả về từ

def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
13 tức là
Hello !
Today is 2017-06-20 13:20:45.281651
7 vào số nguyên
import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
4, nhưng thao tác không thành công vì hoạt động
def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
39 không thể thêm
Hello !
Today is 2017-06-20 13:20:45.281651
9 vào
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
68.

Đó là lý do tại sao một hàm void thường được gọi như một tuyên bố như thế này:

Trả về nhiều giá trị #

Để trả về nhiều giá trị từ một hàm, chỉ cần chỉ định từng giá trị được phân tách bằng dấu phẩy (

Hello !
Today is 2017-06-20 13:20:45.281651
2) sau từ khóa
Hello !
Today is 2017-06-20 13:20:45.281651
4.

greet()  # calling greet() function
6

Khi gọi một hàm trả về nhiều giá trị, số lượng biến ở phía bên trái của toán tử

def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
44 phải bằng số lượng giá trị được trả về bởi câu lệnh
Hello !
Today is 2017-06-20 13:20:45.281651
4. Vì vậy, nếu một hàm trả về hai giá trị thì bạn phải sử dụng 2 biến ở phía bên trái của toán tử
def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
44. Đây là một ví dụ:

python101/Chapter-13/returning_multiple_values.py

greet()  # calling greet() function
7

Thử ngay bây giờ

Output:

greet()  # calling greet() function
8

Lưu ý cách các giá trị được gán trong khi gọi hàm. Tuyên bố:

greet()  # calling greet() function
9

gán số nhỏ hơn cho biến

def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
47 và số lượng lớn hơn cho biến
def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
48.

Đối số mặc định #

Trong Python, chúng ta có thể xác định một hàm với các giá trị tham số mặc định, giá trị mặc định này sẽ được sử dụng khi một hàm được gọi mà không có bất kỳ đối số nào. Để chỉ định giá trị mặc định cho tham số chỉ cần chỉ định giá trị bằng toán tử gán theo sau là tên tham số. Xem xét ví dụ sau:

python101/Chapter-13/setting_default_values.py

import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
0

Thử ngay bây giờ

Output:

import datetime

def greet():
    print("Hello !")
    print("Today is", datetime.datetime.now())

greet()
1

Trong dòng 7, chúng tôi đang gọi hàm

def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
49 mà không có bất kỳ đối số nào, do đó, các giá trị mặc định
def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
50 và
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
85 sẽ được gán cho các tham số
def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
52 và
def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
53 tương ứng.

Trong dòng 8, chúng tôi đang gọi

def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
49 bằng cách chuyển
sum = 0
start = 100
end = 200
for i in range(start, end+1):
    sum += i    

print("Sum is", sum)
41 đến
def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
52 và
def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
57 đến
def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
53. Vì các giá trị cho cả hai tham số được cung cấp trong khi gọi hàm, giá trị mặc định sẽ không được sử dụng trong trường hợp này. Điều tương tự cũng đúng với cuộc gọi
def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
49 trong dòng 9, ngoại trừ ở đây chúng tôi đang sử dụng các đối số từ khóa.

Trong dòng 10, chúng tôi chỉ cung cấp giá trị cho tham số

def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
52 bằng cách sử dụng đối số từ khóa, kết quả là giá trị mặc định cho tham số
def function_name(arg1, arg2, arg3 ... argN):
    # function body
    <indented statement 1>
    <non-indented statement 2>
    ...
    <indented statement n>
    <return statement>
53 sẽ được sử dụng.



Ví dụ về hàm void là gì?

Void Chức năng Đầu tiên là một hàm in thông tin cho người dùng đọc. Ví dụ (đối với mục đích của chúng tôi), hàm printf được coi là một hàm void. .printf function is treated as a void function. (In actuality, printf returns an integer which is the number of characters printed... but we almost always ignore this value.)

Các chức năng void là gì?

Các hàm void được tạo và sử dụng giống như các hàm trả lại giá trị ngoại trừ chúng không trả về giá trị sau khi hàm thực thi.Thay cho một loại dữ liệu, các hàm void sử dụng từ khóa "Void."Một hàm void thực hiện một tác vụ, sau đó điều khiển quay lại người gọi-nhưng, nó không trả về một giá trị.created and used just like value-returning functions except they do not return a value after the function executes. In lieu of a data type, void functions use the keyword "void." A void function performs a task, and then control returns back to the caller--but, it does not return a value.

Loại trống trong Python là gì?

Kiểu dữ liệu void, tương tự như kiểu dữ liệu không có gì được mô tả trước đó, là kiểu dữ liệu cho kết quả của hàm trả về bình thường, nhưng không cung cấp giá trị kết quả cho người gọi.the data type for the result of a function that returns normally, but does not provide a result value to its caller.

Các chức năng hiệu quả và các chức năng void đưa ra ví dụ là gì?

Một số chức năng chúng tôi đang sử dụng, chẳng hạn như các hàm toán học, kết quả mang lại;Vì thiếu một cái tên tốt hơn, tôi gọi chúng là các chức năng hiệu quả.Các chức năng khác, như print_twice, thực hiện một hành động nhưng không trả về giá trị.Chúng được gọi là các chức năng void.