Python sử dụng self trong đối số mặc định

Đối số mặc định là đối số hàm nhận giá trị mặc định nếu bạn không chuyển giá trị rõ ràng khi gọi hàm. Ví dụ: định nghĩa hàm

my_function()
5 cho phép bạn gọi nó có hoặc không có đối số tùy chọn
my_function()
6—các lệnh gọi hợp lệ là
my_function()
7,
my_function()
8 hoặc thậm chí là
my_function()
9. Nhưng nếu bạn không chuyển đối số tùy chọn, nó sẽ chỉ gán giá trị mặc định 0 cho đối số
my_function()
6

Ví dụ đối số mặc định

def f(x=0):
    print(x)

f(10)
# 10

f(-2)
# -2

f('hello world')
# hello world

########################
# DEFAULT ARGUMENT     #
########################
f()
# 0

Đăng kí. Khi nào nên sử dụng đối số mặc định?

Giả sử, bạn đã tạo một công cụ dòng lệnh Python cho doanh nghiệp của mình. Công cụ này yêu cầu xác nhận của người dùng đối với các hoạt động khác nhau như ghi hoặc xóa tệp

Để tránh mã thừa, bạn đã triển khai một chức năng chung xử lý tương tác với người dùng. Hành vi mặc định phải bao gồm ba bước

  • (1) Bạn hỏi (nhắc) người dùng một câu hỏi
  • (2) Người dùng đưa ra một số phản hồi
  • (3) Miễn là phản hồi không hợp lệ, chức năng này sẽ lặp lại tối đa bốn lần--mỗi lần in lời nhắc
    This is a function without arguments
    
    1

Số lần lặp lại và lời nhắc có thể tùy chỉnh thông qua các thông số

Để đạt được điều này, bạn có thể chỉ định các đối số mặc định như được đưa ra trong đoạn mã sau. Bạn có thể sử dụng các tham số mặc định bằng cách gọi

This is a function without arguments
2. Hoặc bạn có thể ghi đè lên chúng theo thứ tự định nghĩa của chúng (một, một số hoặc tất cả các tham số)

def ask_ok(prompt, retries=4, reminder='Try again: yes or no?'):
    while retries>0:
        ok = input(prompt)
        if ok in ('y', 'yes'):
            return True
        if ok in ('n', 'no'):
            return False
        retries = retries - 1
        print(reminder)

ask_ok('May we send you a free gift?')

Hãy kiểm tra xem bạn hiểu khái niệm đối số mặc định này như thế nào

Đối số mặc định của câu đố

Python sử dụng self trong đối số mặc định

def ask_ok(prompt, retries=4, reminder='Try again: yes or no?'):
    while retries>0:
        ok = input(prompt)
        if ok in ('y', 'yes'):
            return True
        if ok in ('n', 'no'):
            return False
        retries = retries - 1
        print(reminder)

ask_ok('May we send you a free gift?')
0 có phải là một lệnh gọi hàm hợp lệ không?

Điều thú vị là chỉ 50% người dùng finxter giải được câu đố này. họ dường như đoán được câu trả lời. Thay thế một phần các đối số mặc định là một tính năng mới đối với hầu hết người dùng. Nó có mới đối với bạn không?

Nắm vững các tính năng ngôn ngữ cơ bản này sẽ nâng bạn lên cấp độ của một lập trình viên nâng cao

Bạn có phải là một lập trình viên bậc thầy không?
Kiểm tra kỹ năng của bạn ngay bây giờ.

Video liên quan

Hướng dẫn lập trình Python 3 - Mặc định tham số chức năng

Python sử dụng self trong đối số mặc định

Xem video này trên YouTube

Python sử dụng self trong đối số mặc định

Chris

Trong khi làm việc với tư cách là một nhà nghiên cứu trong các hệ thống phân tán, Dr. Christian Mayer tìm thấy tình yêu của mình với việc dạy sinh viên khoa học máy tính

Để giúp sinh viên đạt được mức độ thành công Python cao hơn, anh ấy đã thành lập trang web giáo dục lập trình Finxter. com. Ông là tác giả của cuốn sách lập trình nổi tiếng Python One-Liners (NoStarch 2020), đồng tác giả của loạt sách tự xuất bản Coffee Break Python, người đam mê khoa học máy tính, cộng tác viên tự do và chủ sở hữu của một trong 10 blog Python lớn nhất thế giới

Niềm đam mê của anh ấy là viết, đọc và mã hóa. Nhưng niềm đam mê lớn nhất của anh ấy là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ nâng cao kỹ năng của mình. Bạn có thể tham gia học viện email miễn phí của anh ấy tại đây

Các hàm trong Python được sử dụng để triển khai logic mà bạn muốn thực hiện lặp lại ở các vị trí khác nhau trong mã của mình. Bạn có thể truyền dữ liệu cho các hàm này thông qua các đối số của hàm. Ngoài việc truyền đối số cho hàm thông qua lệnh gọi hàm, bạn cũng có thể đặt giá trị đối số mặc định trong hàm Python. Các giá trị mặc định này được gán cho các đối số của hàm nếu bạn không chuyển một giá trị tham số cho đối số đã cho một cách rõ ràng. Tham số là các giá trị thực sự được truyền cho các đối số của hàm

Trong bài viết này, bạn sẽ thấy cách sử dụng các đối số mặc định trong các hàm Python. Nhưng trước tiên, chúng ta sẽ xem cách định nghĩa một hàm trong Python và cách chuyển các giá trị cho các đối số của hàm một cách rõ ràng

Chức năng không có đối số

Hãy xác định một hàm Python rất đơn giản mà không cần bất kỳ đối số nào

def my_function():
    print("This is a function without arguments")

Đoạn script trên định nghĩa một hàm,

This is a function without arguments
6, không chấp nhận bất kỳ đối số nào và chỉ in ra một chuỗi

Tập lệnh sau đây cho biết cách bạn thực sự gọi hàm

This is a function without arguments
7

my_function()

Ở đầu ra, bạn sẽ thấy một câu lệnh đơn giản được in ra màn hình bằng hàm

This is a function without arguments
7

This is a function without arguments

Chức năng với các đối số rõ ràng

Bây giờ chúng ta hãy xác định một hàm Python đơn giản, nơi chúng ta phải truyền nhiều giá trị cho các đối số của hàm. Nếu bạn không chỉ định giá trị cho tất cả các đối số của hàm, bạn sẽ gặp lỗi

Đây là chức năng chúng tôi sẽ sử dụng làm ví dụ

def func_args(integer1, integer2):
    result = integer1 + integer2
    return result

Trong đoạn mã trên, chúng ta tạo một hàm,

This is a function without arguments
9, với hai đối số
def func_args(integer1, integer2):
    result = integer1 + integer2
    return result
0 và
def func_args(integer1, integer2):
    result = integer1 + integer2
    return result
1. Hàm cộng các giá trị được truyền trong hai đối số và trả về kết quả cho người gọi hàm

Hãy thử gọi hàm trên với hai đối số

def ask_ok(prompt, retries=4, reminder='Try again: yes or no?'):
    while retries>0:
        ok = input(prompt)
        if ok in ('y', 'yes'):
            return True
        if ok in ('n', 'no'):
            return False
        retries = retries - 1
        print(reminder)

ask_ok('May we send you a free gift?')
3

Đoạn script trên gọi phương thức

This is a function without arguments
9 với hai giá trị tham số là i. e. 10 và 20. Ở đầu ra, bạn sẽ thấy tổng của hai giá trị này, tôi. e. 30

Bây giờ chúng ta hãy thử gọi phương thức

This is a function without arguments
9 mà không truyền giá trị cho các đối số

def ask_ok(prompt, retries=4, reminder='Try again: yes or no?'):
    while retries>0:
        ok = input(prompt)
        if ok in ('y', 'yes'):
            return True
        if ok in ('n', 'no'):
            return False
        retries = retries - 1
        print(reminder)

ask_ok('May we send you a free gift?')
6

Ở đầu ra, bạn sẽ thấy lỗi sau

def ask_ok(prompt, retries=4, reminder='Try again: yes or no?'):
    while retries>0:
        ok = input(prompt)
        if ok in ('y', 'yes'):
            return True
        if ok in ('n', 'no'):
            return False
        retries = retries - 1
        print(reminder)

ask_ok('May we send you a free gift?')
7

Lỗi khá rõ ràng, lệnh gọi hàm tới

This is a function without arguments
9 thiếu 2 đối số vị trí bắt buộc,
def func_args(integer1, integer2):
    result = integer1 + integer2
    return result
0 và
def func_args(integer1, integer2):
    result = integer1 + integer2
    return result
1. Về cơ bản, lỗi cho chúng ta biết rằng chúng ta cần chuyển các giá trị cho các đối số
def func_args(integer1, integer2):
    result = integer1 + integer2
    return result
0 và
def func_args(integer1, integer2):
    result = integer1 + integer2
    return result
1 thông qua lệnh gọi hàm

Bây giờ chúng ta hãy chuyển một giá trị cho một trong các đối số và xem điều gì sẽ xảy ra

def ask_ok(prompt, retries=4, reminder='Try again: yes or no?'):
    while retries>0:
        ok = input(prompt)
        if ok in ('y', 'yes'):
            return True
        if ok in ('n', 'no'):
            return False
        retries = retries - 1
        print(reminder)

ask_ok('May we send you a free gift?')
3

Bây giờ ở đầu ra, bạn sẽ lại thấy lỗi sau

def ask_ok(prompt, retries=4, reminder='Try again: yes or no?'):
    while retries>0:
        ok = input(prompt)
        if ok in ('y', 'yes'):
            return True
        if ok in ('n', 'no'):
            return False
        retries = retries - 1
        print(reminder)

ask_ok('May we send you a free gift?')
4

Sự khác biệt ở đây là lỗi bây giờ cho chúng ta biết rằng giá trị của một trong các đối số vị trí, i. e.

def func_args(integer1, integer2):
    result = integer1 + integer2
    return result
1, mất tích. Điều này có nghĩa là không có bất kỳ giá trị đối số mặc định nào được đặt, bạn phải chuyển các giá trị một cách rõ ràng cho tất cả các đối số của hàm, nếu không sẽ xảy ra lỗi

Nếu bạn muốn hàm của mình thực thi có hoặc không có các giá trị đối số trong lệnh gọi hàm thì sao?

Chức năng với đối số mặc định

Đối số mặc định trong các hàm Python là những đối số nhận giá trị mặc định nếu không có giá trị rõ ràng nào được chuyển cho các đối số này từ lệnh gọi hàm. Hãy định nghĩa một hàm với một đối số mặc định

def ask_ok(prompt, retries=4, reminder='Try again: yes or no?'):
    while retries>0:
        ok = input(prompt)
        if ok in ('y', 'yes'):
            return True
        if ok in ('n', 'no'):
            return False
        retries = retries - 1
        print(reminder)

ask_ok('May we send you a free gift?')
6

Đoạn script trên định nghĩa một hàm

def ask_ok(prompt, retries=4, reminder='Try again: yes or no?'):
    while retries>0:
        ok = input(prompt)
        if ok in ('y', 'yes'):
            return True
        if ok in ('n', 'no'):
            return False
        retries = retries - 1
        print(reminder)

ask_ok('May we send you a free gift?')
30 với một đối số mặc định i. e.
def func_args(integer1, integer2):
    result = integer1 + integer2
    return result
0. Giá trị mặc định cho đối số
def func_args(integer1, integer2):
    result = integer1 + integer2
    return result
0 được đặt thành 2. Nếu bạn gọi phương thức
def ask_ok(prompt, retries=4, reminder='Try again: yes or no?'):
    while retries>0:
        ok = input(prompt)
        if ok in ('y', 'yes'):
            return True
        if ok in ('n', 'no'):
            return False
        retries = retries - 1
        print(reminder)

ask_ok('May we send you a free gift?')
30 với một giá trị cho đối số
def func_args(integer1, integer2):
    result = integer1 + integer2
    return result
0, thì hàm
def ask_ok(prompt, retries=4, reminder='Try again: yes or no?'):
    while retries>0:
        ok = input(prompt)
        if ok in ('y', 'yes'):
            return True
        if ok in ('n', 'no'):
            return False
        retries = retries - 1
        print(reminder)

ask_ok('May we send you a free gift?')
30 sẽ trả về bình phương của giá trị đó

Mặt khác, nếu bạn không chuyển bất kỳ giá trị nào cho đối số

def func_args(integer1, integer2):
    result = integer1 + integer2
    return result
0 của hàm
def ask_ok(prompt, retries=4, reminder='Try again: yes or no?'):
    while retries>0:
        ok = input(prompt)
        if ok in ('y', 'yes'):
            return True
        if ok in ('n', 'no'):
            return False
        retries = retries - 1
        print(reminder)

ask_ok('May we send you a free gift?')
30, bạn sẽ thấy giá trị mặc định đó, i. e. 2, sẽ được gán cho
def func_args(integer1, integer2):
    result = integer1 + integer2
    return result
0, và hàm sẽ trả về bình phương của 2, i. e. 4

Trước tiên hãy gọi phương thức

def ask_ok(prompt, retries=4, reminder='Try again: yes or no?'):
    while retries>0:
        ok = input(prompt)
        if ok in ('y', 'yes'):
            return True
        if ok in ('n', 'no'):
            return False
        retries = retries - 1
        print(reminder)

ask_ok('May we send you a free gift?')
30 với giá trị đối số là 10

my_function()
0

đầu ra

my_function()
1

Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó

Khi bạn thực thi đoạn script trên, giá trị 10 sẽ ghi đè giá trị mặc định là 2 cho đối số

def func_args(integer1, integer2):
    result = integer1 + integer2
    return result
0 của hàm
def ask_ok(prompt, retries=4, reminder='Try again: yes or no?'):
    while retries>0:
        ok = input(prompt)
        if ok in ('y', 'yes'):
            return True
        if ok in ('n', 'no'):
            return False
        retries = retries - 1
        print(reminder)

ask_ok('May we send you a free gift?')
30 và hàm trả về 100, là bình phương của 10

Bây giờ chúng ta sẽ gọi hàm

def ask_ok(prompt, retries=4, reminder='Try again: yes or no?'):
    while retries>0:
        ok = input(prompt)
        if ok in ('y', 'yes'):
            return True
        if ok in ('n', 'no'):
            return False
        retries = retries - 1
        print(reminder)

ask_ok('May we send you a free gift?')
30 mà không có bất kỳ giá trị nào cho đối số
def ask_ok(prompt, retries=4, reminder='Try again: yes or no?'):
    while retries>0:
        ok = input(prompt)
        if ok in ('y', 'yes'):
            return True
        if ok in ('n', 'no'):
            return False
        retries = retries - 1
        print(reminder)

ask_ok('May we send you a free gift?')
63. Trong trường hợp này, bạn sẽ thấy rằng 4 sẽ được trả về bởi hàm
def ask_ok(prompt, retries=4, reminder='Try again: yes or no?'):
    while retries>0:
        ok = input(prompt)
        if ok in ('y', 'yes'):
            return True
        if ok in ('n', 'no'):
            return False
        retries = retries - 1
        print(reminder)

ask_ok('May we send you a free gift?')
30 vì trong trường hợp không có giá trị cho hàm
def ask_ok(prompt, retries=4, reminder='Try again: yes or no?'):
    while retries>0:
        ok = input(prompt)
        if ok in ('y', 'yes'):
            return True
        if ok in ('n', 'no'):
            return False
        retries = retries - 1
        print(reminder)

ask_ok('May we send you a free gift?')
30, giá trị mặc định của 2 sẽ được sử dụng làm giá trị cho hàm
def ask_ok(prompt, retries=4, reminder='Try again: yes or no?'):
    while retries>0:
        ok = input(prompt)
        if ok in ('y', 'yes'):
            return True
        if ok in ('n', 'no'):
            return False
        retries = retries - 1
        print(reminder)

ask_ok('May we send you a free gift?')
30, như minh họa bên dưới

my_function()
2

đầu ra

my_function()
3

Một hàm Python cũng có thể có nhiều đối số mặc định. Chẳng hạn, trong tập lệnh sau, hàm thêm số nguyên được truyền vào đối số. Nếu không có giá trị số nguyên nào được truyền cho hàm, thì các đối số mặc định sẽ nhận giá trị 2 và 4 tương ứng, như minh họa bên dưới

my_function()
4

Trước tiên hãy gọi hàm

def ask_ok(prompt, retries=4, reminder='Try again: yes or no?'):
    while retries>0:
        ok = input(prompt)
        if ok in ('y', 'yes'):
            return True
        if ok in ('n', 'no'):
            return False
        retries = retries - 1
        print(reminder)

ask_ok('May we send you a free gift?')
67 mà không có bất kỳ tham số nào

my_function()
5

đầu ra

my_function()
6

Vì chúng tôi không chuyển bất kỳ giá trị nào cho các đối số của hàm, các giá trị đối số mặc định, tôi. e 2 và 4, đã được cộng lại với nhau

Bây giờ, hãy chuyển hai giá trị của riêng chúng ta cho hàm

def ask_ok(prompt, retries=4, reminder='Try again: yes or no?'):
    while retries>0:
        ok = input(prompt)
        if ok in ('y', 'yes'):
            return True
        if ok in ('n', 'no'):
            return False
        retries = retries - 1
        print(reminder)

ask_ok('May we send you a free gift?')
67

my_function()
7

đầu ra

my_function()
8

Đúng như dự đoán, 4 và 8 được cộng lại với nhau để trả về 12

Một hàm Python có thể có cả đối số bình thường (rõ ràng) và mặc định cùng một lúc. Hãy tạo một hàm

def ask_ok(prompt, retries=4, reminder='Try again: yes or no?'):
    while retries>0:
        ok = input(prompt)
        if ok in ('y', 'yes'):
            return True
        if ok in ('n', 'no'):
            return False
        retries = retries - 1
        print(reminder)

ask_ok('May we send you a free gift?')
69. Đối số đầu tiên của hàm là đối số bình thường trong khi đối số thứ hai là đối số mặc định có giá trị là 2. Hàm trả về kết quả của giá trị trong đối số đầu tiên được nâng lên lũy thừa của giá trị trong đối số thứ hai

my_function()
9

Trước tiên hãy chỉ vượt qua một đối số duy nhất

This is a function without arguments
0

đầu ra

This is a function without arguments
1

Trong đoạn mã trên, 3 đã được chuyển dưới dạng giá trị cho đối số

def func_args(integer1, integer2):
    result = integer1 + integer2
    return result
0 của hàm
def ask_ok(prompt, retries=4, reminder='Try again: yes or no?'):
    while retries>0:
        ok = input(prompt)
        if ok in ('y', 'yes'):
            return True
        if ok in ('n', 'no'):
            return False
        retries = retries - 1
        print(reminder)

ask_ok('May we send you a free gift?')
69. Không có giá trị nào được cung cấp cho đối số mặc định
def func_args(integer1, integer2):
    result = integer1 + integer2
    return result
1. Do đó, giá trị mặc định của 2 sẽ được sử dụng để lấy lũy thừa của 3 và bạn sẽ thấy 9 ở đầu ra

Bây giờ chúng ta hãy chuyển hai giá trị cho hàm

def ask_ok(prompt, retries=4, reminder='Try again: yes or no?'):
    while retries>0:
        ok = input(prompt)
        if ok in ('y', 'yes'):
            return True
        if ok in ('n', 'no'):
            return False
        retries = retries - 1
        print(reminder)

ask_ok('May we send you a free gift?')
69

This is a function without arguments
2

Ở đầu ra, bạn sẽ thấy 3 được nâng lên lũy thừa 4, i. e. 81

Điều quan trọng cần lưu ý là các tham số có đối số mặc định không được theo sau bởi các tham số không có đối số mặc định. Lấy chức năng sau đây làm ví dụ

This is a function without arguments
3

Cố gắng gọi hàm này sẽ dẫn đến lỗi vì đối số đầu tiên có giá trị mặc định, nhưng đối số thứ hai thì không

Bản thân có được coi là đối số trong Python không?

self là phương thức đầu tiên của mọi lớp Python . Biến self trỏ đến thể hiện của lớp mà bạn đang làm việc với. every method that you define, must accept that instance as its first argument (called self by convention). The self variable points to the instance of the class that you're working with.

Tại sao self là đối số đầu tiên trong Python?

Đối số đầu tiên của mọi phương thức lớp, kể cả init , là luôn là tham chiếu đến phiên bản hiện tại của lớp . Theo quy ước, đối số này luôn được đặt tên là self. Trong phương thức init, self đề cập đến đối tượng mới được tạo; .

Tự đối số trong Python là gì?

Tham số self là tham chiếu đến phiên bản hiện tại của lớp và được sử dụng để truy cập các biến thuộc về lớp .

Tại sao bản thân không hoạt động trong Python?

Trình tự xây dựng lớp Python . Biến đó chỉ tồn tại khi phương thức đó đang thực thi và do đó là duy nhất đối với phương thức đó. Để tạo các trường hoặc biến toàn cục cho cả lớp, chúng ta phải khai báo chúng bên ngoài các phương thức của lớp. If we have a variable inside a method, in this case, self will not work. That variable exists only while that method is executing and is thus unique to that method. To create global fields or variables for the whole class, we must declare them outside of the class methods.