Hướng dẫn python function parameter same name - tham số hàm python cùng tên

Có điều gì sai với những điều sau không?:

def foo(bar):
    for b in bar:
        print (b)

bar = ['hello', 'world']

foo(bar)

Thông thường trong mã của tôi, tôi thay đổi các tham số chức năng thành một tên khác với biến được truyền.

def foo(_bar):
    for b in _bar:
        print (b)

bar = ['hello', 'world']

foo(bar)

Tôi làm điều này chỉ để an toàn, nhưng khi người khác nhìn vào mã, tôi nghĩ sẽ thật tuyệt nếu tôi có thể giữ cùng tên để họ biết chính xác những gì đang được thông qua.

Đã hỏi ngày 27 tháng 6 năm 2017 lúc 13:49Jun 27, 2017 at 13:49

2

Từ quan điểm cú pháp, không có gì sai với 1 ví dụ. Python tuân theo quy tắc LEGB khi nó cố gắng nhận giá trị biến, vì vậy khi bạn sử dụng

>>> quadratic(31, 93, 62)
(-1.0, -2.0)
0 làm đối số, bạn viết lại toàn cầu
>>> quadratic(31, 93, 62)
(-1.0, -2.0)
0 trong phạm vi hàm
>>> quadratic(31, 93, 62)
(-1.0, -2.0)
2.

Đã trả lời ngày 27 tháng 6 năm 2017 lúc 13:53Jun 27, 2017 at 13:53

Hướng dẫn python function parameter same name - tham số hàm python cùng tên

Bạn có thể giữ cùng một tên, nó không quan trọng. Các biến được xác định bên trong một hàm không thể truy cập được bên ngoài.

Đã trả lời ngày 27 tháng 6 năm 2017 lúc 13:52Jun 27, 2017 at 13:52

Chà, không có vấn đề gì vì các biến được xác định bên trong một hàm có phạm vi cục bộ.

IMO, vấn đề này chỉ quan trọng khi chức năng của bạn cần sử dụng cùng một tên cục bộ và một số biến toàn cầu. Nhưng bạn nên tránh thiết kế như vậy ngay từ đầu.

Đây là cách tôi xử lý loại tình huống này:

def foo(bar):
    for b in bar:
        print (b)

def main():
    bar = ['hello', 'world']
    foo(bar)
    ...

Điều đáng nói là điều đáng nói là trong ví dụ thứ hai của bạn,

>>> quadratic(31, 93, 62)
(-1.0, -2.0)
3 thường được sử dụng cho những thứ tư nhân (sử dụng nội bộ) trong Python, nhưng đó chỉ là một quy ước (nó không được thực thi bởi ngôn ngữ theo bất kỳ cách nào người lớn). Tôi muốn sử dụng:
>>> quadratic(31, 93, 62)
(-1.0, -2.0)
4 thay thế.

Đã trả lời ngày 27 tháng 6 năm 2017 lúc 13:56Jun 27, 2017 at 13:56

Rủi ro duy nhất với việc làm điều đó là nếu bạn đang sử dụng bất kỳ biến toàn cầu nào, phạm vi của biến không có tác động.

Tùy thuộc vào tên biến, có thể khó hiểu khi sử dụng cùng một tên biến, nhưng tôi nghĩ bạn thực sự nên sử dụng bất cứ điều gì có ý nghĩa nhất được đưa ra trong bối cảnh. Vì vậy, ví dụ như trong một cái gì đó như

do_angle_computation(theta):
    return sin(theta) * cos(theta)

theta = 30
print do_angle_computation(theta)

Nó hoàn toàn ổn.

Đã trả lời ngày 27 tháng 6 năm 2017 lúc 13:52Jun 27, 2017 at 13:52

Có, tên của các biến bạn truyền trong một cuộc gọi hàm có thể giống như tên của các tham số trong định nghĩa hàm.

Đối số có thể có cùng tên với tham số trong Python không?

Từ quan điểm cú pháp, không có gì sai với 1 ví dụ. Python tuân theo quy tắc LEGB khi nó cố gắng nhận giá trị biến, vì vậy khi bạn sử dụng thanh làm đối số, bạn viết lại Global Bar trong phạm vi của hàm foo. Hiển thị hoạt động trên bài viết này. Bạn có thể giữ cùng một tên, nó không quan trọng.

    Một chức năng và một biến có thể có cùng tên trong Python?

    Điểm mấu chốt: Bạn không thể có hai thứ đồng thời cùng tên, có thể là hàm, số nguyên hoặc bất kỳ đối tượng nào khác trong Python. Chỉ cần sử dụng một tên khác.

    Điều gì xảy ra nếu tên tham số giống như tên biến?

    Câu trả lời. Khi một tham số có cùng tên với một biến được xác định bên ngoài, thay vì hàm sử dụng biến được xác định bên ngoài, nó sẽ chỉ tham chiếu giá trị được truyền đến tham số. Vì vậy, các tham số sẽ được sử dụng trên các biến cùng tên trong một hàm.Các đối số từ khóa là một trong những tính năng python thường có vẻ hơi kỳ lạ đối với những người chuyển sang Python từ nhiều ngôn ngữ lập trình khác. Nó không giúp mọi người học Python thường khám phá các tính năng khác nhau của các đối số từ khóa từ từ theo thời gian.

    Khi dạy Python, tôi đã thường muốn tôi có một bản tóm tắt về các tính năng liên quan đến đối số từ khóa khác nhau mà tôi có thể liên kết người học. Tôi hy vọng rằng bài viết này sẽ hoàn thành nhiệm vụ đó.

    Trong bài viết này, tôi sẽ giải thích các đối số từ khóa là gì và tại sao họ sử dụng. Sau đó, tôi sẽ xem xét một số cách sử dụng nâng cao hơn của họ mà ngay cả các lập trình viên Python lâu năm cũng có thể đã bỏ qua vì khá nhiều điều đã thay đổi trong các phiên bản gần đây của Python 3. Nếu bạn đã là một lập trình viên Python có kinh nghiệm, bạn có thể muốn Bỏ qua cuối cùng.

    1
    2
    
    5
    Lưu ý: Chúng tôi cũng sử dụng toán tử
    >>> quadratic(a=31, b=93, c=62)
    (-1.0, -2.0)
    
    2 ở đây cho cùng một loại nắm bắt và giải nén các đối số vị trí.

    Vấn đề đặt hàng

    1
    2
    
    >>> quadratic(a=31, b=93, c=62)
    (-1.0, -2.0)
    

    Thứ tự của những đối số này có vấn đề khi chúng được thông qua một vị trí:

    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    0
    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    1

    Nhưng nó không quan trọng khi họ được truyền qua tên của họ:

    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    0
    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    1

    Nhưng nó không quan trọng khi họ được truyền qua tên của họ:

    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    0
    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    1

    Nhưng nó không quan trọng khi họ được truyền qua tên của họ:

    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    3

    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    0
    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    1

    Nhưng nó không quan trọng khi họ được truyền qua tên của họ:

    1
    2
    
    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    3

    Khi chúng ta sử dụng từ khóa/đối số được đặt tên, nó có tên quan trọng, không phải vị trí:

    def foo(_bar): for b in _bar: print (b) bar = ['hello', 'world'] foo(bar) 5

    Vì vậy, không giống như nhiều ngôn ngữ lập trình khác, Python biết tên của các đối số mà chức năng của chúng tôi chấp nhận.

    Nếu chúng tôi yêu cầu trợ giúp về chức năng của mình, Python sẽ cho chúng tôi biết ba đối số của chúng tôi theo tên:

    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    7
    Lưu ý rằng các chức năng có thể được gọi với sự kết hợp giữa các đối số vị trí và được đặt tên:

    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    9

    Điều đó có thể có ích, nhưng với chức năng cụ thể, chúng tôi đã viết ở đây, nó rõ ràng nhất để sử dụng tất cả các đối số vị trí hoặc tất cả các đối số từ khóa.

    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    7
    Lưu ý rằng các chức năng có thể được gọi với sự kết hợp giữa các đối số vị trí và được đặt tên:

    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    9

    Điều đó có thể có ích, nhưng với chức năng cụ thể, chúng tôi đã viết ở đây, nó rõ ràng nhất để sử dụng tất cả các đối số vị trí hoặc tất cả các đối số từ khóa.

    Tại sao sử dụng từ khóa đối số?

    Khi gọi các chức năng trong Python, bạn sẽ thường phải chọn giữa việc sử dụng các đối số từ khóa hoặc đối số vị trí. Đối số từ khóa thường có thể được sử dụng để thực hiện các cuộc gọi chức năng rõ ràng hơn.

    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    7
    Lưu ý rằng các chức năng có thể được gọi với sự kết hợp giữa các đối số vị trí và được đặt tên:

    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    9

    Điều đó có thể có ích, nhưng với chức năng cụ thể, chúng tôi đã viết ở đây, nó rõ ràng nhất để sử dụng tất cả các đối số vị trí hoặc tất cả các đối số từ khóa.

    1. Tại sao sử dụng từ khóa đối số?
    2. Khi gọi các chức năng trong Python, bạn sẽ thường phải chọn giữa việc sử dụng các đối số từ khóa hoặc đối số vị trí. Đối số từ khóa thường có thể được sử dụng để thực hiện các cuộc gọi chức năng rõ ràng hơn.
    3. Lấy mã này:

    def foo(bar): for b in bar: print (b) def main(): bar = ['hello', 'world'] foo(bar) ... 0

    def foo(bar):
        for b in bar:
            print (b)
    
    def main():
        bar = ['hello', 'world']
        foo(bar)
        ...
    
    1

    Điều này lấy một đối tượng tệp

    >>> quadratic(31, 93, 62)
    (-1.0, -2.0)
    
    5 và
    >>> quadratic(31, 93, 62)
    (-1.0, -2.0)
    
    6 và ghi một phiên bản Gzipped của chuỗi vào tệp đầu ra.

    Mã này làm điều tương tự nhưng nó sử dụng các đối số từ khóa thay vì các đối số vị trí:

    1
    2
    
    def foo(bar):
        for b in bar:
            print (b)
    
    def main():
        bar = ['hello', 'world']
        foo(bar)
        ...
    
    3

    Lưu ý rằng sử dụng kiểu cuộc gọi từ khóa này cho thấy rõ hơn những gì mỗi trong ba đối số này đại diện.

    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    7
    Lưu ý rằng các chức năng có thể được gọi với sự kết hợp giữa các đối số vị trí và được đặt tên:

    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    9

    Điều đó có thể có ích, nhưng với chức năng cụ thể, chúng tôi đã viết ở đây, nó rõ ràng nhất để sử dụng tất cả các đối số vị trí hoặc tất cả các đối số từ khóa.

    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    0
    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    1

    Nhưng nó không quan trọng khi họ được truyền qua tên của họ:

    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    3
    Khi chúng ta sử dụng từ khóa/đối số được đặt tên, nó có tên quan trọng, không phải vị trí:

    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    5

    Vì vậy, không giống như nhiều ngôn ngữ lập trình khác, Python biết tên của các đối số mà chức năng của chúng tôi chấp nhận.

    Nếu chúng tôi yêu cầu trợ giúp về chức năng của mình, Python sẽ cho chúng tôi biết ba đối số của chúng tôi theo tên:

    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    7

    Lưu ý rằng các chức năng có thể được gọi với sự kết hợp giữa các đối số vị trí và được đặt tên:
    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    9

    Điều đó có thể có ích, nhưng với chức năng cụ thể, chúng tôi đã viết ở đây, nó rõ ràng nhất để sử dụng tất cả các đối số vị trí hoặc tất cả các đối số từ khóa.: If you haven’t seen that

    >>> quadratic(a=31, b=93, c=62)
    (-1.0, -2.0)
    
    2 syntax before,
    >>> quadratic(a=31, b=93, c=62)
    (-1.0, -2.0)
    
    5 captures all positional arguments given to the
    >>> quadratic(a=31, b=93, c=62)
    (-1.0, -2.0)
    
    6 function into a tuple which the
    >>> quadratic(a=31, b=93, c=62)
    (-1.0, -2.0)
    
    7 variable points to.

    Tại sao sử dụng từ khóa đối số?

    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    3
    Khi chúng ta sử dụng từ khóa/đối số được đặt tên, nó có tên quan trọng, không phải vị trí:

    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    5

    Vì vậy, không giống như nhiều ngôn ngữ lập trình khác, Python biết tên của các đối số mà chức năng của chúng tôi chấp nhận.Nếu chúng tôi yêu cầu trợ giúp về chức năng của mình, Python sẽ cho chúng tôi biết ba đối số của chúng tôi theo tên:

    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    7

    Lưu ý rằng các chức năng có thể được gọi với sự kết hợp giữa các đối số vị trí và được đặt tên:
    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    9

    Điều đó có thể có ích, nhưng với chức năng cụ thể, chúng tôi đã viết ở đây, nó rõ ràng nhất để sử dụng tất cả các đối số vị trí hoặc tất cả các đối số từ khóa.

    Đối số chỉ có từ khóa mà không có đối số vị trí

    Điều gì sẽ xảy ra nếu bạn muốn chấp nhận các đối số chỉ từ khóa mà không chấp nhận các đối số vị trí không giới hạn?

    Nếu bạn muốn chấp nhận các đối số chỉ từ khóa và bạn không sử dụng

    >>> quadratic(a=31, b=93, c=62)
    (-1.0, -2.0)
    
    2 để chấp nhận bất kỳ số lượng đối số vị trí nào, bạn có thể sử dụng
    >>> quadratic(a=31, b=93, c=62)
    (-1.0, -2.0)
    
    2 mà không cần bất cứ điều gì sau đó.

    Ví dụ, ở đây, một phiên bản sửa đổi của chức năng Django từ ____104:

    def foo(bar):
        for b in bar:
            print (b)
    
    def main():
        bar = ['hello', 'world']
        foo(bar)
        ...
    
    0
    1
    2
    3
    4
    5
    6
    
    3

    Không giống như việc triển khai

    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    05 hiện tại của Django, phiên bản này không biết gọi
    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    05 bằng cách chỉ định mọi đối số một cách vị trí. Các đối số
    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    07,
    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    08 và
    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    09 phải được chỉ định bởi
    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    10 của chúng.

    1
    2
    3
    4
    5
    6
    
    1
    2
    3
    4
    5
    6
    
    5

    Giống như với các đối số vị trí không giới hạn, các đối số từ khóa này có thể được yêu cầu. Ở đây, một chức năng với bốn đối số chỉ cần từ khóa cần thiết:

    1
    2
    3
    4
    5
    6
    
    6
    1
    2
    3
    4
    5
    6
    
    7

    Hàm này yêu cầu tất cả các đối số của nó được chỉ định bằng tên của họ:

    1
    2
    3
    4
    5
    6
    
    0
    1
    2
    3
    4
    5
    6
    
    9

    Yêu cầu các đối số được đặt tên có thể thực hiện các cuộc gọi đến chức năng của chúng tôi rõ ràng hơn nhiều.

    Mục đích của cuộc gọi chức năng này:

    from math import sqrt
    
    def quadratic(a, b, c):
        x1 = -b / (2*a)
        x2 = sqrt(b**2 - 4*a*c) / (2*a)
        return (x1 + x2), (x1 - x2)
    
    0
    from math import sqrt
    
    def quadratic(a, b, c):
        x1 = -b / (2*a)
        x2 = sqrt(b**2 - 4*a*c) / (2*a)
        return (x1 + x2), (x1 - x2)
    
    1

    Rõ ràng hơn nhiều so với cái này:

    from math import sqrt
    
    def quadratic(a, b, c):
        x1 = -b / (2*a)
        x2 = sqrt(b**2 - 4*a*c) / (2*a)
        return (x1 + x2), (x1 - x2)
    
    0
    from math import sqrt
    
    def quadratic(a, b, c):
        x1 = -b / (2*a)
        x2 = sqrt(b**2 - 4*a*c) / (2*a)
        return (x1 + x2), (x1 - x2)
    
    1

    Rõ ràng hơn nhiều so với cái này:

    from math import sqrt def quadratic(a, b, c): x1 = -b / (2*a) x2 = sqrt(b**2 - 4*a*c) / (2*a) return (x1 + x2), (x1 - x2) 3

    Một lần nữa lưu ý rằng cú pháp này cũng chỉ hoạt động trong Python 3.

    Nắm bắt các đối số từ khóa tùy ý

    Điều gì sẽ xảy ra nếu bạn muốn viết một hàm ghi lại một số lượng đối số từ khóa tùy ý?Ví dụ: phương thức định dạng chuỗi chấp nhận bất kỳ đối số từ khóa nào bạn đưa ra:

    1
    2
    

    from math import sqrt
    
    def quadratic(a, b, c):
        x1 = -b / (2*a)
        x2 = sqrt(b**2 - 4*a*c) / (2*a)
        return (x1 + x2), (x1 - x2)
    
    5

    1
    2
    3
    4
    5
    6
    
    1
    2
    3
    4
    5
    6
    
    5

    Giống như với các đối số vị trí không giới hạn, các đối số từ khóa này có thể được yêu cầu. Ở đây, một chức năng với bốn đối số chỉ cần từ khóa cần thiết:

    1
    2
    3
    4
    5
    6
    
    6

    Điều gì sẽ xảy ra nếu bạn muốn viết một hàm ghi lại một số lượng đối số từ khóa tùy ý?Ví dụ: phương thức định dạng chuỗi chấp nhận bất kỳ đối số từ khóa nào bạn đưa ra:

    1
    2
    

    from math import sqrt
    
    def quadratic(a, b, c):
        x1 = -b / (2*a)
        x2 = sqrt(b**2 - 4*a*c) / (2*a)
        return (x1 + x2), (x1 - x2)
    
    5

    Làm thế nào bạn có thể viết một chức năng như vậy?

    Python cho phép các chức năng nắm bắt bất kỳ đối số từ khóa nào được cung cấp cho họ bằng toán tử

    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    11 khi xác định chức năng:

    def foo(bar):
        for b in bar:
            print (b)
    
    def main():
        bar = ['hello', 'world']
        foo(bar)
        ...
    
    0
    1
    2
    3
    4
    5
    6
    
    3

    Không giống như việc triển khai

    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    05 hiện tại của Django, phiên bản này không biết gọi
    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    05 bằng cách chỉ định mọi đối số một cách vị trí. Các đối số
    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    07,
    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    08 và
    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    09 phải được chỉ định bởi
    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    10 của chúng.

    1
    2
    3
    4
    5
    6
    

    def foo(bar):
        for b in bar:
            print (b)
    
    def main():
        bar = ['hello', 'world']
        foo(bar)
        ...
    
    0
    1
    2
    3
    4
    5
    6
    
    5

    Giống như với các đối số vị trí không giới hạn, các đối số từ khóa này có thể được yêu cầu. Ở đây, một chức năng với bốn đối số chỉ cần từ khóa cần thiết:

    def foo(bar):
        for b in bar:
            print (b)
    
    def main():
        bar = ['hello', 'world']
        foo(bar)
        ...
    
    0
    1
    2
    3
    4
    5
    6
    
    6

    1
    2
    3
    4
    5
    6
    
    7: We’re also using the
    >>> quadratic(a=31, b=93, c=62)
    (-1.0, -2.0)
    
    2 operator here for the same kind of capturing and unpacking of positional arguments.

    Hàm này yêu cầu tất cả các đối số của nó được chỉ định bằng tên của họ:

    1
    2
    3
    4
    5
    6
    
    0

    1
    2
    3
    4
    5
    6
    
    9

    Điều gì sẽ xảy ra nếu bạn muốn viết một hàm ghi lại một số lượng đối số từ khóa tùy ý?Ví dụ: phương thức định dạng chuỗi chấp nhận bất kỳ đối số từ khóa nào bạn đưa ra:

    1
    2
    

    Điều gì sẽ xảy ra nếu bạn muốn viết một hàm ghi lại một số lượng đối số từ khóa tùy ý?Ví dụ: phương thức định dạng chuỗi chấp nhận bất kỳ đối số từ khóa nào bạn đưa ra:

    1
    2
    

    from math import sqrt
    
    def quadratic(a, b, c):
        x1 = -b / (2*a)
        x2 = sqrt(b**2 - 4*a*c) / (2*a)
        return (x1 + x2), (x1 - x2)
    
    5

    Làm thế nào bạn có thể viết một chức năng như vậy?

    Python cho phép các chức năng nắm bắt bất kỳ đối số từ khóa nào được cung cấp cho họ bằng toán tử

    def foo(_bar):
        for b in _bar:
            print (b)
    
    bar = ['hello', 'world']
    
    foo(bar)
    
    11 khi xác định chức năng:

    from math import sqrt
    
    def quadratic(a, b, c):
        x1 = -b / (2*a)
        x2 = sqrt(b**2 - 4*a*c) / (2*a)
        return (x1 + x2), (x1 - x2)
    
    7

    Toán tử def foo(_bar): for b in _bar: print (b) bar = ['hello', 'world'] foo(bar) 11 đó sẽ cho phép chức năng def foo(_bar): for b in _bar: print (b) bar = ['hello', 'world'] foo(bar) 13 của chúng tôi chấp nhận bất kỳ số lượng đối số từ khóa nào. Các đối số đã cho sẽ được lưu trữ trong một từ điển gọi là def foo(_bar): for b in _bar: print (b) bar = ['hello', 'world'] foo(bar) 14.

    Ở đây, một ví dụ sử dụng chức năng của chúng tôi:level up your Python skills and get practice using Python-specific features, like keyword arguments, sign up for Python Morsels below.

    Các tham số chức năng có thể có cùng tên không?

    Có, tên của các biến bạn truyền trong một cuộc gọi hàm có thể giống như tên của các tham số trong định nghĩa hàm..

    Đối số có thể có cùng tên với tham số trong Python không?

    Từ quan điểm cú pháp, không có gì sai với 1 ví dụ.Python tuân theo quy tắc LEGB khi nó cố gắng nhận giá trị biến, vì vậy khi bạn sử dụng thanh làm đối số, bạn viết lại Global Bar trong phạm vi của hàm foo.Hiển thị hoạt động trên bài viết này.Bạn có thể giữ cùng một tên, nó không quan trọng.You can keep the same name, it doesn't matter.

    Một chức năng và một biến có thể có cùng tên trong Python?

    Điểm mấu chốt: Bạn không thể có hai thứ đồng thời cùng tên, có thể là hàm, số nguyên hoặc bất kỳ đối tượng nào khác trong Python.Chỉ cần sử dụng một tên khác.you can't have two things simultaneously with the same name, be it a function, an integer, or any other object in Python. Just use a different name.

    Điều gì xảy ra nếu tên tham số giống như tên biến?

    Câu trả lời.Khi một tham số có cùng tên với một biến được xác định bên ngoài, thay vì hàm sử dụng biến được xác định bên ngoài, nó sẽ chỉ tham chiếu giá trị được truyền đến tham số.Vì vậy, các tham số sẽ được sử dụng trên các biến cùng tên trong một hàm.it will only reference the value that was passed to the parameter. So, parameters will be used over variables of the same name within a function.