HÀM, MODULE VÀ FILE I/O
Date & Time trong Python
Với Python, bạn có thể dễ dàng thu được Date và Time hiện tại. Chương này sẽ giới thiệu một số phương thức được phổ biến trong khi làm việc với Date và Time bởi sử dụng Python.
Lấy Time hiện tại trong Python
Để lấy Time hiện tại, bạn sử dụng hàm tiền định nghĩa localtime(). Hàm localtime() này nhận một tham số là time.time(). Ở đây, time là module, time() là một hàm mà trả về system time hiện tại được biểu diễn dưới dạng số tick (số tích tắc) từ 12:00 am, 1/1/1970. Về cơ bản, tick là một số thực.
import time;
localtime = time.localtime(time.time())
print "Thoi gian hien tai la :", localtime
Kết quả là:
Thoi gian hien tai la : time.struct_time(tm_year=2015, tm_mon=11, tm_mday=29, tm_hour=19, tm_min=16, tm_sec=54, tm_wday=6, tm_yday=333, tm_isdst=0)
Dưới đây là phần giải thích:
Time được trả về là một cấu trúc gồm 9 thuộc tính. Như trong bảng sau:
Thuộc tính |
Miêu tả |
tm_year |
Trả về năm hiện tại (ví dụ: 2015) |
tm_mon |
Trả về tháng hiện tại (1-12) |
tm_mday |
Trả về ngày hiện tại (1-31) |
tm_hour |
Trả về giờ hiện tại (0-23) |
tm_min |
Trả về phút hiện tại (0-59) |
tm_sec |
Trả về giây hiện tại (0-61 với 60 và 61 là các dây nhuận) |
tm_wday |
Trả về ngày trong tuần (0-6 với 0 là Monday) |
tm_yday |
Trả về ngày trong năm (1-366 kể cả năm nhuận) |
tm_isdst |
Trả về -1, 0 hoặc 1 tức là có xác định DST không |
Lấy Time đã được định dạng trong Python
Bạn có thể định dạng bất kỳ time nào theo yêu cầu của bạn, nhưng phương thức đơn giản nhất là asctime(). Đây là một hàm đã được định nghĩa trong time module. Hàm này trả về một time đã được định dạng bao gồm ngày trong tuần, tháng, ngày trong tháng, thời gian và năm. Ví dụ:
import time; localtime = time.asctime( time.localtime(time.time()) )print "Thoi gian da duoc dinh dang la :", localtime
Kết quả là:
Thoi gian da duoc dinh dang la : Sun Nov 29 19:16:30 2015
time module trong Python
Có nhiều hàm được định nghĩa sẵn trong time Module mà bạn có thể được sử dụng để làm việc với time.
STT |
Hàm và Miêu tả |
1 |
Hàm time.altzone Trả về offset của DST timezone (số giây) |
2 |
Hàm time.asctime([tupletime]) Chấp nhận một time-tuple và trả về một chuỗi gồm 24 ký tự có thể đọc được ví dụ như Mon Dec 11 18:07:14 2015 |
3 |
Hàm time.clock( ) Trả về CPU time hiện tại dưới dạng số giây dạng số thực |
4 |
Hàm time.ctime([secs]) Giống asctime(localtime(secs)) và nếu không có tham số thì giống như asctime( ) |
5 |
Hàm time.gmtime([secs]) Chuyển đổi một time được biểu diễn là số giây từ epoch sang một struct_time trong UTC |
6 |
Hàm time.localtime([secs]) Tương tự như gmtime(), nhưng nó chuyển đổi số giây thành local time. |
7 |
Hàm time.mktime(tupletime) Là ngược với hàm localtime(). Trả về một số thực để tương thích với time() |
8 |
Hàm time.sleep(secs) Dừng trình thực thi trong số giây đã cho là secs |
9 |
Hàm time.strftime(fmt[,tupletime]) Chuyển đổi một tuple hoặc struct_time thành một chuỗi được xác định bởi tham số format |
10 |
Hàm time.strptime(str,fmt='%a %b %d %H:%M:%S %Y') Parse một chuỗi biểu diễn time theo một định dạng đã cho |
11 |
Hàm time.time( ) Trả về time dưới dạng một số thực được diễn đạt bởi số giây từ epoch, trong UTC |
12 |
Hàm time.tzset() Phục hồi các qui ước về thời gian được sử dụng bởi các chương trình con của thư viện. Biến môi trường TZ xác định cách được thực hiện |
Có hai thuộc tính quan trọng có sẵn với time Module là:
- timezone: Thuộc tính time.timezone là số giây trong local timezone (không DST) từ UTC (>0 trong Americas; <=0 trong Europe, Asia, Africa).
- tzname: Thuộc tính time.tzname là một cặp các chuỗi biểu diễn locale và biểu diễn phụ thuộc, mà tương ứng là tên của local timezone với và không với DST.
calendar Module trong Python
Python cung cấp calendar Module để giúp bạn hiển thị Calendar. Ví dụ:
import calendar
print "Thang hien tai la:"
cal = calendar.month(2014, 6)
print cal
Kết quả là:
Thang hien tai la:
November 2015
Mo Tu We Th Fr Sa Su
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
Có rất nhiều hàm và phương thức đã được xây dựng sẵn trong calendar Module giúp bạn làm việc với Calendar. Dưới đây là một số hàm và phương thức:
Hàm |
Miêu tả |
Hàm prcal(year) |
In cả calendar của năm |
Hàm firstweekday() |
Trả về ngày trong tuần đầu tiên. Theo mặc định là 0 mà xác định là Monday |
Hàm isleap(year) |
Trả về true nếu năm đã cho là năm nhuận, nếu không là false |
Hàm monthcalendar(year,month) |
Trả về một list gồm các ngày trong tháng đã cho của năm dưới dạng các tuần |
Hàm leapdays(year1,year2) |
Trả về số ngày nhuận từ năm year1 tới năm year2 |
Hàm prmonth(year,month) |
In ra tháng đã cho của năm đã cung cấp |
Dưới đây là ví dụ cho một số hàm:
Hàm firstweekday()
import calendar
print calendar.firstweekday()
Kết quả là:
0
Hàm isleap(year)
import calendar
print calendar.isleap(2000)
Kết quả là:
True
Hàm firstweekday()
import calendar
print calendar.firstweekday()
Kết quả là:
0
Hàm isleap(year)
import calendar
print calendar.isleap(2000)
Kết quả là:
True
Hàm monthcalendar(year,month)
import calendar
print calendar.monthcalendar(2015,11)
Kết quả là:
[[0, 0, 0, 0, 0, 0, 1], [2, 3, 4, 5, 6, 7, 8], [9, 10, 11, 12, 13, 14, 15], [16, 17, 18, 19, 20, 21, 22], [23, 24, 25, 26, 27, 28, 29], [30, 0, 0, 0, 0, 0, 0]]
Hàm prmonth(year,month)
import calendar
print calendar.prmonth(2015,11)
Kết quả là:
November 2015
Mo Tu We Th Fr Sa Su
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
None
Hàm trong Python
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 hành động nào đó. Trong các chương trước, bạn đã 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 bạn 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.
Định nghĩa một hàm trong Python
Khi định nghĩa các hàm để cung cấp một tính năng nào đó, bạn cần theo các qui tắc sau:
- Từ khóa defđược sử dụng để bắt đầu phần định nghĩa hàm. Def xác định phần bắt đầu của khối hàm.
- def được theo sau bởi ten_ham được theo sau bởi các dấu ngoặc đơn ().
- Các tham số được truyền vào bên trong các dấu ngoặc đơn. Ở cuối là dấu hai chấm.
- Trước khi viết một code, một độ thụt dòng được cung cấp trước mỗi lệnh. Độ thụt dòng này nên giống nhau cho tất cả các lệnh bên trong hàm đó.
- Lệnh đầu tiên của hàm là tùy ý, và nó là Documentation String của một hàm đó.
- Sau đó là lệnh để được thực thi.
Cú pháp
def ten_ham( cac_tham_so ):
"function_docstring"
function_suite
return [bieu_thuc]
Ví dụ
Hàm sau nhận một chuỗi là tham số input và in nó trên màn hình chuẩn:
def printme( str ):
"Chuoi nay duoc truyen vao trong ham"
print str
return
Triệu hồi một hàm trong Python
Để thực thi một hàm, bạn cần gọi hàm đó. Phần định nghĩa hàm cung cấp thông tin về tên hàm các tham số và định nghĩa những hoạt động nào được thực hiện bởi hàm đó. Để thực thi phần định nghĩa của hàm, bạn cần gọi hàm đó. Cú pháp như sau:
ten_ham( cac_tham_so )
Ví dụ sau minh họa cách gọi hàm printme():
# Phan dinh nghia ham o day
def printme( str ):
"Chuoi nay duoc truyen vao trong ham"
print str
return;
# Bay gio ban co the goi ham printme
printme("Loi goi dau tien toi custom func!")
printme("Loi goi thu hai toi custom func")
Khi code trên được thực thi sẽ cho kết quả:
Loi goi dau tien toi custom func!
Loi goi thu hai toi custom func
Hàm return() trong Python
Hàm return(bieu_thuc) được sử dụng để gửi điều khiển quay trở lại người gọi với bieu_thuc đã cho. Trong trường hợp không cung cấp bieu_thuc, thì hàm return này sẽ trả về None. Nói cách khác, lệnh return được sử dụng để thoát khỏi định nghĩa hàm.
Các ví dụ trên không trả về bất cứ giá trị nào. Bạn có thể trả về một giá trị từ một hàm như sau:
# Phan dinh nghia ham o day
def sum( arg1, arg2 ):
# Cong hai tham so va tra ve ket qua."
total = arg1 + arg2
print "Ben trong ham : ", total
return total;
# Bay gio ban co the goi ham sum nay
total = sum( 10, 20 );
print "Ben ngoai ham : ", total
Kết quả là:
Ben trong ham : 30
Ben ngoai ham : 30
Phân biệt argument và parameter trong Python
Có hai kiểu dữ liệu được truyền trong hàm:
- Kiểu dữ liệu đầu tiên là dữ liệu được truyền trong lời gọi hàm. Dữ liệu này được gọi là argument. Argument có thể là hằng, biến hoặc biểu thức.
- Kiểu dữ liệu thứ hai là dữ liệu được nhận trong phần định nghĩa hàm. Dữ liệu này được gọi là parameter. Parameter phải là biến để giữ các giá trị đang đến.
Ví dụ:
def addition(x,y):
print x+y
x=15
addition(x ,10)
addition(x,x)
y=20
addition(x,y)
Kết quả là:
>>>
25
30
35
>>>
Với cách phân biệt trên, bạn có thể hiểu hơn về đâu là kiểu tham số bạn đang dùng, còn thực sự thì mình nghĩ nó cũng không quan trọng lắm. Do đó, trong phần tiếp theo, chúng tôi sẽ gọi chung chúng là tham số.
Truyền bởi tham chiếu vs bởi giá trị trong Python
Tất cả parameter (argument) trong Python được truyền bởi tham chiếu. Nghĩa là nếu bạn thay đổi những gì mà một parameter tham chiếu tới bên trong một hàm, thì thay đổi này cũng phản ánh trong hàm đang gọi. Ví dụ:
# Phan dinh nghia ham o day
def changeme( mylist ):
"Thay doi list da truyen cho ham nay"
mylist.append([1,2,3,4]);
print "Cac gia tri ben trong ham la: ", mylist
return
# Bay gio ban co the goi ham changeme function
mylist = [10,20,30];
changeme( mylist );
print "Cac gia tri ben ngoai ham la: ", mylist
Ở đây, chúng ta đang duy trì tham chiếu của đối tượng đang truyền và đang phụ thêm các giá trị trong cùng đối tượng đó. Vì thế đoạn code này sẽ cho kết quả:
Cac gia tri ben trong ham la: [10, 20, 30, [1, 2, 3, 4]]
Cac gia tri ben ngoai ham la: [10, 20, 30, [1, 2, 3, 4]]
Bạn theo dõi một ví dụ nữa, tại đây tham số đang được truyền bởi tham chiếu và tham chiếu đang được ghi đè bên trong hàm được gọi.
# Phan dinh nghia ham o day
def changeme( mylist ):
"Thay doi list da truyen cho ham nay"
mylist = [1,2,3,4]; # Lenh nay gan mot tham chieu moi cho mylist
print "Cac gia tri ben trong ham la: ", mylist
return
# Bay gio ban co the goi ham changeme
mylist = [10,20,30];
changeme( mylist );
print "Cac gia tri ben ngoai ham la: ", mylist
Tham số mylist là cục bộ (local) với hàm changeme. Việc thay đổi mylist bên trong hàm này không ảnh hưởng tới mylist. Và cuối cùng code trên sẽ cho kết quả:
Cac gia tri ben trong ham la: [1, 2, 3, 4]
Cac gia tri ben ngoai ham la: [10, 20, 30]
Phạm vi biến trong Python
Tất cả các biến trong một chương trình không phải là có 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 bạn đã khai báo một biến.
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 là:
- Biến toàn cục
- Biến cục bộ
Biến cục bộ trong Python
Các biến được khai báo bên trong một thân hàm là biến cục bộ. Tức là các biến cục bộ này chỉ có thể được truy cập ở bên trong hàm mà bạn đã khai báo, không thể được truy cập ở bên ngoài thân hàm đó. Ví dụ:
def msg():
a=10
print "Gia tri cua a la",a
return
msg()
print a #no se cho mot error vi bien la cuc bo
Kết quả sẽ cho một lỗi vì biến là cục bộ.
>>>
Gia tri cua a la 10
Traceback (most recent call last):
File "C:/Python27/lam.py", line 7, in >module<
print a #no se cho mot error vi bien la cuc bo
TenError: name 'a' is not defined
>>>
Biến toàn cục trong Python
Biến được định nghĩa bên ngoài hàm được gọi là biến toàn cục. 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. Do đó phạm vi của biến toàn cục là rộng nhất. Ví dụ:
b=20
def msg():
a=10
print "Gia tri cua a la",a
print "Gia tri cua b la",b
return
msg()
print b
Kết quả là:
>>>
Gia tri cua a la 10
Gia tri cua b la 20
20
>>>
Tham số hàm trong Python
Sau khi đã tìm hiểu về phạm vi biến, tiếp theo chúng ta cùng tìm hiểu về các loại tham số 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)
- Số tham số thay đổi
Tham số bắt buộc trong Python
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.
Bạn theo dõi ví dụ dưới đây:
#Phan dinh nghia cua ham sum
def sum(a,b):
"Ham co hai tham so"
c=a+b
print c
sum(10,20)
sum(20)
Khi code trên được thực thi sẽ cho một lỗi như sau:
>>>
30
Traceback (most recent call last):
File "C:/Python27/su.py", line 8, in >module<
sum(20)
TypeError: sum() takes exactly 2 arguments (1 given)
>>>
Giải thích:
1, Trong trường hợp đầu tiên, khi hàm sum() được gọi đã được truyền hai giá trị là 10 và 20, đầu tiên Python so khớp với phần định nghĩa hàm, sau đó 10 và 20 được gán tương ứng cho a và b. Do đó hàm sum được tính toán và được in.
2, Trong trường hợp thứ hai, khi bạn chỉ truyền cho hàm sum() một giá trị là 20, giá trị này được truyền tới phần định nghĩa hàm. Tuy nhiên phần định nghĩa hàm chấp nhận hai tham số trong khi chỉ có một giá trị được truyền, do đó sẽ tạo ra một lỗi như trên.
Tham số mặc định trong Python
Tham số mặc định là tham số mà cung cấp các giá trị mặc định cho các tham số được truyền trong phần định nghĩa hàm, trong trường hợp mà giá trị không được cung cấp trong lời gọi hàm. Ví dụ:
#Phan dinh nghia ham
def msg(Id,Ten,Age=21):
"In gia tri da truyen"
print Id
print Ten
print Tuoi
return
#Function call
msg(Id=100,Ten='Hoang',Tuoi=20)
msg(Id=101,Ten='Thanh')
Kết quả là:
>>>
100
Hoang
20
101
Thanh
21
>>>
Giải thích:
1, Trong trường hợp đầu tiên, khi hàm msg() được gọi đang truyền ba giá trị là 100, Hoang, và 20, thì các giá trị này sẽ được gán tương ứng cho các tham số và do đó chúng được in ra tương ứng.
2, Trong trường hợp thứ hai, khi bạn chỉ truyền hai tham số cho hàm msg() được gọi là 101 và Thanh, thì các giá trị này được gán tương ứng cho ID và Ten. Không có giá trị nào được gán cho tham số thứ ba trong lời gọi hàm, và vì thế hàm sẽ lấy giá trị mặc định là 21.
Tham số từ khóa trong Python
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ới trường hợp này, vị trí của các tham số trong lời gọi hàm là tùy ý. Ví dụ:
def msg(id,name):
"In gia tri da truyen"
print id
print ten
return
msg(id=100,ten='Hoang')
msg(ten='Thanh',id=101)
Kết quả là:
>>>
100
Hoang
101
Thanh
>>>
Giải thích:
1, Trong trường hợp đầu tiên, trong lời gọi hàm msg(), bạn đã truyền hai giá trị và truyền vị trí giống như của chúng trong phần định nghĩa hàm. Sau khi so khớp với phần định nghĩa hàm, thì các giá trị này được truyền tương ứng với các tham số trong phần định nghĩa hàm. Điều này được thực hiện dựa trên tên tham số.
2, Trong trường hợp thứ hai, trong lời gọi hàm msg(), bạn cũng cũng truyền hai giá trị nhưng với vị trí khác với phần định nghĩa hàm. Thì ở đây, dựa vào tên của tham số, các giá trị này cũng được truyền tương ứng cho các tham số trong phần định nghĩa hàm.
Hàm với số tham số thay đổi trong Python
Bạn có thể cần xử lý một hàm mà có số tham nhiều hơn là bạn đã xác định trong 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 cho một hàm có số thay đổi là:
def tenham([tham_so_chinh_thuc,] *var_args_tuple ):
"function_docstring"
function_suite
return [bieu_thuc]
Một dấu * được đặt trước tên biến để giữ các giá trị của các tham số loại này. Tuple này vẫn là trống nếu không có tham số bổ sung nào được xác định trong khi gọi hàm. Dưới đây là ví dụ đơn giản.
# Phan dinh nghia ham o day
def printinfo( arg1, *vartuple ):
"In mot tham so da truyen"
print "Ket qua la: "
print arg1
for var in vartuple:
print var
return;
# Bay gio ban co the goi ham printinfo
printinfo( 10 )
printinfo( 70, 60, 50 )
Kết quả là:
Ket qua la:
10
Ket qua la:
70
60
50
Hàm nặc danh trong Python
Hàm nặc danh (hàm vô danh), hiểu theo cách đơn giản, 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, bạn 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. Bạn không thể gọi trực tiếp gọi hàm nặc danh để in bởi vì labda 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. Dưới đây là cú pháp của hàm lamda:
lambda [arg1 [,arg2,.....argn]]:bieu_thuc
Bạn theo dõi ví dụ sau để hiểu cách hàm lambda làm việc:
#Phan dinh nghia ham
square=lambda x1: x1*x1
#Goi square nhu la mot ham
print "Binh phuong cua so la",square(10)
Kết quả là:
>>>
Binh phuong cua so la 100
>>>
So sánh hàm chính thức và hàm nặc danh trong Python?
Bạn theo dõi hai ví dụ sau:
Ví dụ cho hàm chính thức:
#Phan dinh nghia ham
def square(x):
return x*x
#Goi ham square
print "Binh phuong cua so la",square(10)
Ví dụ cho hàm nặc danh:
#Phan dinh nghia ham
square=lambda x1: x1*x1
#Goi square nhu la mot ham
print "Binh phuong cua so la",square(10)
Giải thích:
Hàm nặc danh được tạo bởi sử dụng từ khóa lambda, không phải bởi từ khóa def. Hàm này chỉ trả về một giá trị dưới dạng một biểu thức đã được ước lượng.
Module trong Python
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. Hay nói cách khác, Module giúp bạn tổ chức Python code một cách logic để giúp bạn dễ dàng hiểu và sử dụng code đó hơn. Trong Python, Module là một đối tượng với các thuộc tính mà bạn có thể đặt tên tùy ý và bạn có thể 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. Tất nhiên, một Module cũng có thể bao gồm code có thể chạy.
Bạn theo dõi qua ví dụ sau: Nếu nội dung của một quyển sách không được lập chỉ mục hoặc phân loại thành các chương riêng, thì quyển sách này có thể trở nên nhàm chán và gây khó khăn cho độc giả khi đọc và hiểu nó. Tương tự, Module trong Python là các file mà có các code tương tự nhau, hay có liên quan với nhau. Chúng có lợi thế sau:
- Khả năng tái sử dụng: Module có thể được sử dụng ở trong phần Python code 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.
Ví dụ
Tiếp theo, bạn theo dõi một ví dụ về một Module có tên là vietjack được đặt bên trong test.py.
def print_func( par ):
print "Hello : ", par
return
Để import một Module, bạn có thể sử dụng một trong ba cách dưới đây:
Sử dụng lệnh import trong Python
Bạn có thể sử dụng bất cứ source file nào dưới dạng như một Module bằng việc thực thi một lệnh import trong source file khác. Cú pháp của lệnh import là:
import module1[, module2[,... moduleN]
Giả sử mình có đoạn code sau:
def add(a,b):
c=a+b
print c
return
Lưu file dưới tên là addition.py. Lệnh import được sử dụng như sau với file này:
import addition
addition.add(10,20)
addition.add(30,40)
Ở đây, trong addition.add() thì addition là tên file và add() là phương thức đã được định nghĩa trong addion.py. Do đó, bạn có thể sử dụng phương thức đã được định nghĩa trong Module bằng cách là ten_file.phuong_thuc(). Code trên sẽ cho kết quả:
>>>
30
70
>>>
Ghi chú: Bạn có thể truy cập bất cứ hàm nào bên trong một Module theo phương thức như trên.
Để import nhiều Module, bạn sử dụng cách như trong ví dụ sau:
1, msg.py
def msg_method():
print "Hom nay troi mua"
return
2, display.py
def display_method():
print "Thoi tiet kha am uot"
return
3, multiimport.py
import msg,display
msg.msg_method()
display.display_method()
Kết quả là:
>>>
Hom nay troi muaThoi tiet kha am uot
>>>
Sử dụng lệnh from…import trong Python
Lệnh from…import được sử dụng để import thuộc tính cụ thể từ một Module. Trong trường hợp mà bạn không muốn import toàn bộ Module nào đó thì bạn có thể sử dụng lệnh này. Cú pháp của lệnh from…import là:
from modname import name1[, name2[, ... nameN]]
Dưới đây là ví dụ:
1, area.py
def circle(r):
print 3.14*r*r
return
def square(l):
print l*l
return
def rectangle(l,b):
print l*b
return
def triangle(b,h):
print 0.5*b*h
return
2, area1.py
from area import square,rectangle
square(10)
rectangle(2,5)
Kết quả là:
>>>
100
10
>>>
Sử dụng lệnh from…import* trong Python
Sử dụng lệnh này, bạn có thể import toàn bộ Module. Do đó bạn có thể truy cập các thuộc tính trong Module này. Cú pháp của lệnh là:
from modname import *
Ví dụ dưới đây chúng ta sẽ import area.py ở trên:
2, area1.py
from area import *
square(10)
rectangle(2,5)
circle(5)
triangle(10,20)
Kết quả là:
>>>
100
10
78.5
100.0
>>>
Built-in Module trong Python
Phần trên, bạn đã tìm hiểu cách tạo ra Module cho riêng mình và cách import chúng. Phần này sẽ giới thiệu các Module đã được xây dựng sẵn trong Python. Đó là math, random, threading, collections, os, mailbox, string, time, … Mỗi Module này đã định nghĩa sẵn rất nhiều hàm để bạn có thể sử dụng để thực hiện các tính năng khác nhau. Bạn theo dõi một số ví dụ với hai Module là math và random mà có các hàm đã được giới thiệu trong các chương trước.
Ví dụ sử dụng math Module:
import math
a=4.6
print math.ceil(a)
print math.floor(a)
b=9
print math.sqrt(b)
print math.exp(3.0)
print math.log(2.0)
print math.pow(2.0,3.0)
print math.sin(0)
print math.cos(0)
print math.tan(45)
Ví dụ sử dụng random Module:
import random
print random.random()
print random.randint(2,8)
Package trong Python
Về cơ bản, một Package là một tập hợp các Module, sub-package, … tương tự nhau. Đó là một cấu trúc có thứ bậc của thư mục và file.
Dưới đây là các bước để tạo và import một Package:
Bước 1: Tạo một thư mục, có tên là vietjack chẳng hạn.
Bước 2: Đặt các module khác nhau bên trong thư mục vietjack này. Chúng ta đặt ba Module là msg1.py, msg2.py, và msg3.py và đặt tương ứng code trên vào các Module tương ứng. Bạn đặt hàm msg1() trong msg1.py, hàm msg2() trong msg2.py và hàm msg3() trong msg3.py.
Bước 3: Tạo một __init__.py file để xác định các thuộc tính trong mỗi Module.
Bước 4: Cuối cùng bạn import package này và sử dụng các thuộc tính đó bởi sử dụng package.
Bạn theo dõi ví dụ sau:
1, Tạo thư mục
import osos.mkdir("Info")
2, Đặt các module khác nhau trong package:
msg1.py
def msg1(): print "Day la msg1"
msg2.py
def msg2(): print "Day la msg2"
msg3.py
def msg3(): print "Day la msg3"
3, Tạo một __init__.py file.
from msg1 import msg1from msg2 import msg2from msg3 import msg3
4, Import package này và sử dụng các thuộc tính.
import InfoInfo.msg1()Info.msg2()Info.msg3()
Kết quả là:
>>> Day la msg1Day la msg2Day la msg3>>>
Câu hỏi: __init__.py file là gì?
Nó đơn giản là một file được sử dụng để xem xét các thư mục trên disk dưới dạng package của Python. Về cơ bản, file này được sử dụng để khởi tạo các Package trong Python.
File I/O trong Python
Chắc bạn cũng đã quen thuộc với khái niệm File I/O khi đã học qua C hoặc C++. Python cũng hỗ trợ việc đọc và ghi dữ liệu tới các file.
In kết quả ra màn hình trong Python
Đến đây, chắc bạn đã quá quen thuộc về cách sử dụng của lệnh print. Lệnh này được sử dụng để in kết quả trên màn hình. Hàm này chuyển đổi biểu thức mà bạn đã truyền cho nó thành dạng chuỗi và ghi kết quả trên đầu ra chuẩn Standard Output. Cú pháp của lệnh print là:
print "Hoc Python la kha don gian,", "ban co thay vay khong?"
Kết quả là:
Hoc Python la kha don gian, ban co thay vay khong?
Đọc input từ bàn phím trong Python
Python cung cấp hai hàm đã được xây dựng sẵn để nhận input từ người dùng. Hai hàm đó là:
- Hàm input()
- Hàm raw_input()
Hàm input() trong Python
Hàm này được sử dụng để nhận input từ người dùng. Hàm này giống hàm raw_input(), nhưng với hàm input() này thì bất cứ biểu thức nào được nhập từ người dùng thì nó ước lượng và sau đó trả về kết quả. Ví dụ:
str = input("Nhap dau vao cua ban: ");print "Dau vao da nhan la : ", str
Code trên sẽ cho kết quả sau tùy thuộc vào input bạn đã nhập:
Nhap dau vao cua ban: [x*5 for x in range(2,10,2)]Dau vao da nhan la : [10, 20, 30, 40]
Hàm raw_input() trong Python
Hàm raw_input() được sử dụng để nhận đầu vào từ người dùng. Nó nhận đầu vào từ Standard Input dưới dạng một chuỗi và đọc dữ liệu từ từng dòng một. Ví dụ:
str = raw_input("Nhap dau vao cua ban: ");print "Dau vao da nhan la : ", str
Kết quả khi mình nhập "Hello Python!" là:
Nhap dau vao cua ban: Hello PythonDau vao da nhan la : Hello Python
Ghi chú: Hàm raw_input() trả về một chuỗi. Vì thế trong trường hợp một biểu thức cần được ước lượng, thì nó phải ép kiểu sang kiểu dữ liệu sau của nó. Bạn theo dõi một số ví dụ dưới đây.
Ví dụ 1:
prn=int(raw_input("Trang VietJack"))r=int(raw_input("Thu Tu"))t=int(raw_input("Vi Tri"))si=(prn*r*t)/100print "VietJack Chao Ban ",si
Kết quả là:
>>> Trang VietJack1000Thu Tu10Vi Tri2VietJack Chao Ban 200>>>
Ví dụ 2:
name=raw_input("Nhap ten ban ")math=float(raw_input("Nhap diem mon Toan"))physics=float(raw_input("Nhap diem mon Vat Ly"))chemistry=float(raw_input("Nhap diem mon Hoa Hoc"))rollno=int(raw_input("Nhap mssv"))print "Welcome ",nameprint "MSSV cua ban la ",rollnoprint "Diem mon Toan la ",mathprint "Diem mon Vat Ly la ",physicsprint "Diem mon Hoa Hoc la ",chemistryprint "Diem trung binh la ",(math+physics+chemistry)/3
Kết quả là:
>>> Nhap ten ban HoangNhap diem mon Toan7.68Nhap diem mon Vat Ly7.14Nhap diem mon Hoa Hoc8.84Nhap mssv0987645672Welcome HoangMSSV cua ban la 987645672Diem mon Toan la 7.68Diem mon Vat Ly la 7.14Diem mon Hoa Hoc la 8.84Diem trung binh la 7.8866666667>>>
Làm việc với File trong Python
Python cung cấp nhiều cách tiện lợi để bạn làm việc với file. Ở trên, bạn đã đọc dữ liệu từ Standard Input và ghi dữ liệu tới Standard Output. Bây giờ chúng ta tìm hiểu cách sử dụng các file dữ liệu thực sự. Một file là một nơi lưu trữ ngoại vi trên hard disk, tại đó dữ liệu có thể được lưu trữ và thu nhận. Dưới đây là các hoạt động trên File:
Mở file trong Python
Trước khi làm việc với bất cứ File nào, bạn phải mở File đó. Để mở một File, Python cung cấp hàm open(). Nó trả về một đối tượng File mà được sử dụng với các hàm khác. Với File đã mở, bạn có thể thực hiện các hoạt động đọc, ghi, … trên File đó. Cú pháp của hàm open() là:
doi_tuong_file = open(ten_file [, access_mode][, buffer])
Ở đây,
- ten_filelà tên File bạn muốn truy cập.
- access_modexác định chế độ của File đã được mở. Có nhiều mode sẽ được trình bày trong phần dưới. Bạn nên xác định mode này phụ thuộc vào các hoạt động mà bạn muốn thực hiện trên File đó. Chế độ truy cập mặc định là read.
- bufferNếu buffer được thiết lập là 0, nghĩa là sẽ không có trình đệm nào diễn ra. Nếu xác định là 1, thì trình đệm dòng được thực hiện trong khi truy cập một File. Nếu là số nguyên lớn hơn 1, thì hoạt động đệm được thực hiện với kích cỡ bộ đệm đã cho. Nếu là số âm, thì kích cỡ bộ đệm sẽ là mặc định (hành vi mặc định).
Đóng một File trong Python
Khi bạn đã thực hiện xong các hoạt động trên File thì cuối cùng bạn cần đóng File đó. Python tự động đóng một File khi đối tượng tham chiếu của một File đã được tái gán cho một file khác. Tuy nhiên, sử dụng phương thức close() để đóng một file là một sự thực hành tốt cho bạn. Phương thức close() có cú pháp như sau:
fileObject.close();
Đọc một File trong Python
Để đọc một File, bạn sử dụng phương thức read() trong Python. Cú pháp là:
doi_tuong_file.read(giatri);
Ở đây, value là số byte để được đọc từ file đã mở. Phương thức này bắt đầu đọc từ phần đầu file và nếu bạn không cung cấp tham số value thì phương thức này cố gắng đọc nhiều dữ liệu nhất có thể, có thể tới cuối File.
Ghi tới một File trong Python
Phương thức write() được sử dụng để ghi bất kỳ chuỗi nào tới một File đã mở. Bạn chú ý là phương thức write này không thêm một ký tự newline (dòng mới) ('\n') vào cuối chuỗi. Cú pháp của write() là:
doi_tuong_file.write(string);
Dưới đây là chương trình ví dụ để đọc và ghi dữ liệu từ một File trong Python:
obj=open("abcd.txt","w")obj.write("Python xin chao cac ban")obj.close()obj1=open("abcd.txt","r")s=obj1.read()print sobj1.close()obj2=open("abcd.txt","r")s1=obj2.read(20)print s1obj2.close()
Kết quả là:
>>> Python xin chao cac banChao mung ban den voi the gioi Python>>>
Các thuộc tính của File trong Python
Đối tượng File có các thuộc tính sau:
Thuộc tính |
Miêu tả |
file.closed |
Trả về true nếu file đã được đóng, nếu không là false |
file.mode |
Trả về chế độ truy cập nào mà file đã mở với |
file.name |
Trả về tên file |
file.softspace |
Trả về false nếu space được yêu cầu tường minh với print, nếu không là true |
Ví dụ
Chúng ta tạo foo.txt có nội dung sau:
# Mo mot filefo = open("foo.txt", "wb")fo.write( "Python la mot ngon ngu lap trinh tuyet voi.\nMinh cung nghi nhu the!!\n"); # Dong file da mofo.close()
Giờ chúng ta kiểm tra các thuộc tính của nó:
# Mo mot filefo = open("foo.txt", "wb")print "Ten cua file la: ", fo.nameprint "File da duoc dong hay chua : ", fo.closedprint "Che do mode la : ", fo.modeprint "Softspace la : ", fo.softspace
Kết quả là:
Ten cua file la: foo.txtFile da duoc dong hay chua : FalseChe do mode la : wbSoftspace la : 0
Các chế độ truy cập (mode) của File trong Python
File có thể được mở với các chế độ truy cập khác nhau. File có thể được mở trong Text Mode hoặc Binary Mode. Bảng dưới liệt kê và giới thiệu các chế độ này:
Mode |
Miêu tả |
r |
Mở file trong chế độ đọc, đây là chế độ mặc định. Con trỏ tại phần bắt đầu của File |
rb |
Mở file trong chế độ đọc cho định dạng nhị phân, đây là chế độ mặc định. Con trỏ tại phần bắt đầu của File |
r+ |
Mở file để đọc và ghi. Con trỏ tại phần bắt đầu của File |
rb+ |
Mở file để đọc và ghi trong định dạng nhị phân. Con trỏ tại phần bắt đầu của File |
w |
Mở File trong chế độ ghi. Nếu file đã tồn tại, thì ghi đè nội dung của file đó, nếu không thì tạo một file mới |
wb |
Mở File trong chế độ ghi trong định dạng nhị phân. Nếu file đã tồn tại, thì ghi đè nội dung của file đó, nếu không thì tạo một file mới |
w+ |
Mở file để đọc và ghi. Nếu file tồn tại thì ghi đè nội dung của nó, nếu file không tồn tại thì tạo một file mới để đọc và ghi |
wb+ |
Mở file để đọc và ghi trong định dạng nhị phân. Nếu file tồn tại thì ghi đè nội dung của nó, nếu file không tồn tại thì tạo một file mới để đọc và ghi |
a |
Mở file trong chế độ append. Con trỏ là ở cuối file nếu file này đã tồn tại. Nếu file không tồn tại, thì tạo một file mới để ghi |
ab |
Mở file trong chế độ append trong chế độ nhị phân. Con trỏ là ở cuối file nếu file này đã tồn tại. Nếu file không tồn tại, thì tạo một file mới để ghi |
a+ |
Mở file trong để đọc và append. Con trỏ file tại cuối nếu file đã tồn tại. Nếu không tồn tại thì tạo một file mới để đọc và ghi |
ab+ |
Mở file trong để đọc và append trong định dạng nhị phân. Con trỏ file tại cuối nếu file đã tồn tại. Nếu không tồn tại thì tạo một file mới để đọc và ghi |
Thay tên file trong Python
Phương thức rename() trong os Module được sử dụng để thay tên file. Phương thức này nhận hai tham số là tên file cũ và tên file mới.
Cú pháp
os.rename(ten_file_hien_tai, ten_file_moi)
Ví dụ sau thay tên test1.txt thành test2.txt:
import os # Thay ten tu test1.txt thanh test2.txtos.rename( "test1.txt", "test2.txt" )
Xóa file trong Python
Bạn có thể sử dụng phương thức remove() của os Module để xóa các file với tham số là tên file bạn cần xóa.
Cú pháp
os.remove(ten_file)
Ví dụ sau sẽ xóa test2.txt:
import os # Xoa test2.txtos.remove("text2.txt")
Vị trí File trong Python
Phương thức tell() nói cho bạn biết vị trí hiện tại bên trong file. Nói cách khác, việc đọc và ghi tiếp theo sẽ diễn ra trên các byte đó.
Phương thức seek(offset[, from]) thay đổi vị trí hiện tại bên trong file. Tham số offset chỉ số byte để được di chuyển. Tham số from xác định vị trí tham chiếu mà từ đó byte được di chuyển.
Nếu from được thiết lập là 0 nghĩa là sử dụng phần đầu file như là vị trí tham chiếu và 1 nghĩa là sử dụng vị trí hiện tại như là vị trí tham chiếu và nếu là 2 thì sử dụng phần cuối file như là vị trí tham chiếu.
Ví dụ
Sử dụng foo.txt đã tạo ở trên để minh họa các hàm tell và seek:
# Mo mot filefo = open("foo.txt", "r+")str = fo.read(10);print "Chuoi da doc la : ", str # Kiem tra con tro hien taiposition = fo.tell();print "Con tro file hien tai : ", position # Dat lai vi tri con tro tai vi tri ban dau mot lan nuaposition = fo.seek(0, 0);str = fo.read(10);print "Chuoi da doc la : ", str# Dong file da mofo.close()
Kết quả là:
Chuoi da doc la : Python isCon tro file hien tai : 10Chuoi da doc la : Python la
Thư mục trong Python
Tất cả file được chứa trong các thư mục đa dạng và Python cũng cung cấp rất nhiều phương thức để xử lý các hoạt động đa dạng liên quan tới thư mục. os Module có một số phương thức giúp bạn tạo, xóa, và thay đổi các thư mục.
Phương thức mkdir() trong Python
Bạn có thể sử dụng phương thức mkdir() của os Module để tạo các thư mục trong thư mục hiện tại. Bạn cần cung cấp một tham số là tên thư mục cho phương thức này.
Cú pháp
os.mkdir("thu_muc_moi")
Ví dụ sau tạo một thư mục test trong thư mục hiện tại.
import os # Tao mot thu muc la "test"os.mkdir("test")
Phương thức chdir() trong Python
Bạn có thể sử dụng phương thức chdir() để thay đổi thư mục hiện tại. Phương thức chdir() nhận một tham số là tên của thư mục bạn muốn tới từ thư mục hiện tại.
Cú pháp
os.chdir("thu_muc_moi")
Ví dụ sau tới thư mục /home/newdir.
import os # Thay doi mot thu muc toi "/home/newdir"os.chdir("/home/newdir")
Phương thức getcwd() trong Python
Phương thức getcwd() hiển thị thư mục đang làm việc hiện tại.
Cú pháp
os.getcwd()
Ví dụ sau hiển thị thư mục đang làm việc hiện tại.
import os # Lenh nay se cung cap vi tri thu muc hien taios.getcwd()
Phương thức rmdir() trong Python
Phương thức rmdir() xóa thư mục mà có tên được truyền như là một tham cố cho phương thức này.
Trước khi xóa thư mục, tất cả nội dung trong nó nên được xóa.
Cú pháp
os.rmdir('ten_thu_muc')
Ví dụ sau sẽ xóa thư mục /tmp/test. Bạn phải cung cấp tên đầy đủ của thư mục, nếu không phương thức này sẽ không tìm thấy thư mục đó và sẽ không có hoạt động xóa diễn ra.
import os # Xoa thu muc "/tmp/test" .os.rmdir( "/tmp/test" )
Các phương thức xử lý File và thư mục trong Python
Đối tượng File và OS cung cấp rất nhiều phương thức tiện ích để xử lý và thao tác với File và thư mục trên hệ điều hành Windows và Unix. Bạn truy cập đường link sau để tìm hiểu các phương thức này.
- Đối tượng File: cung cấp các phương thức để thao tác File.
- os Module: cung cấp rất nhiều phương thức để thao tác File và thư mục.