Python Cơ bản: Keywords and Identifiers, Statements and Comments, Variables
Các từ khóa (keywords) trong Python
Keywords là những từ được Python định nghĩa và lưu trữ trong nó.
Chúng ta không thể khai báo hay định nghĩa một biến hoặc một function nào đó mà nó trùng tên với các keywords
mà Python đã định nghĩa trước đó. Những keyword được sử dụng để định nghịa cú pháp và cấu trúc trong Python
Trong Python, các từ khóa có phân biệt chữ hoa chữ thường.
Tính đến python 3.7 có 37 keywords. Tất cả các keywords đều viết thường ngoài trừ True
, False
và None
viết in hoa ký tự đầu tiên. Dưới đây là danh sách các keywords
False | await | else | import | pass | |||||
None | break | except | in | raise | |||||
True | class | finally | is | return | |||||
and | continue | for | lambda | try | |||||
as | def | from | nonlocal | while | |||||
assert | del | global | not | with | |||||
async | elif | if | or | yield |
Định danh trong Python
Định danh là tên được đặt cho các thực thể như lớp, hàm, biến, v.v. Nó giúp phân biệt thực thể này với thực thể khác.
Quy ước viết định danh cho Python
- Một định danh có thể là sự kết hợp giữa những ký tự thường (a-z) hoặc ký tự in hoa (A-Z) hoặc số (0-9) hoặc dấu gạch chân
(_)
. Tên giống nhưmyClass
,name_1
vàprint_my_name
- Một định danh không thể bắt đầu bằng một số như là
1name
là không hợp lệ, nhưngname1
laị hợp lệ. - Người dùng không thể khai báo định danh trùng với các keywords được lưu trữ trong python, như là :
global = 1
,dict = {"name" : "john_doe" }
- Người dùng không thể khai báo định danh chứa các ký tự đặc biệt như
!
,@
,#
,$
,%
,^
... - Một đinh danh có độ dài không giới hạn.
Khai báo câu lệnh
Không giống như những ngôn ngữ khác, python là ngôn ngữ lập trình động, nó không cần phải khai báo kiểu dữ liệu cho biến ( như int
, string
...).
Chỉ cần khai báo biến và gán giá trị cho biến đó thì python khi biên dịch chương trình có thể đọc được và phân tích cú pháp cho kiểu dữ liệu của biến được.
VD:
name = "John Doe" colors = ["red" , "green", "blue"] user = { "name" : "John Doe" "age" : 23 }
Câu lệnh nhiều dòng
a = 1 + 2 + 3 + \ 4 + 5 + 6 + \ 7 + 8 + 9
Đây là sự tiếp nối dòng tường minh. Trong Python, những dòng nối tiếp nhau được thực thi ngầm bên trong dấu ( )
, hoặc [ ]
, hoặc { }
. Ví dụ chúng ta có thể thực thi đoạn code trên như sau :
a = (1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9)
Ở đây, các dấu ngoặc đơn bao quanh ()
hoàn toàn tiếp tục dòng. Trường hợp tương tự với [ ]
và { }
. Ví dụ:
colors = ["red" , "green", "blue"]
Chúng ta cũng có thể đặt nhiều câu lệnh trong một dòng bằng cách sử dụng dấu chấm phẩy, như sau:
a = 1; b = 2; c = 3;
Thụt lề trong Python
Hầu hết các ngôn ngữ lập trình như C, C++, Java, Javascript... đều sử dụng { }
để định nghĩa một khối lệnh mà code chỉ được phép thực thi trong đó. Nhưng Python không dùng như vậy, nó sử dụng bằng cách thụt lề.
Một khổi lệnh ( phần thân của một function, vòng lặp...) bắt đầu bằng vì trí phần tử đầu tiên trong scope bị thụt lề vào trong và kết thúc với dòng có vị trí trùng với vị trí phần tử đầu tiên trong scope đó.
Nói chung, bốn khoảng trắng được sử dụng để thụt lề và được ưu tiên hơn các tab. Đây là một ví dụ.
for i in range(1,11): print(i) if i == 5: break
Việc thực thi thụt lề trong Python làm cho mã trông gọn gàng và clean. Điều này dẫn đến các chương trình Python trông giống nhau và nhất quán.
Thụt lề có thể bị bỏ qua khi tiếp tục dòng, nhưng bạn luôn nên thụt lề. Nó làm cho mã dễ đọc hơn. Ví dụ:
if True: print('Hello') a = 5
và
if True: print('Hello'); a = 5
cả hai đều hợp lệ và tương tự nhau, nhưng kiểu cũ rõ ràng hơn.
Thụt lề không chính xác sẽ dẫn đến lỗi IndentationError
.
Python Comments
Comments trong bất kỳ ngôn ngữ lập trình nào cũng đều rất quan trọng trong khi viết một chương trình. Chúng mô tả những gì đang diễn ra bên trong một chương trình, để người xem mã nguồn không gặp khó khăn khi tìm ra nó.
Bạn có thể quên các chi tiết chính của chương trình bạn vừa viết trong thời gian một tháng. Vì vậy, dành thời gian để giải thích những khái niệm này dưới dạng nhận xét luôn luôn có hiệu quả.
Trong Python, chúng tôi sử dụng ký hiệu dấu thăng (#) để bắt đầu viết bình luận.
Nó mở rộng đến ký tự dòng mới. Nhận xét là để người lập trình hiểu rõ hơn về một chương trình. Trình thông dịch Python khi thực thi sẽ bỏ qua các đoạn comments.
#This is a comment #print out Hello print('Hello')
Comments nhiều dòng
Chúng ta có thể có những nhận xét kéo dài đến nhiều dòng. Một cách là sử dụng ký hiệu dấu thăng (#) ở đầu mỗi dòng. Ví dụ:
#This is a long comment #and it extends #to multiple lines
Một cách khác để làm điều này là sử dụng 3 lần dấu nháy đơn hoặc kép, ''' hoặc """ để mở comment và khi kết thúc cũng cần phải đóng bằng 3 lần dấu nháy tương ứng.
"""This is also a perfect example of multi-line comments"""
Docstrings trong Python
Docstring là một bản rút gọn, tóm tắt những gì có trong document
Python docstrings (gọi khác là documentation docstrings) là các chuỗi ký tự xuất hiện ngay sau định nghĩa của một hàm, phương thức, lớp hoặc mô-đun.
Dấu ngoặc kép được sử dụng trong khi viết docstrings. Ví dụ:
def double(num): """Function to double the value""" return 2*num
Docstrings xuất hiên ngay sau định nghĩa của một hàm, lớp hoặc một mô-đun. Điều này tách các docstrings khỏi các bình luận nhiều dòng bằng cách sử dụng 3 dấu nháy kép hoặc nháy đơn.
Các docstrings được liên kết với đối tượng dưới dạng thuộc tính __doc__
của chúng.
Vì vậy, chúng ta có thể truy cập docstrings của hàm trên bằng các dòng code sau:
def double(num): """Function to double the value""" return 2*num print(double.__doc__)
Kết quả là :
Function to double the value
Biến trong Python
Một biến là một vị trí được đặt tên được sử dụng để lưu trữ dữ liệu trong bộ nhớ. Sẽ rất hữu ích nếu coi các biến như một vùng chứa chứa dữ liệu có thể được thay đổi sau này trong chương trình. Ví dụ :
number = 10
Ở đây, chúng ta đã tạo một biến có tên là số. Chúng ta đã gán giá trị 10
cho biến.
Bạn có thể nghĩ rằng biến như là một cái balo đựng sách và giá trị của nó như là những cuốn sách được đặt trong chiếc balo đó.
number = 10 number = 1.1
Ban đầu, giá trị của số là 10
. Sau đó, nó được đổi thành 1,1
.
Lưu ý: Trong Python, chúng ta không thực sự gán giá trị cho biến. Thay vào đó, Python sẽ đưa 1 tham chiếu của một object hay một giá trị đến biến đó.
Gán giá trị cho các biến trong Python
Như bạn có thể thấy từ ví dụ trên, bạn có thể sử dụng toán tử gán =
để gán giá trị cho một biến.
VD1 : Khai báo và gán giá trị cho một biến
website = "apple.com" print(website)
Kết qủa :
apple.com
Trong chương trình trên, chúng ta đã gán giá trị apple.com
cho biến website
. Sau đó, chúng ta in ra giá trị được chỉ định cho website
tức là apple.com
Lưu ý: Python là ngôn ngữ suy luận kiểu (typed-inferred), vì vậy bạn không thể khai báo tường minh kiểu của biến. Nó tự động biết rằng
apple.com
là kiểustring
và do đó nó khai bào ngầm biếnwebsite
có kiểustring
VD2 : Thay đổi giá trị của biến
website = "apple.com" print(website) # assigning a new value to website website = "programiz.com" print(website)
Kết qủa :
apple.com programiz.com
Trong chương trình trên, ban đầu chúng ta đã gán apple.com
cho biến website
Sau đó, giá trị được thay đổi thành programmiz.com
.
VD3 : Gán nhiều giá trị cho nhiều biến
a, b, c = 1, 5.5, "Python" print(a) print(b) print(c)
Nếu chúng ta muốn gán cùng một giá trị cho nhiều biến cùng một lúc, chúng ta có thể làm như sau:
x = y = z = "same" print(x) print(y) print(z)
Chương trình thứ hai gán same
cho cả ba biến x
, y
và z
.
Biến hằng (constant)
Hằng số là một loại biến có giá trị không thể thay đổi. Sẽ rất hữu ích khi nghĩ về các hằng số như các thùng chứa chứa thông tin không thể thay đổi sau này.
Bạn có thể coi hằng số như một chiếc túi để đựng một số cuốn sách mà không thể thay thế một khi đã đặt bên trong túi.
Gán giá trị cho hằng số trong Python
Trong Python, hằng số thường được khai báo và gán trong một mô-đun. Ở đây, mô-đun là một tệp mới chứa các biến, hàm, v.v. được import
vào tệp chính. Bên trong mô-đun, hằng số được viết bằng tất cả các ký tự in hoa và có dấu gạch chân _
để tách các từ thay cho khoảng trắng.
VD3 : Khai báo và gán giá trị cho hằng số
Tạo một tệp Constant.py
PI=3.14 GRAVITY=9.8
Tạo têp main.py
import constant print(constant.PI) print(constant.GRAVITY)
Kết quả :
3.14 9.8
Trong chương trình trên, chúng ta tạo một tệp mô-đun Constant.py
. Sau đó, chúng ta gán giá trị không đổi cho PI
và GRAVITY
. Sau đó, chúng ta tạo một tệp main.py
và nhập mô-đun hằng số. Cuối cùng, chúng ta in giá trị không đổi.
Lưu ý : Trong thực tế, chúng ta Python không có biến gọi là hằng số đúng nghĩa. Việc đặt tên chúng bằng tất cả các chữ cái viết hoa là một quy ước để tách chúng khỏi các biến, tuy nhiên, nó không thực sự ngăn cản việc gán lại.
Quy tắc và Quy ước đặt tên cho các biến và hằng số
- Tên hằng và tên biến phải có sự kết hợp của các chữ cái ở dạng chữ thường (a đến z) hoặc chữ hoa (A đến Z) hoặc chữ số (0 đến 9) hoặc dấu gạch dưới (_). Ví dụ:
snake_case MACRO_CASE camelCase CapWords
- Tạo một cái tên có ý nghĩa. Ví dụ,
vowel
n có ý nghĩa hơnv
. - Nếu bạn muốn tạo một tên biến có hai từ, hãy sử dụng dấu gạch dưới để phân tách chúng. Ví dụ:
my_name current_salary
- Sử dụng các chữ cái in hoa có thể để khai báo một hằng số. Ví dụ:
PI G MASS SPEED_OF_LIGHT TEMP
- Đừng bao giờ sử dụng các ký hiệu đặc biệt như
!
,@
,#
,$
,%
, v.v. - Đừng bắt đầu tên biến bằng một chữ số.
Literals
Literal là một dữ liệu thô được cung cấp trong một biến hoặc hằng số. Trong Python, có nhiều loại literals khác nhau, chúng như sau:
Numeric Literals
Numeric Literals là bất biến (không thể thay đổi). Các chữ số có thể thuộc 3 kiểu số khác nhau: Số nguyên Integer
, Số thập phân Float
và Số phức Complex
.
VD 4 : Cách sử dụng Literals trong Python
a = 0b1010 #Binary Literals b = 100 #Decimal Literal c = 0o310 #Octal Literal d = 0x12c #Hexadecimal Literal #Float Literal float_1 = 10.5 float_2 = 1.5e2 #Complex Literal x = 3.14j print(a, b, c, d) print(float_1, float_2) print(x, x.imag, x.real)
Kết quả là :
10 100 200 300 10.5 150.0 3.14j 3.14 0.0
Trong chương trình trên,
- Chúng ta đã gán các ký tự số nguyên vào các biến khác nhau. Ở đây,
a
là chữ nhị phân,b
là chữ thập phân,c
là chữ bát phân vàd
là chữ thập lục phân. - Khi chúng ta in các biến, tất cả các ký tự được chuyển đổi thành các giá trị thập phân.
10,5
và1,5e2
là các ký tự dấu phẩy động.1,5e2
được biểu thị theo cấp số nhân và tương đương với1,5 * 10^2
- Chúng ta đã gán một chữ phức tạp, tức là
3,14j
trong biếnx
. Sau đó, chúng ta sử dụng số ảo (x.imag) và số thực (x.real) để tạo ra các phần ảo và thực của số phức.
String literals
String literals là một chuỗi các ký tự được bao quanh bởi dấu nháy kép. Chúng ta có thể sử dụng cả dấu nháy đơn, nháy đôi hoặc gấp ba cho một chuỗi. Và, một ký tự literal là một ký tự đơn được bao quanh bởi dấu nháy đơn hoặc kép.
VD:
strings = "This is Python" char = "C" multiline_str = """This is a multiline string with more than one line code.""" unicode = u"\u00dcnic\u00f6de" raw_str = r"raw \n string" print(strings) print(char) print(multiline_str) print(unicode) print(raw_str)
Kết quả là :
This is Python C This is a multiline string with more than one line code. Ünicöde raw \n string
Trong chương trình trên, This is Python
là một chuỗi ký tự và C
là ký tự đơn.
Giá trị trong dấu ngoặc kép """
được gán cho multiline_str
là một chuỗi nhiều dòng.
Chuỗi u"\u00dcnic\u00f6de"
là một ký tự Unicode
hỗ trợ các ký tự khác ngoài tiếng Anh. Trong trường hợp này, \u00dc
đại diện cho Ü
và \u00f6
đại diện cho ö
.
r"raw \ n string"
là một chuỗi thô.
Boolean leteral
Boolean literal có thể có bất kỳ giá trị nào trong hai giá trị: True
hoặc False
.
VD :
x = (1 == True) y = (1 == False) a = True + 4 b = False + 10 print("x is", x) print("y is", y) print("a:", a) print("b:", b)
Kết quả là :
x is True y is False a: 5 b: 10
Trong chương trình trên, chúng tôi sử dụng boolean theo nghĩa True
và False
. Trong Python, True
đại diện cho giá trị là 1
và False
là 0
. Giá trị của x là True
vì 1
bằng True
. Và, giá trị của y là False
vì 1 không bằng False
.
Tương tự, chúng ta có thể sử dụng True
và False
trong biểu thức số làm giá trị. Giá trị của a
là 5
vì chúng ta thêm True
có giá trị là 1
với 4
. Tương tự, b
là 10
vì chúng ta thêm False
có giá trị là 0
với 10
.
Special literals
Special literals
tức là None
. Chúng tôi sử dụng nó để chỉ định rằng trường chưa được tạo.
drink = "Available" food = None def menu(x): if x == drink: print(drink) else: print(food) menu(drink) menu(food)
Kết quả là :
Available None
Trong chương trình trên, chúng ta định nghĩa hàm menu
. bên trong menu
, khi chúng ta đặt đối số là drink
, nó sẽ hiển thị Available
. Và, khi đối số là food
, nó sẽ hiển thị None
.
Literal Collections
Có bốn tập hợp chữ khác nhau List
, Tuple
, Dict
, Set
fruits = ["apple", "mango", "orange"] #list numbers = (1, 2, 3) #tuple alphabets = {'a':'apple', 'b':'ball', 'c':'cat'} #dictionary vowels = {'a', 'e', 'i' , 'o', 'u'} #set print(fruits) print(numbers) print(alphabets) print(vowels)
Kết quả là
['apple', 'mango', 'orange'] (1, 2, 3) {'a': 'apple', 'b': 'ball', 'c': 'cat'} {'e', 'a', 'o', 'i', 'u'}