Học Python từ con số 0 (Phần 2) - Function và Module

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)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à:

  1. Viết bằng Python: có phần mở rộng là .py
  2. Các thư viện liên kết động: có phần mở rộng là .dll, .pyd, .so, .sl, ...
  3. 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:

  1. Thư mục hiện hành mà script đang gọi
  2. các thư mục trong PYTHONPATH (nếu có set)
  3. 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