Hàm lưu trữ Python trong biến

Lưu kết quả hàm vào một biến

def times(x, y):      # create and assign function
     return x * y      # body executed when called


x = times(3.14, 4)    # save the result object
print x

           
       

Ví dụ liên quan trong cùng thể loại

Tại thời điểm này, chúng tôi đã viết mã để vẽ một số tính năng thú vị trong dữ liệu viêm nhiễm của mình, lặp lại tất cả các tệp dữ liệu của chúng tôi để nhanh chóng vẽ các biểu đồ này cho từng tệp và để Python đưa ra quyết định dựa trên những gì nó thấy trong dữ liệu của chúng tôi. Tuy nhiên, mã của chúng tôi đang trở nên khá dài và phức tạp; . Ngoài ra, điều gì sẽ xảy ra nếu chúng ta muốn sử dụng lại mã đó, trên một tập dữ liệu khác hoặc tại một điểm khác trong chương trình của chúng ta? . Chúng tôi muốn có một cách để đóng gói mã của mình để dễ sử dụng lại hơn và Python cung cấp điều này bằng cách cho phép chúng tôi xác định những thứ gọi là 'hàm' - một cách viết tắt để thực thi lại các đoạn mã dài hơn. Hãy bắt đầu bằng cách xác định hàm

def fahr_to_kelvin(temp_f):
    temp_c = fahr_to_celsius(temp_f)
    temp_k = celsius_to_kelvin(temp_c)
    return temp_k

print('boiling point of water in Kelvin:', fahr_to_kelvin(212.0))
8 chuyển đổi nhiệt độ từ độ F sang độ C

def fahr_to_celsius(temp):
    return ((temp - 32) * (5/9))

Định nghĩa hàm mở đầu bằng từ khóa

def fahr_to_kelvin(temp_f):
    temp_c = fahr_to_celsius(temp_f)
    temp_k = celsius_to_kelvin(temp_c)
    return temp_k

print('boiling point of water in Kelvin:', fahr_to_kelvin(212.0))
9 theo sau là tên của hàm (
def fahr_to_kelvin(temp_f):
    temp_c = fahr_to_celsius(temp_f)
    temp_k = celsius_to_kelvin(temp_c)
    return temp_k

print('boiling point of water in Kelvin:', fahr_to_kelvin(212.0))
8) và danh sách tên tham số được đặt trong ngoặc đơn (
boiling point of water in Kelvin: 373.15
1). Hàm — các câu lệnh được thực thi khi nó chạy — được thụt vào bên dưới dòng định nghĩa. Phần thân kết thúc bằng từ khóa
boiling point of water in Kelvin: 373.15
2 theo sau là giá trị trả về

Khi chúng ta gọi hàm, các giá trị chúng ta truyền cho nó sẽ được gán cho các biến đó để chúng ta có thể sử dụng chúng bên trong hàm. Bên trong hàm, chúng tôi sử dụng a để gửi kết quả lại cho bất kỳ ai yêu cầu kết quả đó

Hãy thử chạy chức năng của chúng tôi

fahr_to_celsius(32)

Lệnh này sẽ gọi hàm của chúng ta, sử dụng “32” làm đầu vào và trả về giá trị hàm

Trên thực tế, gọi hàm của chính chúng ta không khác gì gọi bất kỳ hàm nào khác

________số 8_______

freezing point of water: 0.0 C
boiling point of water: 100.0 C

Chúng tôi đã gọi thành công hàm mà chúng tôi đã xác định và chúng tôi có quyền truy cập vào giá trị mà chúng tôi đã trả về

Hàm soạn thảo

Bây giờ chúng ta đã biết cách biến độ F thành độ C, chúng ta cũng có thể viết hàm để biến độ C thành độ Kelvin

def celsius_to_kelvin(temp_c):
    return temp_c + 273.15

print('freezing point of water in Kelvin:', celsius_to_kelvin(0.))

freezing point of water in Kelvin: 273.15

Còn việc chuyển đổi Fahrenheit sang Kelvin thì sao? . Thay vào đó, chúng ta có thể sử dụng hai hàm mà chúng ta đã tạo

def fahr_to_kelvin(temp_f):
    temp_c = fahr_to_celsius(temp_f)
    temp_k = celsius_to_kelvin(temp_c)
    return temp_k

print('boiling point of water in Kelvin:', fahr_to_kelvin(212.0))

boiling point of water in Kelvin: 373.15

Đây là hương vị đầu tiên của chúng tôi về cách các chương trình lớn hơn được xây dựng. chúng tôi xác định các hoạt động cơ bản, sau đó kết hợp chúng thành các khối lớn hơn bao giờ hết để đạt được hiệu quả mà chúng tôi muốn. Các hàm thực tế thường sẽ lớn hơn các hàm được hiển thị ở đây — thường là từ nửa tá đến vài chục dòng — nhưng chúng không bao giờ dài hơn thế nhiều, nếu không người tiếp theo đọc nó sẽ không thể hiểu được

Phạm vi biến đổi

Khi soạn các hàm chuyển đổi nhiệt độ, chúng tôi đã tạo các biến bên trong các hàm đó,

boiling point of water in Kelvin: 373.15
1,
boiling point of water in Kelvin: 373.15
4,
boiling point of water in Kelvin: 373.15
5 và
boiling point of water in Kelvin: 373.15
6. Chúng tôi đề cập đến các biến này bởi vì chúng không còn tồn tại sau khi chức năng được thực thi xong. Nếu chúng ta cố gắng truy cập các giá trị của chúng bên ngoài hàm, chúng ta sẽ gặp lỗi

print('Again, temperature in Kelvin was:', temp_k)

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
 in 
----> 1 print('Again, temperature in Kelvin was:', temp_k)

NameError: name 'temp_k' is not defined

Nếu bạn muốn sử dụng lại nhiệt độ theo đơn vị Kelvin sau khi đã tính toán nó với

boiling point of water in Kelvin: 373.15
7, bạn có thể lưu trữ kết quả của lệnh gọi hàm trong một biến

fahr_to_celsius(32)
0

fahr_to_celsius(32)
1

Biến

boiling point of water in Kelvin: 373.15
8, được định nghĩa bên ngoài bất kỳ hàm nào, được gọi là

Bên trong một hàm, người ta có thể đọc giá trị của các biến toàn cục đó

fahr_to_celsius(32)
2

fahr_to_celsius(32)
3

Làm cho ngăn nắp

Bây giờ chúng ta đã biết cách gói các đoạn mã trong các hàm, chúng ta có thể làm cho phân tích tình trạng viêm của chúng ta dễ đọc hơn và dễ sử dụng lại hơn. Trước tiên, hãy tạo một hàm

boiling point of water in Kelvin: 373.15
9 để tạo các biểu đồ của chúng ta

fahr_to_celsius(32)
4

và một chức năng khác được gọi là

print('Again, temperature in Kelvin was:', temp_k)
0 kiểm tra những hệ thống mà chúng tôi nhận thấy

fahr_to_celsius(32)
5

Chờ đợi. Chẳng phải chúng ta đã quên chỉ định cái mà cả hai hàm này sẽ trả về sao? . Trong Python, các hàm không bắt buộc phải bao gồm câu lệnh

boiling point of water in Kelvin: 373.15
2 và có thể được sử dụng cho mục đích duy nhất là nhóm các đoạn mã lại với nhau để thực hiện một việc theo khái niệm. Trong những trường hợp như vậy, tên hàm thường mô tả chức năng của chúng, e. g.
boiling point of water in Kelvin: 373.15
9,
print('Again, temperature in Kelvin was:', temp_k)
0

Lưu ý rằng thay vì trộn mã này với nhau trong một vòng lặp khổng lồ

print('Again, temperature in Kelvin was:', temp_k)
4, giờ đây chúng ta có thể đọc và sử dụng lại cả hai ý tưởng một cách riêng biệt. Chúng ta có thể tạo lại phân tích trước đó bằng một vòng lặp
print('Again, temperature in Kelvin was:', temp_k)
4 đơn giản hơn nhiều

fahr_to_celsius(32)
6

Bằng cách đặt tên cho các hàm mà con người có thể đọc được, chúng ta có thể dễ dàng đọc và hiểu những gì đang xảy ra trong vòng lặp

print('Again, temperature in Kelvin was:', temp_k)
4. Thậm chí tốt hơn, nếu vào một ngày nào đó sau này chúng ta muốn sử dụng lại một trong hai đoạn mã đó, chúng ta có thể làm như vậy trong một dòng duy nhất

Kiểm tra và tài liệu

Khi chúng tôi bắt đầu đưa mọi thứ vào các chức năng để chúng tôi có thể sử dụng lại chúng, chúng tôi cần bắt đầu kiểm tra xem các chức năng đó có hoạt động chính xác không. Để xem cách thực hiện việc này, hãy viết một hàm để bù một tập dữ liệu sao cho giá trị trung bình của nó chuyển sang giá trị do người dùng xác định

fahr_to_celsius(32)
7

Chúng tôi có thể kiểm tra điều này trên dữ liệu thực tế của mình, nhưng vì chúng tôi không biết giá trị phải là bao nhiêu nên sẽ khó biết được kết quả có chính xác hay không. Thay vào đó, hãy sử dụng NumPy để tạo ma trận 0 và sau đó bù các giá trị của nó để có giá trị trung bình là 3

fahr_to_celsius(32)
8

fahr_to_celsius(32)
9

Điều đó có vẻ đúng, vì vậy hãy thử

print('Again, temperature in Kelvin was:', temp_k)
7 trên dữ liệu thực của chúng tôi

print('freezing point of water:', fahr_to_celsius(32), 'C')
print('boiling point of water:', fahr_to_celsius(212), 'C')
0

print('freezing point of water:', fahr_to_celsius(32), 'C')
print('boiling point of water:', fahr_to_celsius(212), 'C')
1

Thật khó để nói từ đầu ra mặc định liệu kết quả có chính xác hay không, nhưng có một vài thử nghiệm mà chúng tôi có thể chạy để trấn an chúng tôi

print('freezing point of water:', fahr_to_celsius(32), 'C')
print('boiling point of water:', fahr_to_celsius(212), 'C')
2

print('freezing point of water:', fahr_to_celsius(32), 'C')
print('boiling point of water:', fahr_to_celsius(212), 'C')
3

Điều đó có vẻ gần như đúng. ý nghĩa ban đầu là khoảng 6. 1, vì vậy giới hạn dưới từ 0 bây giờ là khoảng -6. 1. Giá trị trung bình của dữ liệu bù đắp không hoàn toàn bằng không — chúng ta sẽ khám phá lý do tại sao không phải trong các thử thách — nhưng nó cũng khá gần. Chúng tôi thậm chí có thể đi xa hơn và kiểm tra xem độ lệch chuẩn không thay đổi

print('freezing point of water:', fahr_to_celsius(32), 'C')
print('boiling point of water:', fahr_to_celsius(212), 'C')
4

print('freezing point of water:', fahr_to_celsius(32), 'C')
print('boiling point of water:', fahr_to_celsius(212), 'C')
5

Các giá trị đó trông giống nhau, nhưng có lẽ chúng ta sẽ không nhận thấy nếu chúng khác nhau ở vị trí thập phân thứ sáu. Hãy làm điều này thay vào đó

print('freezing point of water:', fahr_to_celsius(32), 'C')
print('boiling point of water:', fahr_to_celsius(212), 'C')
6

print('freezing point of water:', fahr_to_celsius(32), 'C')
print('boiling point of water:', fahr_to_celsius(212), 'C')
7

Một lần nữa, sự khác biệt là rất nhỏ. Vẫn có khả năng chức năng của chúng ta bị sai, nhưng có vẻ như không đủ khả năng để chúng ta quay lại thực hiện phân tích của mình. Tuy nhiên, chúng tôi có một nhiệm vụ nữa trước tiên. chúng ta nên viết một số chức năng của mình để nhắc nhở bản thân sau này nó dùng để làm gì và sử dụng nó như thế nào

Cách thông thường để đưa tài liệu vào phần mềm là thêm như thế này

print('freezing point of water:', fahr_to_celsius(32), 'C')
print('boiling point of water:', fahr_to_celsius(212), 'C')
8

Có một cách tốt hơn, mặc dù. Nếu điều đầu tiên trong một hàm là một chuỗi không được gán cho một biến, chuỗi đó sẽ được đính kèm vào hàm dưới dạng tài liệu của nó

print('freezing point of water:', fahr_to_celsius(32), 'C')
print('boiling point of water:', fahr_to_celsius(212), 'C')
9

Điều này tốt hơn vì giờ đây chúng ta có thể yêu cầu hệ thống trợ giúp tích hợp sẵn của Python hiển thị cho chúng ta tài liệu về chức năng

freezing point of water: 0.0 C
boiling point of water: 100.0 C
0

freezing point of water: 0.0 C
boiling point of water: 100.0 C
1

Một chuỗi như thế này được gọi là một. Chúng ta không cần sử dụng ba dấu ngoặc kép khi viết một dấu ngoặc kép, nhưng nếu làm như vậy, chúng ta có thể ngắt chuỗi trên nhiều dòng

freezing point of water: 0.0 C
boiling point of water: 100.0 C
2

freezing point of water: 0.0 C
boiling point of water: 100.0 C
3

Xác định giá trị mặc định

Chúng ta đã truyền tham số cho hàm theo hai cách. trực tiếp, như trong

print('Again, temperature in Kelvin was:', temp_k)
8, và theo tên, như trong
print('Again, temperature in Kelvin was:', temp_k)
9. Trên thực tế, chúng ta có thể chuyển tên tệp tới
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
 in 
----> 1 print('Again, temperature in Kelvin was:', temp_k)

NameError: name 'temp_k' is not defined
0 mà không cần ____19_______1

freezing point of water: 0.0 C
boiling point of water: 100.0 C
4

freezing point of water: 0.0 C
boiling point of water: 100.0 C
5

nhưng chúng ta vẫn cần phải nói

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
 in 
----> 1 print('Again, temperature in Kelvin was:', temp_k)

NameError: name 'temp_k' is not defined
2

freezing point of water: 0.0 C
boiling point of water: 100.0 C
6

freezing point of water: 0.0 C
boiling point of water: 100.0 C
7

Để hiểu chuyện gì đang xảy ra và làm cho các hàm của chúng ta dễ sử dụng hơn, hãy định nghĩa lại hàm

print('Again, temperature in Kelvin was:', temp_k)
7 của chúng ta như thế này

freezing point of water: 0.0 C
boiling point of water: 100.0 C
8

Thay đổi quan trọng là tham số thứ hai hiện được viết là

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
 in 
----> 1 print('Again, temperature in Kelvin was:', temp_k)

NameError: name 'temp_k' is not defined
4 thay vì chỉ
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
 in 
----> 1 print('Again, temperature in Kelvin was:', temp_k)

NameError: name 'temp_k' is not defined
5. Nếu chúng ta gọi hàm với hai đối số, nó sẽ hoạt động như trước đây

freezing point of water: 0.0 C
boiling point of water: 100.0 C
9

fahr_to_celsius(32)
9

Nhưng bây giờ chúng ta cũng có thể gọi nó chỉ với một tham số, trong trường hợp đó,

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
 in 
----> 1 print('Again, temperature in Kelvin was:', temp_k)

NameError: name 'temp_k' is not defined
5 sẽ tự động được gán bằng 0. 0

def celsius_to_kelvin(temp_c):
    return temp_c + 273.15

print('freezing point of water in Kelvin:', celsius_to_kelvin(0.))
1

def celsius_to_kelvin(temp_c):
    return temp_c + 273.15

print('freezing point of water in Kelvin:', celsius_to_kelvin(0.))
2

cái này tiện dụng. nếu chúng ta thường muốn một chức năng hoạt động theo một cách, nhưng đôi khi cần nó làm việc khác, chúng ta có thể cho phép mọi người chuyển tham số khi họ cần nhưng cung cấp giá trị mặc định để làm cho trường hợp thông thường dễ dàng hơn. Ví dụ dưới đây cho thấy cách Python khớp giá trị với tham số

def celsius_to_kelvin(temp_c):
    return temp_c + 273.15

print('freezing point of water in Kelvin:', celsius_to_kelvin(0.))
3

def celsius_to_kelvin(temp_c):
    return temp_c + 273.15

print('freezing point of water in Kelvin:', celsius_to_kelvin(0.))
4

Như ví dụ này cho thấy, các tham số được so khớp từ trái sang phải và bất kỳ tham số nào chưa được cung cấp giá trị rõ ràng sẽ nhận giá trị mặc định của chúng. Chúng tôi có thể ghi đè hành vi này bằng cách đặt tên cho giá trị khi chúng tôi chuyển nó vào

def celsius_to_kelvin(temp_c):
    return temp_c + 273.15

print('freezing point of water in Kelvin:', celsius_to_kelvin(0.))
5

def celsius_to_kelvin(temp_c):
    return temp_c + 273.15

print('freezing point of water in Kelvin:', celsius_to_kelvin(0.))
6

Với điều đó trong tay, chúng ta hãy xem xét sự trợ giúp cho

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
 in 
----> 1 print('Again, temperature in Kelvin was:', temp_k)

NameError: name 'temp_k' is not defined
7

def celsius_to_kelvin(temp_c):
    return temp_c + 273.15

print('freezing point of water in Kelvin:', celsius_to_kelvin(0.))
7

def celsius_to_kelvin(temp_c):
    return temp_c + 273.15

print('freezing point of water in Kelvin:', celsius_to_kelvin(0.))
8

Có rất nhiều thông tin ở đây, nhưng phần quan trọng nhất là vài dòng đầu tiên

def celsius_to_kelvin(temp_c):
    return temp_c + 273.15

print('freezing point of water in Kelvin:', celsius_to_kelvin(0.))
9

Điều này cho chúng ta biết rằng

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
 in 
----> 1 print('Again, temperature in Kelvin was:', temp_k)

NameError: name 'temp_k' is not defined
0 có một tham số tên là
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
 in 
----> 1 print('Again, temperature in Kelvin was:', temp_k)

NameError: name 'temp_k' is not defined
9 không có giá trị mặc định và tám tham số khác có giá trị mặc định. Nếu chúng ta gọi hàm như thế này

freezing point of water: 0.0 C
boiling point of water: 100.0 C
6

sau đó tên tệp được gán cho

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
 in 
----> 1 print('Again, temperature in Kelvin was:', temp_k)

NameError: name 'temp_k' is not defined
9 (đó là những gì chúng tôi muốn), nhưng chuỗi dấu phân cách
fahr_to_celsius(32)
01 được gán cho
fahr_to_celsius(32)
02 thay vì
fahr_to_celsius(32)
03, bởi vì
fahr_to_celsius(32)
02 là tham số thứ hai trong danh sách. Tuy nhiên,
fahr_to_celsius(32)
01 không phải là một
fahr_to_celsius(32)
02 đã biết nên mã của chúng tôi tạo ra thông báo lỗi khi chúng tôi cố chạy nó. Chúng tôi gọi ________19_____0, chúng tôi không phải cung cấp
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
 in 
----> 1 print('Again, temperature in Kelvin was:', temp_k)

NameError: name 'temp_k' is not defined
1 cho tên tệp vì đây là mục đầu tiên trong danh sách, nhưng nếu chúng tôi muốn

chức năng có thể đọc được

Hãy xem xét hai chức năng này

freezing point of water in Kelvin: 273.15
1

Các hàm

fahr_to_celsius(32)
13 và
fahr_to_celsius(32)
14 tương đương về mặt tính toán (cả hai đều tính toán độ lệch chuẩn mẫu), nhưng đối với người đọc, chúng trông rất khác nhau. Bạn có thể thấy
fahr_to_celsius(32)
14 dễ đọc và dễ hiểu hơn nhiều so với
fahr_to_celsius(32)
13

Như ví dụ này minh họa, cả tài liệu và phong cách viết mã của lập trình viên kết hợp với nhau để xác định mức độ dễ dàng để người khác đọc và hiểu mã của lập trình viên. Chọn tên biến có ý nghĩa và sử dụng khoảng trống để chia mã thành các “khối” hợp lý là những kỹ thuật hữu ích để tạo mã có thể đọc được. Điều này hữu ích không chỉ cho việc chia sẻ mã với người khác mà còn cho lập trình viên ban đầu. Nếu bạn cần xem lại mã mà bạn đã viết nhiều tháng trước và chưa nghĩ đến kể từ đó, bạn sẽ đánh giá cao giá trị của mã có thể đọc được

kết hợp chuỗi

“Cộng” hai chuỗi tạo ra sự nối của chúng.

fahr_to_celsius(32)
17 là
fahr_to_celsius(32)
18. Viết một hàm có tên là
fahr_to_celsius(32)
19 nhận vào hai tham số có tên là
fahr_to_celsius(32)
20 và
fahr_to_celsius(32)
21 và trả về một chuỗi mới có ký tự trình bao ở đầu và cuối của chuỗi ban đầu. Một cuộc gọi đến chức năng của bạn sẽ giống như thế này

freezing point of water in Kelvin: 273.15
2

freezing point of water in Kelvin: 273.15
3

Giải pháp

freezing point of water in Kelvin: 273.15
4

Trả lại so với in

Lưu ý rằng

boiling point of water in Kelvin: 373.15
2 và
fahr_to_celsius(32)
23 không thể hoán đổi cho nhau.
fahr_to_celsius(32)
23 là một hàm Python in dữ liệu ra màn hình. Nó cho phép chúng tôi, người dùng, xem dữ liệu. Mặt khác, câu lệnh
boiling point of water in Kelvin: 373.15
2 làm cho chương trình hiển thị dữ liệu. Hãy cùng xem chức năng sau

freezing point of water in Kelvin: 273.15
5

Câu hỏi. Chúng ta sẽ thấy gì nếu thực hiện các lệnh sau đây?

freezing point of water in Kelvin: 273.15
6

Giải pháp

Trước tiên, Python sẽ thực thi hàm

fahr_to_celsius(32)
26 với
fahr_to_celsius(32)
27 và
fahr_to_celsius(32)
28, và do đó, in ra
fahr_to_celsius(32)
29. Tuy nhiên, vì hàm
fahr_to_celsius(32)
26 không có dòng bắt đầu bằng
boiling point of water in Kelvin: 373.15
2 (không có “câu lệnh”
boiling point of water in Kelvin: 373.15
2), theo mặc định, nó sẽ không trả về gì cả, trong thế giới Python, được gọi là
fahr_to_celsius(32)
33. Do đó,
fahr_to_celsius(32)
34 sẽ được gán cho
fahr_to_celsius(32)
33 và dòng cuối cùng (
fahr_to_celsius(32)
36) sẽ in ra
fahr_to_celsius(32)
33. Kết quả là, chúng ta sẽ thấy

freezing point of water in Kelvin: 273.15
7

Chọn ký tự từ chuỗi

Nếu biến

fahr_to_celsius(32)
13 đề cập đến một chuỗi, thì
fahr_to_celsius(32)
39 là ký tự đầu tiên của chuỗi và
fahr_to_celsius(32)
40 là ký tự cuối cùng của nó. Viết một hàm có tên là
fahr_to_celsius(32)
41 trả về một chuỗi chỉ gồm các ký tự đầu tiên và cuối cùng của đầu vào của nó. Một cuộc gọi đến chức năng của bạn sẽ giống như thế này

freezing point of water in Kelvin: 273.15
8

freezing point of water in Kelvin: 273.15
9

Giải pháp

def fahr_to_kelvin(temp_f):
    temp_c = fahr_to_celsius(temp_f)
    temp_k = celsius_to_kelvin(temp_c)
    return temp_k

print('boiling point of water in Kelvin:', fahr_to_kelvin(212.0))
0

Thay đổi kích thước một mảng

Viết hàm

fahr_to_celsius(32)
42 nhận một mảng làm đầu vào và trả về một mảng tương ứng các giá trị được chia tỷ lệ nằm trong phạm vi 0. 0 đến 1. 0. (Gợi ý. Nếu
fahr_to_celsius(32)
43 và
fahr_to_celsius(32)
44 là giá trị thấp nhất và cao nhất trong mảng ban đầu, thì giá trị thay thế cho giá trị
fahr_to_celsius(32)
45 phải là
fahr_to_celsius(32)
46. )

Giải pháp

def fahr_to_kelvin(temp_f):
    temp_c = fahr_to_celsius(temp_f)
    temp_k = celsius_to_kelvin(temp_c)
    return temp_k

print('boiling point of water in Kelvin:', fahr_to_kelvin(212.0))
1

Kiểm tra và ghi lại chức năng của bạn

Chạy các lệnh

fahr_to_celsius(32)
47 và
fahr_to_celsius(32)
48 để xem cách sử dụng các hàm này để tạo các giá trị có khoảng cách đều đặn, sau đó sử dụng các giá trị đó để kiểm tra hàm
fahr_to_celsius(32)
42 của bạn. Khi bạn đã kiểm tra thành công chức năng của mình, hãy thêm một chuỗi tài liệu giải thích chức năng của nó

Giải pháp

def fahr_to_kelvin(temp_f):
    temp_c = fahr_to_celsius(temp_f)
    temp_k = celsius_to_kelvin(temp_c)
    return temp_k

print('boiling point of water in Kelvin:', fahr_to_kelvin(212.0))
2

Xác định giá trị mặc định

Viết lại hàm

fahr_to_celsius(32)
42 để nó chia tỷ lệ dữ liệu nằm giữa
fahr_to_celsius(32)
51 và
fahr_to_celsius(32)
52 theo mặc định, nhưng sẽ cho phép người gọi chỉ định giới hạn trên và dưới nếu họ muốn. So sánh việc triển khai của bạn với hàng xóm của bạn. hai chức năng luôn hoạt động theo cùng một cách?

Giải pháp

def fahr_to_kelvin(temp_f):
    temp_c = fahr_to_celsius(temp_f)
    temp_k = celsius_to_kelvin(temp_c)
    return temp_k

print('boiling point of water in Kelvin:', fahr_to_kelvin(212.0))
3

Các biến bên trong và bên ngoài chức năng

Đoạn mã sau hiển thị gì khi chạy — và tại sao?

def fahr_to_kelvin(temp_f):
    temp_c = fahr_to_celsius(temp_f)
    temp_k = celsius_to_kelvin(temp_c)
    return temp_k

print('boiling point of water in Kelvin:', fahr_to_kelvin(212.0))
4

Giải pháp

def fahr_to_kelvin(temp_f):
    temp_c = fahr_to_celsius(temp_f)
    temp_k = celsius_to_kelvin(temp_c)
    return temp_k

print('boiling point of water in Kelvin:', fahr_to_kelvin(212.0))
5

fahr_to_celsius(32)
53 là 0 vì
fahr_to_celsius(32)
53 bên trong hàm
fahr_to_celsius(32)
55 không biết về
fahr_to_celsius(32)
53 được xác định bên ngoài hàm. Khi hàm
fahr_to_celsius(32)
55 được gọi, nó sẽ tạo ra một
fahr_to_celsius(32)
53. Hàm không trả về bất kỳ giá trị nào và không thay đổi
fahr_to_celsius(32)
53 bên ngoài bản sao cục bộ của nó. Do đó giá trị ban đầu của
fahr_to_celsius(32)
53 không thay đổi. Lưu ý rằng một
fahr_to_celsius(32)
53 cục bộ được tạo bởi vì các câu lệnh nội bộ của
fahr_to_celsius(32)
55 ảnh hưởng đến một giá trị mới cho nó. Nếu
fahr_to_celsius(32)
53 chỉ là
fahr_to_celsius(32)
64, nó sẽ chỉ truy xuất giá trị toàn cầu
fahr_to_celsius(32)
53

Trộn các tham số mặc định và không mặc định

Cho đoạn mã sau

def fahr_to_kelvin(temp_f):
    temp_c = fahr_to_celsius(temp_f)
    temp_k = celsius_to_kelvin(temp_c)
    return temp_k

print('boiling point of water in Kelvin:', fahr_to_kelvin(212.0))
6

những gì bạn mong đợi sẽ được in?

  1. fahr_to_celsius(32)
    
    66
  2. fahr_to_celsius(32)
    
    67
  3. fahr_to_celsius(32)
    
    68
  4. fahr_to_celsius(32)
    
    69

Cho rằng đoạn mã sau hiển thị khi chạy?

def fahr_to_kelvin(temp_f):
    temp_c = fahr_to_celsius(temp_f)
    temp_k = celsius_to_kelvin(temp_c)
    return temp_k

print('boiling point of water in Kelvin:', fahr_to_kelvin(212.0))
7

  1. fahr_to_celsius(32)
    
    70
  2. fahr_to_celsius(32)
    
    71
  3. fahr_to_celsius(32)
    
    72
  4. fahr_to_celsius(32)
    
    73

Giải pháp

Cố gắng xác định hàm

fahr_to_celsius(32)
74 dẫn đến kết quả là
fahr_to_celsius(32)
75. Các tham số đã xác định
fahr_to_celsius(32)
76 và
fahr_to_celsius(32)
77 được cung cấp các giá trị mặc định. Bởi vì
fahr_to_celsius(32)
78 và
fahr_to_celsius(32)
79 không được cung cấp giá trị mặc định, chúng bắt buộc phải được đưa vào làm đối số khi hàm được gọi và phải được đặt trước bất kỳ tham số nào có giá trị mặc định trong định nghĩa hàm

Cuộc gọi đã cho đến

fahr_to_celsius(32)
80 hiển thị
fahr_to_celsius(32)
72. -1 được gán cho tham số đầu tiên
fahr_to_celsius(32)
82, 2 được gán cho tham số tiếp theo
fahr_to_celsius(32)
83 và
fahr_to_celsius(32)
84 không được truyền giá trị, vì vậy nó sử dụng giá trị mặc định 6

Mã có thể đọc được

Sửa lại hàm bạn đã viết cho một trong các bài tập trước để cố gắng làm cho mã dễ đọc hơn. Sau đó, cộng tác với một trong những người hàng xóm của bạn để phê bình các chức năng của nhau và thảo luận về cách có thể cải thiện hơn nữa việc triển khai chức năng của bạn để làm cho chúng dễ đọc hơn

Những điểm chính

  • Xác định hàm bằng cách sử dụng

    fahr_to_celsius(32)
    
    85

  • Phần thân của hàm phải được thụt lề

  • Gọi một chức năng bằng cách sử dụng

    fahr_to_celsius(32)
    
    86

  • Các số được lưu trữ dưới dạng số nguyên hoặc số dấu phẩy động

  • Các biến được xác định trong một hàm chỉ có thể được nhìn thấy và sử dụng trong phần thân của hàm

  • Các biến được tạo bên ngoài bất kỳ hàm nào được gọi là biến toàn cục

  • Trong một hàm, chúng ta có thể truy cập các biến toàn cục

  • Các biến được tạo trong một hàm sẽ ghi đè các biến toàn cục nếu tên của chúng khớp với nhau

  • Sử dụng

    fahr_to_celsius(32)
    
    87 để xem trợ giúp cho điều gì đó

  • Đặt các chuỗi tài liệu trong các chức năng để cung cấp trợ giúp cho chức năng đó

  • Chỉ định các giá trị mặc định cho các tham số khi xác định hàm bằng cách sử dụng

    fahr_to_celsius(32)
    
    88 trong danh sách tham số

  • Các tham số có thể được chuyển bằng cách khớp dựa trên tên, theo vị trí hoặc bằng cách bỏ qua chúng (trong trường hợp đó, giá trị mặc định được sử dụng)

  • Đặt mã có các tham số thay đổi thường xuyên trong một hàm, sau đó gọi nó với các giá trị tham số khác nhau để tùy chỉnh hành vi của nó

    Chúng ta có thể sử dụng một hàm làm giá trị biến không?

    Có, một chức năng có thể được sử dụng như một giá trị biến

    Một biến có thể bằng một hàm Python không?

    Nếu biến đã được xác định trước đó, bạn có thể làm điều đó đúng . Nếu biến chưa được xác định trước đó, bạn không thể làm điều đó, đơn giản vì không có giá trị nào có thể được truyền vào hàm.