We Share Knowledge

Một số đặc điểm của procedure trong Python

April 27, 2020

Thành phần nhỏ nhất của thủ tục là các toán tử, chúng ta có thể kết hợp những toán tử thông qua những thành phần cơ bản của ngôn ngữ lập trình như xử lý rẻ nhánh (if), vòng lặp (while), hoặc kết hợp các hàm với nhau (g(f(x))). Ở mức trừu tượng hơn nữa, ta có thể định nghĩa các hàm riêng cho một phép tính toán riêng nào đó. Khi có một hàm, ta không cần quan tâm bên trong tính toán như thế nào, chỉ cần biết có đầu vào (input) thì ta sẽ có kết quả (output) tương ứng.

Khác với những ngôn ngữ khác, thủ tục (procedure) trong Python đa năng hơn. Cú pháp của thủ tục được định nghĩa như sau:
def \<tên hàm\>(\<tham số 1\>,…,\<tham số n\>):
\<câu lệnh 1\>

\<câu lệnh k\>

Thủ tục có 3 thành phần chính:
– Tên thủ tục
– Tham số đầu vào
– Phần thân thủ tục chứa các câu lệnh và toán tử nhằm xử lý các tham số đầu vào và trả về kết quả sau khi xử lý.
Ví dụ:
def square(x):
return x*x
y = square(6) → y = 36

def p(x, y):
z = x*x – y
return z +1/z
t = p(1.0, 2.0) → t = -2.0

Trong Python, thủ tục cũng có thể xứ lý luôn cả biến nằm ngoài thủ tục
Ví dụ:
def biz(a):
return a + b

b = 5
c = biz(2) → c = 7

Trong Python, chúng ta có thể định nghĩa một số thủ tục không có tên bằng cách dùng bộ khởi tạo lambda như sau:
lambda \<tham số 1\>,…,\<tham số n\>:
\<biểu thức\>
Với bộ khởi tạo lambda, không cần từ khóa return thì giá trị của biểu thức vẫn được trả về. Nếu là biểu thức đơn chỉ có một dòng thì có thể viết luôn sau dấu “:”
Ví dụ:
f = lambda x: x*x
t = f(4) → t = 16

g = lambda x, y: x*y
t = g(3, 4) → t = 12

Chúng ta có thể tạo ra một danh sách các thủ tục như sau:
procs = [lambda x: x, lambda x: x+2, lambda x: x+4]
t1 = procs[0](3) → t1 = 3
t2 = procs[1](3) → t2 = 5
t3 = procs[2](3) → t3 = 7

và cũng có thể gán tên thủ tục thành một tên khác
Ví dụ:
t = procs[1]
g = t(4) → g = 6 #thủ tục có tên là procs[1] trở thành hàm t sau khi gán.

Thủ tục có thể được dùng như một tham số đầu vào.
Ví dụ:
def squaretwice(x):
return square(square(x))
t = squaretwice(2) → t = 16 #Với thủ tục square đã được định nghĩa trước đó
Ví dụ:
def doTwice(f, x):
return f(f(x))
t = doTwice(square, 3) → t = 81

Cách khác để áp dụng thủ tục nhiều lần là một thủ tục trả về một thủ tục
def doTwiceMaker(f):
return lambda x: f(f(x))
y = 2
t = doTwiceMaker(square)(y) → t = 16 # Với thủ tục square đã được định nghĩa trước đó

Những tính chất như trên thì thủ tục được coi như là đối tượng lớp đầu tiên (first-class object), và hoàn toàn đa năng hơn so với vài trò thủ tục trong các ngôn ngữ lập trình khác.

Leave a Reply

avatar
  Subscribe  
Notify of
{"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}