Hướng dẫn where does python save functions? - python lưu các chức năng ở đâu?

Những gì bạn muốn làm là lấy tệp Python của bạn và sử dụng nó như một mô -đun hoặc thư viện.module or a library.

Không có cách nào để làm cho bốn chức năng đó tự động có sẵn, bất kể điều gì, 100% phần trăm thời gian, nhưng bạn có thể làm điều gì đó rất gần.

Ví dụ: ở đầu tệp của bạn, bạn đã nhập

add_things("love", "Gators")
2.
add_things("love", "Gators")
2 là một mô -đun hoặc thư viện đã được thiết lập để có sẵn bất cứ khi nào bạn chạy Python, miễn là bạn nhập nó.import it.

Bạn muốn làm điều tương tự - lưu 4 chức năng đó vào một tệp và nhập chúng bất cứ khi nào bạn muốn.


Ví dụ: nếu bạn sao chép và dán bốn chức năng đó vào một tệp có tên

add_things("love", "Gators")
4, thì bạn chỉ cần thực hiện
add_things("love", "Gators")
5. Tuy nhiên, điều này sẽ chỉ hoạt động nếu bạn đang chạy Python trong cùng một thư mục mà bạn đã lưu mã của mình.

Nếu bạn muốn làm cho mô-đun của bạn có sẵn toàn bộ hệ thống, bạn phải lưu nó ở đâu đó trên Pythonpath. Thông thường, lưu nó vào

add_things("love", "Gators")
6 sẽ hoạt động (giả sử bạn đang chạy Windows).PYTHONPATH. Usually, saving it to
add_things("love", "Gators")
6 will work (assuming you're running Windows).

Phần này dựa trên Chương 3 trong Sweigart, tự động hóa những thứ nhàm chán với Python (phiên bản thứ hai).

Kịch bản Python cho phần này

Viết và chạy một kịch bản Python

Để viết các chức năng trong Python, bạn sẽ lưu các tệp với phần mở rộng .py. Bạn có thể viết và lưu các tệp Python trong nguyên tử hoặc trong MU.

Để chạy một tập lệnh có tên foobar.py mà trong thư mục hiện tại, hãy nhập cái này tại dấu nhắc Bash ($) trong Mac hoặc dấu nhắc lệnh Windows:

Trên Windows hoặc trong VirtualEnv trên Mac hoặc Windows, hãy thả

add_things("love", "Gators")
7 từ
add_things("love", "Gators")
8:

Bạn không cần phải ở trong ảo của mình để làm điều này, nhưng nó không sao nếu bạn là.

Đặt một cái gì đó vào, lấy một cái gì đó ra ngoài

Sweigart lưu ý rằng nhiều chức năng hoạt động như các hộp đen của Hồi giáo: Điều này mô tả một hàm với các tham số (nó có đối số) và câu lệnh trả về. Một cái gì đó đi vào nó (lập luận) và một cái gì đó phát ra từ nó (bất cứ điều gì được trả lại). Bạn không cần phải biết nó hoạt động như thế nào; Bạn chỉ cần biết những gì nó làm.

a_black_box.py

def add_things(a, b):
   result = (a * 3) + (b * 3)
   return result

Để chạy chức năng đó, hãy gọi nó, chuyển thành hai chuỗi làm đối số:

add_things("love", "Gators")

Chức năng sẽ trả về điều này:

loveloveloveGatorsGatorsGators

Tuy nhiên, bạn sẽ không thấy giá trị trả về trừ khi bạn nắm bắt được nó, hoặc bắt bắt nó, với một biến, như thế này:

output = add_things("love", "Gators")

Sau đó, bạn có thể in đầu ra hoặc gửi nó vào cơ sở dữ liệu hoặc viết nó vào HTML của một trang web trực tiếp - hoặc bất cứ điều gì bạn cần.

Điều này đúng với nhiều chức năng chúng tôi sử dụng từ các thư viện đã nhập. Chúng tôi biết cách gọi chức năng và chúng tôi biết những gì mong đợi là đầu ra, nhưng chúng tôi không cần phải biết nó hoạt động như thế nào.

Ghi chú

Chúng tôi không cần phải biết làm thế nào một máy nướng bánh mì nướng bánh mì để lấy nó ra khỏi nó. Chúng tôi đặt hai miếng bánh mì (các đối số chúng tôi chuyển vào một chức năng) và bánh mì nướng được trả lại sau khi chức năng chạy.

Sử dụng các tham số và trả về trong các chức năng

Hãy để xây dựng một chức năng từng bước để giúp bạn hiểu các tham số và trả về. Giả sử rằng bạn mua cùng một loại cà phê (hoặc đồ uống khác) hàng ngày và bạn muốn tính toán số tiền bạn chi tiêu mỗi tuần.

# this function has no parameters and returns nothing

def drink_expenses():
    price = 3.99
    count = 7
    total = price * count

# call the function
drink_expenses()

Nó không hữu ích lắm như vậy. Điều gì sẽ xảy ra nếu giá của đồ uống thay đổi? Điều gì sẽ xảy ra nếu bạn muốn tính một khoảng thời gian khác nhau?

# this function has two parameters, but it returns nothing

def drink_expenses(price, count):
    total = price * count

# call the function with two arguments
drink_expenses(3.99, 7)

Bây giờ bạn có thể vượt qua bất kỳ giá nào và bất kỳ thời gian nào bạn muốn. Tuy nhiên, bạn có thể sử dụng giá trị cho tổng số nếu không có câu lệnh trả lại. Vì vậy - trả lại tổng số tiền chi cho cà phê.

# this function has two parameters, and it returns a value

def drink_expenses(price, count):
   total = price * count
   return total

# call the function with two arguments
drink_expenses(4.49, 5)

Chức năng là tốt, nhưng cách bạn gọi nó cần thay đổi. Để gán giá trị trả về của hàm cho một biến mới, hãy làm theo mẫu này:

# this function has two parameters, and it returns a value

def drink_expenses(price, count):
   total = price * count
   return total

# assign the returned value to a new variable, result
result = drink_expenses(4.49, 5)

print(result)

Một hàm có thể có nhiều dòng hướng dẫn bên trong khối mã của nó (bao gồm các điều kiện, vòng lặp, v.v.).

Mẹo

Nó tốt nhất để viết các chức năng thực hiện một nhiệm vụ cụ thể, thay vì một số nhiệm vụ.

Phạm vi¶

Đây là một chút của một chủ đề khó khăn cho người mới bắt đầu, bởi vì bạn không có nhiều kinh nghiệm viết các kịch bản dài hơn hoặc phức tạp.

Xem xét ví dụ sau:

../python_code_examples/funions/f_scope_global_vs_local.py¶

# example of badly using scope of variables

def breakfast():
    food = 'eggs'
    drink = 'coffee'
    print("Breakfast:")
    print(food, drink, "\n")

def lunch():
    food = 'salad'
    drink = 'iced tea'
    print("Lunch:")
    print(food, drink, "\n")

# run the functions
lunch()
breakfast()

# attempt to print local variables (will not work)
print(food)
print(drink)

Mọi thứ sẽ hoạt động tốt ngoại trừ hai dòng cuối cùng. Nếu bạn chạy tập lệnh, bạn sẽ thấy hai chức năng in:

Lunch:
salad iced tea

Breakfast:
eggs coffee

Nhưng sau đó, bạn sẽ thấy một lỗi:

add_things("love", "Gators")
0

Thông báo lỗi (dòng cuối cùng) nêu rõ vấn đề: Bạn đã cố gắng in giá trị của biến

add_things("love", "Gators")
9, nhưng không có biến nào như vậy bên ngoài các chức năng. Kịch bản dừng lại với
loveloveloveGatorsGatorsGators
0, nhưng nếu bạn đã thử
loveloveloveGatorsGatorsGators
1 thay thế, bạn sẽ nhận được lỗi tương tự.

Lưu ý rằng nó rất tốt khi có

add_things("love", "Gators")
9 trong cả hai chức năng và
loveloveloveGatorsGatorsGators
3 trong cả hai chức năng - không có xung đột hoặc nhầm lẫn vì phạm vi địa phương.

Điểm chính về phạm vi

  • Một biến có phạm vi địa phương hoặc phạm vi toàn cầu. Nó không thể có cả hai.

  • Một biến cục bộ chỉ tồn tại bên trong một hàm. Nó không thể được truyền bên ngoài hàm (mặc dù giá trị của nó có thể - thông qua trở lại).

  • Đôi khi bạn sẽ phạm sai lầm về phạm vi của một biến, và sau đó bạn sẽ gặp lỗi - hoặc (tệ hơn) câu trả lời hoặc kết quả của bạn sẽ không chính xác.

  • Một biến toàn cầu tồn tại bên ngoài bất kỳ chức năng. Nó có thể được sử dụng bên trong một chức năng.

  • Đây là một thói quen xấu khi dựa vào các biến toàn cầu khi các chương trình của bạn ngày càng lớn hơn (Sweigart, trang 66).bad habit to rely on global variables as your programs get larger and larger” (Sweigart, p. 66).

  • Tránh lặp lại tên của các biến trong các phạm vi khác nhau. Nếu bạn có một biến toàn cầu có tên Foobar, không đặt tên cho một biến cục bộ Foobar. repeating the names of variables in different scopes. If you have a global variable named foobar, do not name a local variable foobar.

  • Xem bốn quy tắc, p. 69 ở Sweigart

cố gắng/ngoại trừ

Khi chương trình của bạn có lỗi, tập lệnh của bạn dừng lại. Trong hầu hết các trường hợp, bạn muốn được thông báo về lỗi nhưng không có tập lệnh bị đình trệ. Cách thông thường để thực hiện điều này trong Python là viết mã bạn muốn chạy trong khối

loveloveloveGatorsGatorsGators
4 và ghi hướng dẫn xử lý lỗi bên trong khối
loveloveloveGatorsGatorsGators
5.

..

add_things("love", "Gators")
1

Mã trên yêu cầu người dùng nhập toàn bộ số. Một chuỗi hoặc một thập phân (float) sẽ kích hoạt ngoại lệ.

Dấu

Để tìm hiểu loại lỗi nào sẽ được ném, thử nghiệm tại dòng lệnh Python (các loại lỗi nhạy cảm với trường hợp). Ngoài ra, có một danh sách các trường hợp ngoại lệ tích hợp.

loveloveloveGatorsGatorsGators
6 và
loveloveloveGatorsGatorsGators
7 là phổ biến, nhưng có nhiều người khác!

Đánh giá chương: Chương 3¶

Đây là những điểm từ chương này. Slide bên dưới.

Những điểm chính¶

  1. Tuyên bố DEF (làm thế nào và nơi sử dụng nó)

  2. Khi nào mã trong một hàm được thực thi? (Biết sự khác biệt giữa việc xác định chức năng và chạy nó.)

  3. Tham số hoặc đối số: những thứ này ở đâu, trong một chức năng?

    • Làm thế nào để chúng hoạt động khi bạn xác định chức năng?

    • Làm thế nào để chúng hoạt động khi bạn chạy chức năng? (Lưu ý: Thay vì chạy, chúng ta có thể nói cuộc gọi hoặc thực hiện chức năng. Tất cả đều có cùng ý nghĩa.)

  4. Từ khóa trả về (được sử dụng trong một hàm)

  5. Kiểu dữ liệu nonetype: Giá trị không

    • Điều này sẽ quan trọng trong việc cạo! Nếu bạn gặp lỗi cho biết điều gì đó không hoạt động vì nó không thể được áp dụng cho Nonetype, điều đó có nghĩa là một cái gì đó không trả lại khi bạn mong đợi một giá trị khác.

    • Python Python cho biết thêm không có sự kết thúc của bất kỳ định nghĩa chức năng nào mà không có câu lệnh trả về (Sweigart, trang 62). Nói cách khác, một hàm không có câu lệnh trả về không trả về không.

    • Một câu lệnh trả về trống (nghĩa là từ trả về một mình trên một dòng) cũng không trả về.

  6. Từ khóa đối số: Bạn có thể quên điều này trong thời gian này

  7. Quan trọng! Phạm vi của các biến Scope of variables

  8. Các chức năng như các hộp đen của người Hồi giáo: mô tả một hàm với các tham số (có nghĩa là nó có đối số) và câu lệnh trả về. Một hoặc nhiều giá trị đi vào hàm (đối số) và một số giá trị phát ra từ nó (bất cứ thứ gì được trả về).

  9. Xử lý ngoại lệ (còn được gọi là xử lý lỗi): thử/ngoại trừ mẫu

Có một chức năng lưu trong Python?

Nhấp chuột phải vào cửa sổ Python và chọn Lưu AS để lưu mã của bạn dưới dạng tệp Python (. PY) hoặc Tệp văn bản (. TXT). Nếu lưu vào tệp Python, chỉ có mã Python sẽ được lưu. to save your code either as a Python file (. py) or Text file (. txt). If saving to a Python file, only the Python code will be saved.

Làm thế nào để bạn lấy một chức năng trong Python?

Chúng tôi sử dụng phương thức GetSource () của mô -đun kiểm tra để lấy mã nguồn của hàm.Trả về văn bản của mã nguồn cho một đối tượng.Đối số có thể là một mô -đun, lớp, phương thức, chức năng, tracback, khung hoặc đối tượng mã.use the getsource() method of inspect module to get the source code of the function. Returns the text of the source code for an object. The argument may be a module, class, method, function, traceback, frame, or code object.

Làm cách nào để lưu chức năng dữ liệu trong Python?

Phương thức Save () trong Python Bất cứ khi nào chúng ta điều khiển hình ảnh và muốn lưu giữ hình ảnh để biết thêm hình ảnh, chúng ta sử dụng hàm Save ().Hàm lưu () lưu hình ảnh vào tệp hoặc tên tệp.Nó lưu hình ảnh được thao tác cuối cùng trong đĩa của bạn. in Python Whenever we manipulate an image and want to preserve image for further image, we use save() function. save() function saves the image into the file or filename. It saves the final manipulated image in your disk.

Làm cách nào để lưu một hàm dưới dạng mô -đun?

Để tạo một mô -đun, chỉ cần lưu mã bạn muốn trong một tệp với phần mở rộng tệp .Py:..
Lưu mã này trong một tệp có tên mymodule.py.....
Nhập mô -đun có tên myModule và gọi hàm lời chào: ....
Lưu mã này trong tệp mymodule.py.....
Nhập mô -đun có tên MyModule và truy cập từ điển Person1:.