Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated:
0
00:00:00,000 --> 00:00:00,500
...
1
00:00:00,500 --> 00:00:03,130
So how do we create this notion of abstraction
Vậy làm thế nào để chúng ta tạo ra khái niệm về sự trừu tượng
2
00:00:03,130 --> 00:00:05,630
and decomposition in Python, or actually
và sự phân tách trong Python, hoặc thực sự
3
00:00:05,630 --> 00:00:07,370
in any programming language?
trong bất kì loại ngôn ngữ lập trình nào?
4
00:00:07,370 --> 00:00:10,030
And the answer is, we introduced the idea
Và câu trả lời là, chúng tôi đã giới thiệu ý tưởng
5
00:00:10,030 --> 00:00:12,620
of a reusable piece of code, or a chunk of code,
của một đoạn mã có thể tái sử dụng hoặc một khối mã,
6
00:00:12,620 --> 00:00:14,360
called a function.
gọi là hàm
7
00:00:14,360 --> 00:00:17,770
Functions are not going to be run in a program
Các hàm sẽ không được chạy trong một chương trình
8
00:00:17,770 --> 00:00:20,360
until we actually ask them to do that.
cho đến khi chúng tôi thực sự yêu cầu chúng làm điều đó.
9
00:00:20,360 --> 00:00:23,030
So as opposed to things I was typing into my shell--
Vì vậy, trái ngược với những thứ tôi đã gõ vào shell --
10
00:00:23,030 --> 00:00:24,610
every time I typed in an expression,
mỗi khi tôi gõ vào một biểu thức,
11
00:00:24,610 --> 00:00:26,770
it was invoked or evaluated-- I'm
nó đã được gọi hoặc đánh giá - Ta
12
00:00:26,770 --> 00:00:29,010
going to create a definition of a function.
sẽ tạo ra một định nghĩa của hàm.
13
00:00:29,010 --> 00:00:30,690
And when I read that in, it's simply
Và khi ta đọc nó trong, nó chỉ đơn giản là
14
00:00:30,690 --> 00:00:34,520
going to create the ability to do that computation,
sẽ tạo ra khả năng thực hiện tính toán đó,
15
00:00:34,520 --> 00:00:35,830
but not actually call it.
nhưng không thực sự gọi nó.
16
00:00:35,830 --> 00:00:38,790
And we'll see an example of that in a second.
Và chúng ta sẽ thấy một ví dụ về điều đó trong giây lát.
17
00:00:38,790 --> 00:00:40,730
What are the characteristics of a function?
Đâu là các đặc tính của một hàm?
18
00:00:40,730 --> 00:00:41,710
Several.
Có vài thứ
19
00:00:41,710 --> 00:00:43,680
First, it has a name.
Đầu tiên, nó có một cái tên.
20
00:00:43,680 --> 00:00:44,400
That makes sense.
Nghe hợp lý.
21
00:00:44,400 --> 00:00:45,640
I've got to be able to refer to it.
Tôi phải có khả năng tham chiếu nó.
22
00:00:45,640 --> 00:00:48,180
In the same way that I had a variable as a name for a value,
Theo cùng một cách mà tôi đã có một biến như là một cái tên cho nột giá trị,
23
00:00:48,180 --> 00:00:50,170
a function will have a name.
một hàm cũng sẽ có một tên.
24
00:00:50,170 --> 00:00:52,360
It will also take a set of parameters.
Nó cũng sẽ cần một tập hợp các tham số.
25
00:00:52,360 --> 00:00:54,500
These are arguments or values that I'm
Đây là những đối số hoặc giá trị mà ta
26
00:00:54,500 --> 00:00:57,700
going to use inside the function when I do a computation.
sẽ sử dụng bên trong hàm khi ta thực hiện tính toán.
27
00:00:57,700 --> 00:00:59,200
It's going to make sense in a second
Bạn sẽ hiểu vì sao trong giây lát
28
00:00:59,200 --> 00:01:01,610
when we look at an example.
khi chúng ta xem xét một ví dụ.
29
00:01:01,610 --> 00:01:03,790
Every function has to have parameters.
Mỗi hàm đều phải có tham số.
30
00:01:03,790 --> 00:01:05,680
But the number of parameters could be zero.
Nhưng số lượng tham số có thể bằng không.
31
00:01:05,680 --> 00:01:07,040
Or it's a funny way of saying, it's
Hoặc đó là một cách nói hài hước, nó
32
00:01:07,040 --> 00:01:08,456
going to take in a parameter list,
sẽ nhận vào một danh sách tham số,
33
00:01:08,456 --> 00:01:10,290
but in fact, it may need no parameters.
nhưng trên thực tế, nó có thể không cần tham số.
34
00:01:10,290 --> 00:01:12,560
And I'm going to decide when I create a function how
Và tôi sẽ quyết định khi tạo hàm là
35
00:01:12,560 --> 00:01:14,440
many parameters I need.
tôi cần bao nhiêu tham số.
36
00:01:14,440 --> 00:01:16,780
We'd like every function to have a doc string.
Chúng ta muốn mọi hàm đều có một docstring.
37
00:01:16,780 --> 00:01:18,990
That is a documentation that tells me
Đó là một tài liệu cho tôi biết
38
00:01:18,990 --> 00:01:20,620
what the function does.
hàm làm gì.
39
00:01:20,620 --> 00:01:22,960
We'll see an example of that in a second.
Chúng ta sẽ thấy một ví dụ về điều đó trong giây lát.
40
00:01:22,960 --> 00:01:25,220
And finally, a function has a body.
Và cuối cùng, mỗi hàm có một thân hàm.
41
00:01:25,220 --> 00:01:29,250
And the body is the sequence of commands or instructions
Và phần thân là chuỗi các lệnh hoặc hướng dẫn
42
00:01:29,250 --> 00:01:31,520
that we want to actually have happen
mà chúng ta muốn thực sự xảy ra
43
00:01:31,520 --> 00:01:34,330
when we use the function.
khi chúng ta sử dụng hàm.
44
00:01:34,330 --> 00:01:35,450
Those are a lot of words.
Đó là rất nhiều từ.
45
00:01:35,450 --> 00:01:38,600
Let's look at an example to get a sense of this.
Hãy xem xét một ví dụ để có được cảm giác về điều này.
46
00:01:38,600 --> 00:01:41,350
Here's a definition of a function.
Đây là định nghĩa của một hàm.
47
00:01:41,350 --> 00:01:43,910
And I'm going to walk through each of these pieces.
Và tôi sẽ đi qua từng phần này.
48
00:01:43,910 --> 00:01:47,970
So the first part of it is I've got a keyword, in this case
Vì vậy, phần đầu tiên của nó là tôi đã có một từ khóa, trong trường hợp này
49
00:01:47,970 --> 00:01:49,120
def.
def.
50
00:01:49,120 --> 00:01:50,590
And it is a key word, meaning it's
Và nó là một từ khóa, có nghĩa là nó
51
00:01:50,590 --> 00:01:53,000
a special symbol to Python that tells me
một biểu tượng đặc biệt cho Python cho ta biết
52
00:01:53,000 --> 00:01:55,250
I'm about to define something.
Tôi sắp định nghĩa cái gì đó.
53
00:01:55,250 --> 00:01:57,780
In this case, I'm about to define a function.
Trong trường hợp này, ta sắp định nghĩa một hàm.
54
00:01:57,780 --> 00:02:00,510
That is followed by a string that
Tiếp theo đó là chuỗi
55
00:02:00,510 --> 00:02:02,050
is the name of the function.
gọi là tên của hàm.
56
00:02:02,050 --> 00:02:05,080
In this case, it's is even, or is underscore even.
Trong trường hợp này, nó là chẵn, hoặc được nhấn mạnh thậm chí.
57
00:02:05,080 --> 00:02:09,150
That's the name I'm going to give to this function.
Đó là tên ta sẽ đặt cho hàm này.
58
00:02:09,150 --> 00:02:11,990
That is followed in parentheses, in those parens,
Điều đó được theo sau trong ngoặc đơn, trong các parens đó,--
59
00:02:11,990 --> 00:02:15,280
by zero, one, or more parameters.
bằng không, một hoặc nhiều tham số.
60
00:02:15,280 --> 00:02:17,010
In this case, I've got one.
Trong trường hợp này, ta đã có một cái.
61
00:02:17,010 --> 00:02:18,670
And I'm giving it a name.
Và ta đang đặt cho nó một cái tên.
62
00:02:18,670 --> 00:02:20,180
Think of it like a variable name.
Hãy nghĩ về nó như một cái tên biến đổi.
63
00:02:20,180 --> 00:02:22,340
Well, I'm saying, I'm going to use the name
Chà, ta đang nói, ta sẽ sử dụng tên
64
00:02:22,340 --> 00:02:26,630
i as the name for a parameter inside this function.
i làm tên cho một tham số bên trong hàm này.
65
00:02:26,630 --> 00:02:28,200
And that's then followed by a colon
Và đó là sau đó là một dấu hai chấm
66
00:02:28,200 --> 00:02:31,260
to tell me I'm done with the top line of the definition,
để cho tôi biết tôi đã hoàn thành với dòng trên cùng của định nghĩa,
67
00:02:31,260 --> 00:02:33,970
I'm about to follow it with other information.
Ta sắp theo dõi nó với các thông tin khác.
68
00:02:33,970 --> 00:02:37,170
So keyword def, a name, and in parens
Vì vậy, từ khóa def, một cái tên và trong parens
69
00:02:37,170 --> 00:02:39,380
some number of parameters.
một số tham số.
70
00:02:39,380 --> 00:02:42,990
Immediately below that in triple double quotes--
Ngay bên dưới đó trong dấu ngoặc kép gấp ba--
71
00:02:42,990 --> 00:02:46,820
which is a wonderful expression-- is a docstring.
đó là một biểu hiện tuyệt vời - là một tài liệu.
72
00:02:46,820 --> 00:02:48,400
It's up to you how to use this.
Nó tùy thuộc vào bạn làm thế nào để sử dụng điều này.
73
00:02:48,400 --> 00:02:50,360
But traditionally, you would specify
Nhưng theo truyền thống, bạn sẽ chỉ định
74
00:02:50,360 --> 00:02:52,800
what's the input to this function
đầu vào cho hàm này là gì
75
00:02:52,800 --> 00:02:55,604
and what's the output of this function.
và đầu ra của hàm này là gì.
76
00:02:55,604 --> 00:02:57,020
It's a little bit like a contract.
Nó hơi giống một hợp đồng.
77
00:02:57,020 --> 00:02:59,680
In this case, I'm saying I'm expecting one input.
Trong trường hợp này, ta đang nói rằng ta đang mong đợi một đầu vào.
78
00:02:59,680 --> 00:03:01,000
I'm calling it i.
Ta 2gọi nó là i
79
00:03:01,000 --> 00:03:02,860
And it's a positive integer.
Và đó là một số nguyên dương.
80
00:03:02,860 --> 00:03:06,770
And what I'm going to return is true if i is even.
Và những gì ta sẽ trở lại là sự thật nếu ta là đồng đều.
81
00:03:06,770 --> 00:03:09,284
Otherwise, I'm going to return false.
Nếu không, tôi sẽ trả lại sai.
82
00:03:09,284 --> 00:03:10,700
As you'll see in a little bit, one
Như bạn sẽ thấy trong một chút, một
83
00:03:10,700 --> 00:03:12,200
of the nice things about a docstring
trong những điều tốt đẹp về một docstring
84
00:03:12,200 --> 00:03:16,230
is, once I've defined this function, if I go to call it,
là, một khi ta đã định nghĩa hàm này, nếu ta đi gọi nó,
85
00:03:16,230 --> 00:03:19,300
which I'm going to get to in a second, Python will
mà tôi sẽ đạt được trong giây lát, Python sẽ
86
00:03:19,300 --> 00:03:22,250
automatically bring up a little window that tells me
tự động hiển thị một cửa sổ nhỏ cho ta biết
87
00:03:22,250 --> 00:03:24,010
the docstring that's remind me what
docstring nhắc nhở ta những gì
88
00:03:24,010 --> 00:03:27,060
the conditions for this function are, which is great.
các điều kiện cho hàm này là, đó là tuyệt vời.
89
00:03:27,060 --> 00:03:31,550
So keyword, name, parameters, I've got a docstring.
Vì thế từ khóa, tên, tham số, ta đã có một docstring.
90
00:03:31,550 --> 00:03:34,940
Immediately below that is the body of the function.
Ngay bên dưới đó là cơ thể của hàm.
91
00:03:34,940 --> 00:03:37,360
This is the sequence of commands or expressions
Đây là chuỗi các lệnh hoặc biểu thức
92
00:03:37,360 --> 00:03:41,040
I want to evaluate when I'm ready to use this.
Ta muốn đánh giá khi nào tôi đã sẵn sàng sử dụng cái này.
93
00:03:41,040 --> 00:03:45,040
Notice the indentation-- all of this is indented here.
Lưu ý thụt lề - tất cả những điều này được thụt lề ở đây.
94
00:03:45,040 --> 00:03:48,394
This is telling me where the body of the function is.
Điều này cho ta biết phần khung của hàm ở đâu.
95
00:03:48,394 --> 00:03:49,810
And in fact, it will be everything
Và trên thực tế, nó sẽ là tất cả mọi thứ
96
00:03:49,810 --> 00:03:51,680
until I get back to something that
cho đến khi ta quay lại với một cái gì đó
97
00:03:51,680 --> 00:03:56,850
returns to the left hand side of the editor or of the shell.
trở về phía bên tay trái của trình soạn thảo hoặc của shell.
98
00:03:56,850 --> 00:03:59,020
In this case, I've got two expressions in my body.
Trong trường hợp này, ta có hai biểu hiện trong cơ thể của mình.
99
00:03:59,020 --> 00:04:00,950
It's going to print out simply the string hi.
Nó sẽ in ra chỉ đơn giản là string hi.
100
00:04:00,950 --> 00:04:03,300
And then it's going to return a value.
Và sau đó nó sẽ trả về một giá trị.
101
00:04:03,300 --> 00:04:05,810
We'll come back to the return in a second.
Chúng tôi sẽ trở lại hàm return một giây nữa.
102
00:04:05,810 --> 00:04:08,610
There is how I write a function.
Có cách ta viết một hàm.
103
00:04:08,610 --> 00:04:11,320
Now, how do I use it?
Bây giờ, làm thế nào để ta sử dụng nó?
104
00:04:11,320 --> 00:04:12,430
The function has a name.
Hàm này có tên.
105
00:04:12,430 --> 00:04:14,080
The same way I could use a variable
Giống như cách ta có thể sử dụng một biến
106
00:04:14,080 --> 00:04:16,160
as a name inside of an expression,
như một cái tên bên trong một biểu thức,
107
00:04:16,160 --> 00:04:18,510
I can use the function name.
Ta có thể sử dụng tên hàm.
108
00:04:18,510 --> 00:04:21,000
And in particular, later on in the code,
Và đặc biệt, sau này trong mã,
109
00:04:21,000 --> 00:04:25,290
I can say an expression like, is underscore even,
Tôi có thể nói một biểu thức như, được nhấn mạnh ngay cả,
110
00:04:25,290 --> 00:04:29,350
and then an open paren, followed by an expression whose value
và sau đó là một paren mở, theo sau là một biểu thức có giá trị
111
00:04:29,350 --> 00:04:32,094
I'm going to use inside of that procedure
Ta sẽ sử dụng bên trong quy trình đó
112
00:04:32,094 --> 00:04:34,510
followed, in this case, by a closed paren, because there's
theo sau, trong trường hợp này, bởi một paren đóng cửa, bởi vì có
113
00:04:34,510 --> 00:04:36,550
only one parameter.
chỉ có một tham số.
114
00:04:36,550 --> 00:04:39,370
I call this invoking or calling the function.
Ta gọi đây là gọi gọi hoặc callhàm.
115
00:04:39,370 --> 00:04:41,449
I'm using the function.
Ta đang sử dụng hàm này.
116
00:04:41,449 --> 00:04:43,490
We're going to look at some examples in a second.
Chúng ta sẽ xem xét một số ví dụ trong giây lát.
117
00:04:43,490 --> 00:04:48,070
But the basic idea here is that, when I call this function,
Nhưng ý tưởng cơ bản ở đây là, khi ta gọi hàm này,
118
00:04:48,070 --> 00:04:51,120
I'm going to take the value 3, in this case,
Ta sẽ lấy giá trị 3, trong trường hợp này,
119
00:04:51,120 --> 00:04:54,030
and everywhere I see an i in the body of the function,
và ở khắp mọi nơi ta thấy chữ i trong cơ thể của hàm,
120
00:04:54,030 --> 00:04:57,520
I'm going to use that value in place of i.
Ta sẽ sử dụng giá trị đó thay cho i.
121
00:04:57,520 --> 00:04:59,380
And in fact, if I look at it then,
Và trên thực tế, nếu tôi nhìn vào nó thì,
122
00:04:59,380 --> 00:05:02,740
inside of this particular expression,
bên trong biểu hiện cụ thể này,
123
00:05:02,740 --> 00:05:06,510
I'm going to print out simple the string hi.
Ta sẽ in ra đơn giản string hi.
124
00:05:06,510 --> 00:05:10,500
And then I'm going to evaluate this particular expression.
Và sau đó ta sẽ đánh giá biểu hiện cụ thể này.
125
00:05:10,500 --> 00:05:16,830
And it has the keyword return followed by an actual value.
Và nó có lợi nhuận từ khóa return là một giá trị thực tế.
00:05:16,830 --> 00:05:18,860
Now, I just said, in this case, if I've
Bây giờ, ta chỉ nói, trong trường hợp này, nếu ta đã
127
00:05:18,860 --> 00:05:21,490
called is_even with the parameter 3,
được gọi là is_even với tham số 3,
128
00:05:21,490 --> 00:05:24,120
i now holds the value 3.
bây giờ ta giữ giá trị 3.
129
00:05:24,120 --> 00:05:26,590
So I'm going to evaluate 3 remainder 2 and say,
Vì vậy, ta sẽ đánh giá 3 phần còn lại 2 và nói,
130
00:05:26,590 --> 00:05:28,150
is that equal to 0?
con số đó có bằng 0 không?
131
00:05:28,150 --> 00:05:30,500
In this case, it's not, because the remainder is 1.
Trong trường hợp này, nó không phải, bởi vì phần còn lại là 1.
132
00:05:30,500 --> 00:05:34,840
And I'm going to then return that value to whoever
Và sau đó ta sẽ return giá trị đó cho bất cứ ai
133
00:05:34,840 --> 00:05:36,360
called this function.
được gọi là hàm này.
134
00:05:36,360 --> 00:05:39,100
So that's the expression I want to evaluate and actually
Vì vậy, đó là biểu thức ta muốn đánh giá và thực sự
135
00:05:39,100 --> 00:05:40,470
return.
hàm return.
136
00:05:40,470 --> 00:05:42,270
So return is a keyword that tells me
Vì vậy,hàm return là từ khóa cho tôi biết
137
00:05:42,270 --> 00:05:44,490
I'm ready to stop the computation.
Ta đã sẵn sàng để ngăn chặn việc tính toán.
138
00:05:44,490 --> 00:05:46,390
And whatever the following expression is,
Và bất kể biểu thức sau đây là gì,
139
00:05:46,390 --> 00:05:48,080
that is the value I'm going to give back
đó là giá trị ta sẽ trả lại
140
00:05:48,080 --> 00:05:50,140
to the person who asked for it.
cho người yêu cầu nó.
141
00:05:50,140 --> 00:05:52,900
In this case, it was simply at my shell.
Trong trường hợp này, nó chỉ đơn giản là ở vỏ của tôi.
142
00:05:52,900 --> 00:05:54,380
But we'll see in a second, it could
Nhưng chúng ta sẽ thấy trong giây lát nữa, nó có thể
143
00:05:54,380 --> 00:05:56,005
be somebody else that's going to use it
là người khác sẽ sử dụng nó
144
00:05:56,005 --> 00:05:58,040
as part of another computation.
như một phần của phép tính khác.
145
00:05:58,040 --> 00:05:58,719
18342
Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.