Tổng số lượt xem trang

Thứ Ba, 30 tháng 5, 2017

Python – tóm tắt


Python là ngôn ngữ thông dịch (interpreted language). Mỗi câu lệnh được dịch trực tiếp, thay vì dịch cả chương trình. Trong Python, chúng ta không cần khai báo kiểu cho biến, tham số, hàm và các phương thức. Điều này làm cho Python ngắn gọn và linh hoạt, và không tốn thời gian kiểm tra kiểu trong thời gian biên dịch. Python sẽ kiểm tra kiểu giá trị tại thời gian chạy. 
      
      Không giống với C++ và Java, Python không yêu cầu dấu kết thúc mỗi câu lệnh ở cuối câu lệnh. Tuy nhiên, nó cũng phân biệt chữ cái hoa/thường khi đặt tên biến. Python được lưu trữ trong tệp có phần mở rộng “.py”. 

      Python được xem là ngôn ngữ dễ học, dễ đọc và dễ bảo trì. Là ngôn ngữ hỗ trợ phương thức lập trình có cấu trúc, lập trình hướng đối tượng, và có bộ thu gom rác tự động. Python cũng dễ dàng tích hợp với nhiều ngôn ngữ khác (C, C++, Java).



Variables – Biến
Biến là các tên để lưu trữ dữ liệu hay đối tượng.

a_string = "hello, world"
an_integer = 12
a_float = 3.14
a_boolean = True

Print – In dữ liệu
Để in ra hằng hay biến

print ('hello, world')
print (12)
print ((5+3)/2)
------
hello, world
12
4

Khi in nhiều biến thì dùng dấu phẩy giữa các biến:

print ('abc', 12, a_float)
------
('abc', 12, 3.14)

In một xâu dài thì dùng thêm kí hiệu ‘\’

print 'The only thing to do with good advice is',\
        'to pass it on. It is never of',\
        'any use to oneself.'
------
The only thing to do with good advice is to pass it on. It is never of any use to oneself.

Comment – chú thích 
# khi muốn chú thích một câu lệnh (một dòng)

‘‘‘ Còn với chương trình có nhiều dòng, 
ta cho đoạn chương trình muốn 
chú thích vào giữa ’’’

Numbers - Kiểu số
Python hỗ trợ kiểu dữ liệu số: int (số nguyên); float (số có dấu phẩy thập phân); complex (số phức)

print (17 / 3) # phép chia
print (17 // 3)  # phép chia lấy phần nguyên
print (17 % 3)   # phép chia lấy phần dư
print (5 * 3 + 2)# phép nhân cộng phần dư
------
5
5
2
17

Strings - Kiểu chuỗi
Có ba chú pháp dùng cho hằng chuỗi:

string_single_quotes = 'This'
string_double_quotes = "is"
string_triple_quotes = """a Python program."""

Chúng ta có thể dùng chú thích trong chuỗi, nhờ kết hợp các cú pháp trên:

string1 = 'hello "world"'
string2 = "don't"
print string1
print string2
------
hello "world"
don't

Chúng ta cũng có những thao tác trên chuỗi:

strings = string1 + " : " + string2
strings_uppercase = strings.upper()
beginning = strings[0:4] # kĩ thuật slicing chỉ số
print (strings)
print (strings_uppercase)
print (beginning)
------
hello "world" : don't
HELLO "WORLD" : DON'T
hell

Chúng ta có thể chuyển đổi qua lại giữa số và chuỗi:

i = 12
s = str(i)
s = '17'
i = int(s)

Chúng ta có thể thay thế một xâu con trong xâu lớn:

a_string = 'This is a string. A string consists of many characters'
newstring = a_string.replace('string', 'hahiho')
print (newstring)
------
This is a hahiho. A hahiho consists of many characters

Chú ý: một chuỗi (string) trong Python là một hằng số (immutable), tức là nó không thay đổi được giá trị. Tất cả các thao tác trên string đều tạo ra một string mới.

List – danh sách
Danh sách là một mảng các phần tử. Điều chú ý là các phần tử này không cần cùng kiểu, nó có thể là một đối tượng bất kì.

a_list = [1, 2, 3, 'abc']
another_list = [a_list, 'ef', ['This', 10, 'is', a_list ]]
print (a_list)
print (another_list)
------
[1, 2, 3, 'abc']
[[1, 2, 3, 'abc'], 'ef', ['This', 10, 'is', [1, 2, 3, 'abc']]]

Chúng ta có thể truy xuất trực tiếp vào phần tử của danh sách:

elem = a_list[2]
elem2 = another_list[2][0]
print (elem)
print (elem2)
list2 = a_list[2:4] # kĩ thuật slicing chỉ số trong danh sách
print (list2)
------
3
This
[3, 'abc']

Chúng ta có thể thêm phần tử vào danh sách:

list2.append('olala')
list2.append(66)
print (list2)
------
[3, 'abc', 'olala', 66]

Chúng ta có thể kiểm tra một phần tử có trong danh sách hay không:
if 'olala' in list2:
    print ('obama')
------
obama

Chú ý: một danh sách (list) trong Python có thể thay đổi được giá trị (mutable). Tất cả các thao tác trên list đều tác động nên chính đối tượng đó (ví dụ append).

Tuples 
Tuple tương tự như list, nhưng kích cỡ của nó cố định. Tuple là một mảng không thay đổi được. Một khi một tuple được khởi tạo, các phần tử của nó không thể thay đổi, bị xóa đi hay được chèn thêm vào.

a_tuple = (1, 2, 3, 'abc')
another_tuple = 'This', 10, 'is', a_tuple
print (a_tuple)
print (another_tuple)
------
(1, 2, 3, 'abc')
('This', 10, 'is', (1, 2, 3, 'abc'))

Giả sử chúng ta cố thêm một phần tử vào tuple
a_tuple.append(100)
    a_tuple.append(100)
------
AttributeError: 'tuple' object has no attribute 'append'

Dictionary
Mỗi phần tử trong dictionary gồm có 2 thành phần: key và value được tách biệt bởi dấu (:). Mỗi dictionary được khai báo trong ngoặc nhọn {}. Yêu cầu key trong các phần tử của dictionay phải khác nhau, trong khi value có thể không cần. Trong dictionary, value có thể có bất kì kiểu dữ liệu nào, nhưng key phải là kiểu không thay đổi được như string, number hay tuple.

stuff = {'name': 'Zed', 'age': 39, 'height': 6 * 12 + 2}
print stuff
print stuff['name']
print stuff['age']
print stuff['height']
------
{'age': 39, 'name': 'Zed', 'height': 74}
Zed
39
74

Chúng ta có thể thêm phần tử dễ dàng

stuff['city'] = "San Francisco"
print stuff
------
{'city': 'San Francisco', 'age': 39, 'name': 'Zed', 'height': 74}

Chúng ta cũng có thể duyệt để lấy key và value của mỗi phần tử trong dictionary:

data = {"a": 1, "b": 2, "c": 3}
for k, v in data.items():
    print(k, v)
------
('a', 1)
('c', 3)
('b', 2)

Câu lệnh điều khiển
Khối cấu lệnh được phân định bằng khoảng trống (spaces hay tabs) ở đầu các dòng lệnh. Đây chính là sự khác biệt của Python với các ngôn ngữ khác. Vì vậy, đừng bao giờ quên tab hay space nhé!
if/elseif/else:

var1 = 10
var2 = 20
if var1 != var2:
    print("var1 is not equal to var2")
elif var1 > var2:
    print("var1 is greater than var2")
elif var2 > var1:
    print("var2 is greater than var1")
else:
    print("var1 is equal to var2")
------
var1 is not equal to var2

while

count = 0
fruits = ['banana', 'apple',  'mango', 'melon', 'orange', 'pear', 'pineapple']
while count < len(fruits):
   print 'Current fruit:',fruits[count]
   count += 1
------
Current fruit : banana
Current fruit : apple
Current fruit : mango
Current fruit : melon
Current fruit : orange
Current fruit : pear
Current fruit : pineapple

for

fruits = ['banana', 'apple',  'mango', 'melon', 'orange', 'pear', 'pineapple']
for index in range(len(fruits)):
   print 'Current fruit :', fruits[index]
------
Current fruit : banana
Current fruit : apple
Current fruit : mango
Current fruit : melon
Current fruit : orange
Current fruit : pear
Current fruit : pineapple

Tệp – file 
File là nơi lưu trữ dữ liệu mà chúng ta cần làm việc nhiều. Khi làm việc với file, chúng ta cần mở (phương thức open()) và sau khi xong, chúng ta cần đóng lại (close()).

tep = open('my_file.txt')
for dong in tep:
    print (dong)
tep.close()
------
Machine learning is the subfield of computer science that 
gives computers the ability to learn 
without being explicitly programmed (Arthur Samuel, 1959).


Chúng ta cũng có thể ghi các dữ liệu ra một file:

fw = open('out_file.txt', 'w')
fw.write('Machine learning \n') # note '\n' is necessary here
fw.write('Evolved from the study of pattern recognition and'\
'computational learning theory in artificial intelligence')
fw.close()

Tham số thứ hai trong lệnh open(): ‘w’, ‘r’, ‘a’, để chỉ các chế độ làm việc với file: r – reading only (chỉ đọc), w- writing only (chỉ ghi), a – appending (nối vào cuối file).


Hàm – function 
Hàm là một khối các câu lệnh được tổ chức nhằm thực hiện một tác vụ nào đó. Chúng ta xây dựng hàm nhằm sử dụng lại tác vụ, đồng thời tạo cho chương trình dễ theo dõi và sử dụng lại. Chúng ta có thể sử dụng các hàm sẵn có cũng như tự xây dựng trên Python.

def printinfo(ten, tuoi):
   print "Ten : ", ten
   print "Tuoi: ", tuoi
   return;
printinfo('Hau', '66')
------
Ten :  Hau
Tuoi:  66

Các lời gọi hàm và dữ liệu truyền vào rất mềm dẻo trong Python:

printinfo(tuoi = '80', ten = 'nvhau')
------
Ten :  nvhau
Tuoi:  80

Hoặc thậm chí chúng ta có thể gán giá trị mặc định trong quá trình xây dựng hàm:

def printinfo(ten = 'hau', tuoi = 68):
   print "Ten : ", ten
   print "Tuoi: ", tuoi
   return;

Nếu chúng ta không truyền giá trị cho tham số, hàm sẽ in ra giá trị mặc định:

printinfo()
------
Ten :  hau
Tuoi:  68

Python là ngôn ngữ hỗ trợ nhiều thư viện, môi trường và công cụ để xây dựng các ứng dụng khác nhau: lập trình mạng, lập trình web, lập trình cơ sở dữ liệu. Người học nên tham khảo thêm tại các tài liệu [1-4]. 
Những lưu ý quan trọng cho Python:
zip() – là hàm trả ra một danh sách các tuples.

a = range(0,5)
b = range(-2,3)
c = range(1,6)
print (a)
print (b)
print (c)
z = zip(a,b,c)
print (z)
------
[0, 1, 2, 3, 4]
[-2, -1, 0, 1, 2]
[1, 2, 3, 4, 5]
[(0, -2, 1), (1, -1, 2), (2, 0, 3), (3, 1, 4), (4, 2, 5)]

Giả sử chúng ta có một danh sách các tuple và muốn tính tổng của các phần tử thứ nhất, thứ hai, thứ ba, v.v... tương ứng với nhau. Chúng ta cũng có thể dùng zip() để quá trình tính toán thuận tiện hơn:
l1 = [(0, -2, 1), (1, -1, 2), (2, 0, 3), (3, 1, 4), (4, 2, 5)]
l2=[]
for a in zip(*l1):
    l2.append(sum(a))
print(l2)
------
[10, 0, 15]

Trong Python, viết chương trình trên gọn hơn với kết quả không thay đổi:
l1 = [(0, -2, 1), (1, -1, 2), (2, 0, 3), (3, 1, 4), (4, 2, 5)]
l2 =[sum(a) for a in zip(*l1)]
print (l2)

Đây là một kĩ thuật được sử dụng rất nhiều trong Python. 
lambda – là hàm nặc danh trong Python. Nó rất hữu ích khi thực thi một công việc đơn giản nhằm làm đầu vào cho một hàm khác. Cú pháp được viết theo:
lambda tham-số : biểu-thức
Ví dụ:

tong = lambda x,y: x+y
print (tong(12)) # kết quả sẽ in ra 3

Hoặc một chương trình kiểm tra số tự nhiên xem có là số chẵn không:

ktChan = lambda x: (x%2 == 0)
print (ktChan(4)) # True
print (ktChan(5)) # False

Dùng hàm lambda làm đầu vào cho hàm filter(hàm-số, đối–số), hàm filter sẽ trả ra danh sách các phần tử nào trong đối-số mà hàm-số cho giá trị True ứng với phần tử đó.

ds = [5, 2, 7, 10, 9, 11, 0, 1]
sochan = filter(lambda x: (x%2 == 0) , ds)
print (sochan)      # kết quả sẽ trả ra [2, 10, 0]


Người học cần đọc và hiểu tường tận hàm zip và lambda để quá trình cài đặt các thuật toán Máy học dễ dàng hơn. Với những người chưa có nhiều kiến thức và kĩ năng Python, hãy tham khảo thêm tài liệu [1-4]. Người học cũng đừng quá lo lắng khi chưa hiểu kĩ. Python cần thời gian để chúng ta có thể ‘tiêu hóa’ được!

Tài liệu tham khảo:
1. https://wiki.python.org/moin/BeginnersGuide/Programmers
2. https://developers.google.com/edu/python/introduction
3. https://docs.python.org/3/tutorial/
4. https://www.tutorialspoint.com/python/index.htm

1 nhận xét:

balvpro nói...

Bài viết rất chi tiết và dễ hiểu thầy ạ. Bạn nào mà dùng Python 3 thì chú ý khi viết hàm print thì thêm ngoặc() vào đầy đủ để tránh lỗi biên.
Ví dụ phải viết:
print ("Ten : ", ten)
thay vì:
print "Ten : ", ten
- Ý nữa là trong ví dụ về lambda thì cần thêm dấu phẩy giữa 2 tham số
tong=lambda x,y:x+y
print(tong(1,2))#should return 3 here