PE 2019 - Chapter 5 - Ham Va Module

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 14

TS.

 Nguyễn Thanh Nhã 9/17/2019

Kỹ thuật Lập trình (CKT)
PROGRAMMING FOR ENGINEERINGS

TS. Nguyễn Thanh Nhã


Email: nhanguyen@hcmut.edu.vn
Phone: 0908.56.81.81

Department of Engineering Mechanics – HCMUT 2019

0. Giới thiệu môn học

1. Giới thiệu về máy tính và lập trình

2. Giới thiệu về ngôn ngữ Python

3. Các kiểu dữ liệu phổ biến

4. Các cấu trúc điều khiển

5. Hàm và module trong Python

Department of Engineering Mechanics – HCMUT 2019

nhanguyen@hcmut.edu.vn 1
TS. Nguyễn Thanh Nhã 9/17/2019

Chương 5

Hàm và Module trong Python

Department of Engineering Mechanics – HCMUT 2019

Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS

5.1. Hàm - Function

Department of Engineering Mechanics – HCMUT 2019

nhanguyen@hcmut.edu.vn 2
TS. Nguyễn Thanh Nhã 9/17/2019

Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS

5.1. Hàm - Function


- Hàm là một khối code được tổ chức và có thể tái sử dụng,
để thực hiện một tác vụ nào đó.
- Trong các chương trước, ta đã làm quen với một số hàm đã
được xây dựng sẵn trong Python, điển hình như hàm print().
- Tuy nhiên người dùng cũng có thể tạo riêng cho mình một
hàm với cách định nghĩa và kiểu giá trị cho riêng bạn. Các
hàm này được gọi là user-defined function.
Cú pháp:
Định nghĩa hàm: def tenHam(cacThamSo):
“mô tả hàm”
cacLenhThucThi
return [giaTriTraVe]

Gọi hàm: [giaTriTraVe] = tenHam(cacThamSo)


Department of Engineering Mechanics – HCMUT 2019

Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS

5.1. Hàm - Function


Ví dụ: Viết hàm tính trung bình cộng của 2 số
def meanOfTwo(x,y): def meanOfTwo(x,y):
mean = (x+y)/2 hoặc return (x+y)/2
return mean

Gọi hàm: a = meanOfTwo(3,4)


print(a)

Viết hàm tính trung bình cộng của 1 list các số thực
def meanOfList(listA): b = meanOfList([1,3,5])
s = 0 print(b)
for i in listA:
s += i
return s/len(listA)
Department of Engineering Mechanics – HCMUT 2019

nhanguyen@hcmut.edu.vn 3
TS. Nguyễn Thanh Nhã 9/17/2019

Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS

5.1. Hàm - Function


Ví dụ: Hàm không trả về giá trị

def prt(listA): def prt(listA):


print(3*listA) print(3*listA)
return
prt([1,2,3])
listX = [2,5,6]
prt(listX)

def print5Star():
print("*****")

print5Star()

Department of Engineering Mechanics – HCMUT 2019

Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS

5.1. Hàm - Function Phân biệt tham số và đối số

Tham số (parameter) Đối số (argument)

- Tham số xuất hiện trong - Đối số xuất hiện trong lời


định nghĩa hàm gọi hàm
- Parameter phải là biến để - Argument có thể là hằng,
giữ các giá trị đang đến biến hoặc biểu thức

def meanOfTwo(x,y): xx = 3
mean = (x+y)/2 a = meanOfTwo(xx,4)
return mean print(a)

Department of Engineering Mechanics – HCMUT 2019

nhanguyen@hcmut.edu.vn 4
TS. Nguyễn Thanh Nhã 9/17/2019

Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS

5.1. Hàm - Function


Phạm vi của biến
- Các biến trong một chương trình không thể truy cập tại tất cả
vị trí ở trong chương trình đó. Điều này phụ thuộc vào nơi biến
đó được khai báo.
- Phạm vi biến quyết định nơi nào của chương trình bạn có thể
truy cập một định danh cụ thể.
- Trong Python, có hai khái niệm về phạm vi biến:
+ Biến toàn cục (global variable)
+ Biến cục bộ (local variable)

Department of Engineering Mechanics – HCMUT 2019

Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS

5.1. Hàm - Function


Phạm vi của biến
Biến toàn cục (global variable)
- Biến toàn cục là biến được định nghĩa bên ngoài hàm.
- Biến toàn cục có thể được truy cập bởi tất cả các hàm ở
khắp nơi trong chương trình. Phạm vi của biến toàn cục là
rộng nhất.
b = 20 a là biến cục bộ
def msg():
a = 10 b là biến toàn cục
print("Gia tri cua a la",a)
print("Gia tri cua b la",b)
return >>>
Gia tri cua a la 10 
msg() Gia tri cua b la 20 
print(b) 20

Department of Engineering Mechanics – HCMUT 2019

10

nhanguyen@hcmut.edu.vn 5
TS. Nguyễn Thanh Nhã 9/17/2019

Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS

5.1. Hàm - Function


Phạm vi của biến
Biến cục bộ (local variable)
- Biến cục bộ là biến được khai báo bên trong hàm.
- Biến cục bộ chỉ có thể được truy xuất trong phạm vi của hàm
đó. Không thể truy xuất biến cục bộ từ bên ngoài và từ các
hàm khác.
b = 20
def msg():
a = 10
print("Gia tri cua b la",b)
return

msg()
print(a)

NameError: name 'a' is not defined

Department of Engineering Mechanics – HCMUT 2019

11

Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS

5.1. Hàm - Function


Truyền giá trị trong hàm
def changeme(mylist):
mylist.append([1, 2, 3, 4])
print(“Inside func: ", mylist)
return Inside func: [10, 20, 30, [1, 2, 3, 4]]
Outside func: [10, 20, 30]
mylist = [10, 20, 30]
changeme([10, 20, 30])
print("Outside func: ", mylist)

myList [10,20,30] changeme(myList)

[10,20,30] myList

myList [10,20,30] changeme(myList)

myList
[10,20,30,[1,2,3,4]]
myList.append([1,2,3,4])
Department of Engineering Mechanics – HCMUT 2019

12

nhanguyen@hcmut.edu.vn 6
TS. Nguyễn Thanh Nhã 9/17/2019

Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS

5.1. Hàm - Function


Truyền tham chiếu trong hàm
def changeme(mylist):
mylist.append([1, 2, 3, 4])
print(“Inside func: ", mylist)
return
Inside func: [10, 20, 30, [1, 2, 3, 4]]
mylist = [10, 20, 30] Outside func:[10, 20, 30, [1, 2, 3, 4]]
changeme(mylist)
print(" Outside func: ", mylist)

myList [10,20,30] changeme(myList)

myList

myList changeme(myList)

[10,20,30,[1,2,3,4]] myList
myList.append([1,2,3,4])

Department of Engineering Mechanics – HCMUT 2019

13

Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS

5.1. Hàm - Function


Truyền tham chiếu trong hàm
def changeme(mylist):
mylist = [1, 2, 3, 4]
print(“Inside func: ", mylist)
return
Inside func: [1, 2, 3, 4]
mylist = [10, 20, 30] Outside func: [10, 20, 30]
changeme(mylist)
print(" Outside func: ", mylist)

myList [10,20,30] changeme(myList)

myList

myList changeme(myList)

[10,20,30] myList
[1,2,3,4] myList = [1,2,3,4]

Department of Engineering Mechanics – HCMUT 2019

14

nhanguyen@hcmut.edu.vn 7
TS. Nguyễn Thanh Nhã 9/17/2019

Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS

5.1. Hàm - Function


Tham số hàm (dùng khi định nghĩa hàm)
Python hỗ trợ các kiểu tham số chính thức sau

+ Tham số bắt buộc


+ Tham số mặc định
+ Tham số từ khóa (tham số được đặt tên)
+ Tham số với số lượng thay đổi

Department of Engineering Mechanics – HCMUT 2019

15

Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS

5.1. Hàm - Function Tham số hàm


Tham số bắt buộc
- Các tham số bắt buộc là các tham số được truyền tới một hàm
theo một thứ tự chính xác.
- Ở đây, số tham số trong lời gọi hàm nên kết nối chính xác với
phần định nghĩa hàm

def mean(a, b):


c = (a + b)/2 Hàm mean(a, b) bắt buộc có 2 tham số
print(c)

mean(5, 10)

TypeError: mean() missing 1 required


mean(5)
positional argument: 'b'

Department of Engineering Mechanics – HCMUT 2019

16

nhanguyen@hcmut.edu.vn 8
TS. Nguyễn Thanh Nhã 9/17/2019

Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS

5.1. Hàm - Function Tham số hàm


Tham số mặc định
- Tham số mặc định là tham số cung cấp giá trị mặc định cho
tham số được truyền trong phần định nghĩa hàm, trong trường
hợp giá trị không được cung cấp trong lời gọi hàm

def mean3(a, b, c=0): Hàm mean3(a, b, c) có 2 tham số bắt buộc a, b


m = (a + b + c)/3
và thông số mặc định c
print(m)

mean3(5, 10, 3) 6.0

mean(5, 10) 5.0

Chú ý:
- Có thể có nhiều tham số mặc định.
- Các tham số mặc định phải đặt sau cùng
Department of Engineering Mechanics – HCMUT 2019

17

Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS

5.1. Hàm - Function Tham số hàm


Tham số từ khóa
- Khi sử dụng tham số từ khóa, tham số được truyền trong lời
gọi hàm được kết nối với phần định nghĩa hàm dựa trên tên
của tham số.
- Vị trí của các tham số trong lời gọi hàm là tùy ý

def msg(id,name): 18123456


print(id) msg(18123456,”David”)
David
print(name)

18123456
msg(name=“David”,id=18123456)
David

name = "abc"
id = 16100
msg(name, id)
abc
16100 !
Department of Engineering Mechanics – HCMUT 2019

18

nhanguyen@hcmut.edu.vn 9
TS. Nguyễn Thanh Nhã 9/17/2019

Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS

5.1. Hàm - Function


Giá trị trả về của hàm
- Hàm có thể trả về bất kỳ kiểu dữ liệu gì hợp lệ trong Python
- Hàm có thể trả về 1 hoặc nhiều giá trị hoặc không trả về bất
cứ giá trị gì

def f1(n): def f2(n): def f2(n):


f = n**2 + 1 f = n**2 + 1 f = n**2 + 1
return f g = n**3 + 1 g = n**3 + 1
h = n + 1 h = n + 1
f = f1(4) return f, g, h return [f, g, h]
print(f)
f, g, h = f2(3) f = f2(3)
print(f,g,h) print(f)
def f3(n):
f = f2(3) [f, g, h] = f2(3)
f = n**2 + 1
print(f[1]) print(f,g,h)
print(f)
Department of Engineering Mechanics – HCMUT 2019

19

Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS

5.1. Hàm - Function Tham số hàm


Hàm với số tham số thay đổi
- Có thể cần xử lý một hàm mà có số tham số nhiều hơn khi
định nghĩa hàm.
- Những tham số này được gọi là các tham số có số tham số
thay đổi (variable-length args) và không được đặt tên trong
định nghĩa hàm, không giống như các tham số bắt buộc và
tham số mặc định

Cú pháp:
def tenHam([thamSoChinhThuc,] *thamSoDuPhong):
"function_docstring"
function_suite
return [bieuThuc]

Department of Engineering Mechanics – HCMUT 2019

20

nhanguyen@hcmut.edu.vn 10
TS. Nguyễn Thanh Nhã 9/17/2019

Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS

5.1. Hàm - Function


Hàm nặc danh
- Hàm nặc danh (hàm vô danh) là hàm không có tên và chúng
không được khai báo theo cách chính thức bởi từ khóa def.
- Để khai báo hàm này, sử dụng từ khóa lambda. Lambda nhận
bất kỳ lượng tham số nào và chỉ trả về một giá trị trong dạng
một biểu thức đã được ước lượng.
- Không thể gọi trực tiếp gọi hàm nặc danh để in bởi vì lamda
cần một biểu thức. Ngoài ra, các hàm lambda có namespace
cục bộ của chúng.
Cú pháp:

lambda [arg1 [,arg2,.....argn]]:bieu_thuc

Department of Engineering Mechanics – HCMUT 2019

21

Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS

5.1. Hàm - Function


Hàm nặc danh
Ví dụ
mean = lambda a,b,c: (a+b+c)/3

print(mean(1,2,3))

aList = lambda a: max(a)*min(a)+len(a)

print(aList([1,5,-3]))

Chú ý:
Hàm lambda chỉ trả về duy nhất 1 biểu thức

Department of Engineering Mechanics – HCMUT 2019

22

nhanguyen@hcmut.edu.vn 11
TS. Nguyễn Thanh Nhã 9/17/2019

Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS

5.2. Module

Department of Engineering Mechanics – HCMUT 2019

23

Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS

5.2. Module
- Module được sử dụng để phân loại code thành các phần nhỏ hơn
liên quan với nhau. Nói cách khác, module giúp tổ chức Python
code một cách logic, dễ hiểu và sử dụng hơn.
- Trong Python, module là đối tượng với các thuộc tính có thể đặt
tên tùy ý và có thể được gắn kết và tham chiếu.

- Về cơ bản, một module là một file, trong đó các lớp, hàm và biến
được định nghĩa. Một module cũng có thể bao gồm code thực thi
tác vụ.

Lợi thế của module:


- Khả năng tái sử dụng: module có thể được sử dụng ở trong
phần code Python khác, do đó làm tăng tính tái sử dụng code.

- Khả năng phân loại: Các kiểu thuộc tính tương tự nhau có thể
được đặt trong một module.
Department of Engineering Mechanics – HCMUT 2019

24

nhanguyen@hcmut.edu.vn 12
TS. Nguyễn Thanh Nhã 9/17/2019

Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS

5.2. Module
Ví dụ tạo và dùng module mathEM:
def sumEM(a, b):
- Tạo một file mathEM.py return a + b
chứa các hàm bên
def multEM(a, b):
- Tạo một file mainEM.py return a * b
gọi module mathEM
def divEM(a, b):
import mathEM if b != 0:
return a/b
a, b = 5, 6 else:
s = mathEM.sumEM(a, b) print('can not divide by 0')
print(s)

from mathEM import * from mathEM import divEM

a, b = 5, 6 a, b = 5, 3
s = multEM(a, b) s = divEM(a, b)
print(s) print(s)

Department of Engineering Mechanics – HCMUT 2019

25

Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS

5.3. Module time trong Python


- Python cung cấp một số phương thức được phổ biến trong khi làm
việc với Date và Time
- Ví dụ lấy thời gian hiện tại
import time
localtime = time.localtime(time.time())
print("Current time is :", localtime)

Current time is : time.struct_time(tm_year=2017, tm_mon=9, tm_mday=16,


tm_hour=16, tm_min=2, tm_sec=26, tm_wday=5, tm_yday=259, tm_isdst=0)

- Ví dụ lấy thời gian hiện tại đã được định dạng theo Python

localtime = time.asctime(time.localtime(time.time()))
print("Current time is :", localtime)

Current time is : Sat Sep 16 16:05:59 2017

Department of Engineering Mechanics – HCMUT 2019

26

nhanguyen@hcmut.edu.vn 13
TS. Nguyễn Thanh Nhã 9/17/2019

Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS

5.4. Module calendar trong Python


- Python cung cấp calendar Module giúp hiển thị lịch

- Ví dụ lấy lịch hiện tại


import calendar
print(“Current month is:")
cal = calendar.month(2017, 9)
print(cal)

- Ví dụ kiểm tra năm nhuận


import calendar
print(calendar.isleap(2017))
print(calendar.isleap(2016))

Department of Engineering Mechanics – HCMUT 2019

27

nhanguyen@hcmut.edu.vn 14

You might also like