Bài 4: Hàm Trong Python

Nội dung bài viết này sẽ đề cập đến các chủ đề

Hàm trong python

Hàm là một khối lệnh, được thực thi khi được gọi.

Hàm được định nghĩa bằng từ khoá def.

Hàm có thể nhận dữ liệu truyền vào, được gọi là tham số

Hàm có thể trả về dữ liệu

Ví dụ

1
2def isSoChan(x:int): # khai báo hàm có tên là isSoChan, với tham số truyền vào kiểu int
3    if x <0:
4        return False
5    if x % 2 != 0:
6        return False
7    return True
8
9isSoChan(5) # gọi thực thi hàm isSoChan, với giá trị của tham số x là  5

Tham số mặc định

Một số hàm sẽ có tham số mặc định, sử dụng khi ta bỏ trống, không truyền giá trị cho tham số, ví dụ như là tham số start của hàm range có giá trị mặc định là 0.

 1
 2def printCountry(contry_name = "Việt Nam"):
 3    print(contry_name)
 4
 5
 6printCountry("USA")
 7printCountry()
 8
 9#Kết quả
10
11>>> printCountry("USA")
12USA
13>>> printCountry()
14Việt Nam

Arbitrary Arguments

Đôi khi, chúng ta không thể xác định được số lượng tham số truyền vào, python hỗ trợ ta quăng các giá trị truyền dư vào một tham số cấp 1. Tên viết tắt của dạng này là *args

Ví dụ

 1def info(name, *args):
 2    print(f"input name: {name}")
 3    for item in args:
 4        print(f"other info: {item}")
 5
 6info("alex","18","staff","samsung","apple")
 7
 8#Kết quả:
 9
10input name: alex
11other info: 18
12other info: staff
13other info: samsung
14other info: apple

Keyword Arguments

Để gọi hàm một cách tường minh, python cho phép truyền tham số bằng cách chỉ rõ tên tham số cần truyền dữ liệu

Ví dụ

 1def info(name, age, position):
 2    print(f"name {name} age {age} position {position}")
 3
 4info(name="alex", age=18, position="staff")
 5
 6
 7info(name="bill", position="staff" , age=18)
 8
 9# Kết quả:
10
11>>> info(name="alex", age=18, position="staff")
12name alex age 18 position staff
13>>>
14>>> info(name="bill", position="staff" , age=18)
15name bill age 18 position staff

Arbitrary Keyword Arguments

Trong trường hợp có nhiều tham số quá, chúng ta có thể viết tổng hợp các tham số dưới dạng tham số cấp 2. Tên viết tắt của dạng này là **kwargs

Ví dụ

 1
 2def info(**data):
 3    print(f"name {data['name']} age {data['age']} position {data['position']}")
 4
 5info(name="alex", age=18, position="staff")
 6
 7
 8info(name="bill", position="staff" , age=18)
 9
10
11# Kết quả
12
13>>> info(name="alex", age=18, position="staff")
14name alex age 18 position staff
15>>>
16>>> info(name="bill", position="staff" , age=18)
17name bill age 18 position staff

Hàm Lambda trong python

Hàm Lambda là hàm chỉ có một biểu thức

Hàm Lambda có thể nhận nhiều tham số

Cú pháp

1
2lambda arguments : expression

Ví dụ:

1
2info  = lambda name, age, position : f"name {name} age {age} position {position}"
3
4info(name="alex", age=18, position="staff")
5
6# Kết quả
7>>> info(name="alex", age=18, position="staff")
8'name alex age 18 position staff'

Sức mạnh của lambda được khai thác tối đa, khi lamda là tham số của một hàm khác.

Hàm map

Cú pháp

1
2map(function, iterable)

Do input của map là function, nên nó có thể là một hàm tường minh, hoặc là một lambda function

Ví dụ:

Hãy nhân đôi tất cả các giá trị trong list

 1
 2aList = [1,2,3,4,5]
 3
 4# Cách viết thông thường
 5
 6def square(x:int):
 7    return x**2
 8
 9newList = []
10for x in aList:
11    newList.append(square(x))
12
13print(newList)
14
15# Cách viết sử dụng list comprehension
16
17newList = [x**2 for x in newList]
18print(newList)
19
20# Cách viết sử dụng map kết hợp lambda
21
22newList = list(map(lambda x:x**2,aList))
23
24print(newList)
25
26>>> print(newList)
27[1, 4, 9, 16, 25]

Hàm filter

Cú pháp

1
2filter(function, iterable)

Hàm này tựa tựa như list comprehension với if contion

Ví dụ:

Hãy lọc ra các phần tử là số chẵn

 1
 2aList = [1,2,3,4,5]
 3
 4# Cách viết thông thường
 5
 6def isEven(x:int):
 7    return x%2==0
 8
 9newList = []
10for x in aList:
11    newList.append(isEven(x))
12
13print(newList)
14
15# Cách viết sử dụng list comprehension
16
17newList = [x for x in newList if x %2 ==0]
18print(newList)
19
20# Cách viết sử dụng filter kết hợp lambda
21
22newList = list(filter(lambda x:x%2==0,aList))
23
24print(newList)
25
26>>> print(newList)
27[2, 4]

Hàm reduce

Hàm có nhiệm vụ tích luỹ tất cả các phần tử và trả về một giá trị duy nhất

Cú pháp

1
2reduce(function, iterable, [, initializer])

Ví dụ:

Tính tổng các phần tử trong list sử dụng reduce

 1
 2from functools import reduce
 3
 4aList = [1,2,3,4,5]
 5
 6print(reduce(lambda x,y: x+y,aList))
 7
 8Kết quả:
 9>>> print(reduce(lambda x,y: x+y,aList))
1015

Đếm số lần xuất hiện của số chẵn trong list

 1
 2from functools import reduce
 3
 4aList = [1,2,3,5,9]
 5
 6print(reduce(lambda acc,x: acc+1 if x%2 == 0  else acc,aList,0))
 7
 8Kết quả:
 9>>> print(reduce(lambda x,y: x+y,aList,0))
1015

Cảm ơn các bạn đã theo dõi bài viết.

Comments