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