Học Python từ con số 0 (Phần 2) - Function và Module
Bài đăng này đã không được cập nhật trong 6 năm
Function
Khai báo theo cú pháp
def funcname(param1, param2, ...):
statements(s)
Hàm nếu không trả về dữ liệu thì mặc định sẽ trả về giá trị None
Ví dụ khai báo hàm tính và trả về giá trị tổng của 2 tham số đầu vào:
def sum(a, b):
retun a + b
Cách gọi hàm
sum(1, 2) #3
Hàm có hỗ trợ giá trị mặc định cho tham số khi không truyền vào. Ví dụ
def plus(c, d = 10):
return (c + d)
Nếu gọi hàm trên như sau:
plus(2) #12
Một cách gọi hàm đặc biệt khác của Python cho phép thay đổi thứ tự truyền tham số bằng cách đặt tên tham số khi gọi hàm. Ví dụ có thể gọi hàm sum(a, b)
ở ví dụ trên bằng cách truyền tham số b trước a . Ví dụ
sum(b = 1, a = 10)
Xử lý chuỗi
Có thể tạo các chuỗi con thông qua toán tử lấy khoảng [start:end]
(range). Mặc định start
là vị trí đầu chuỗi (0)
và end
là vị trí cuối chuỗi. Vị dụ:
str = 'Hello world'
print str[0:4] #Hell
print str[:4] #Hell
print str[-3:] #rld
print str[6: -3] #wo
Tuple
Tuple cũng là một cấu trúc mảng, tương tự cấu trúc List. Một số điểm khác nhau cơ bản khai báo Tuple sử dụng cặp dấu ngoặc (...)
và một tuple đã khai báo rồi thì không thay đổi được giá trị (immutable) và không hỗ trợ các phương thức như append()
, pop()
, ... Ví dụ:
myTuple = ('x', 'y'. 'z')
print myTuple #('x', 'y', 'z')
Vẫn hỗ trợ các để truy xuất phần tử giống List như là truy xuất theo dạng index, range, find...
Phân chia module
Các loại module / thư viện
Có 3 loại module thường thấy là:
- Viết bằng Python: có phần mở rộng là
.py
- Các thư viện liên kết động: có phần mở rộng là
.dll
,.pyd
,.so
,.sl
, ... - C-Module liên kết với trình phiên dịch
Đường dẫn tìm để load module
Để tải một module vào script của bạn, sử dụng cú pháp
import modulename
khi gặp câu lệnh trên thì trình biên dịch sẽ tiến hành tìm kiếm file module tương ứng theo thứ tự thư mục sau:
- Thư mục hiện hành mà script đang gọi
- các thư mục trong PYTHONPATH (nếu có set)
- Các thư mục cài đặt chuẩn trên Linux, Unix... Có thể biết được đường dẫn mà một module đã được load bằng đoạn code dưới đây:
import math
math. __file__ #'usr/lib/python3.6/lib-dynload/math.so'
Để lấy được danh sách các thuộc tính và phương thức mà module hỗ trợ, sử dụng hàm dir(modulename)
. Nếu chỉ gọi dir()
không truyền tham số, để lấy các thuộc tính và phương thức của scope hiện tại đang thực thi
Cách khai báo và sử dụng module
Giả sử bạn tạo một file python mymath.py
có nội dung như sau
def cong(a, b):
return a + b
def tru(a, b):
return a - b
def nhan(a, b)
return a * b
Sau đó taọ một file có tên myexample.py
, trong cùng thư mục với file mymath.py
vừa tạo ở trên, có nội dung như sau
import mymath
num1 = 1
num2 = 2
print `Tong hai so la: `,mymath.cong(num1, num2)
# Kết quả trả về là 3
Package module
Có thể gom nhiều module .py
vào một thư mục và tên thư mục là tên của package và tạo một file __init__.py
trong thư mục này. Như vậy cấu trúc của một package sẽ như sau:
| -- mypack
| | -- __init__.py
| | -- mymodule1.py
| | -- mymodule2.py
Có thể sử dụng mymodule1
theo cú pháp import sau:
import mypack.mymodule1
hoặc
import mypack.mymodule1 as mymodule1
hoặc
import mypack.mymodule1 as mod
Khi sử dụng một module thuộc một package thì các lệnh trong file __init__.py
sẽ được thực hiện trước. Thông thuường thì file __init__.py
sẽ rỗng.
Có thể tạo các subpackage bên trong một package theo đúng cấu trúc thư mục, có file __init__.py
. Ví dụ:
import mypack.mysubpack.mysubpack.module
Cảm ơn bạn đã theo dõi bài viết này. Ở bài viết tiếp theo tôi sẽ đề cập đến thao tác trên tập tin và thư mục
All rights reserved