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?: Show
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.
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 0 làm đối số, bạn viết lại toàn cầu 0 trong phạm vi hàm 2.Đã trả lời ngày 27 tháng 6 năm 2017 lúc 13:53Jun 27, 2017 at 13:53
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:
Điều đáng nói là điều đáng nói là trong ví dụ thứ hai của bạn, 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: 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ư
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?
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.
Vấn đề đặt hàng
Thứ tự của những đối số này có vấn đề khi chúng được thông qua một vị trí:
Nhưng nó không quan trọng khi họ được truyền qua tên của họ:
Nhưng nó không quan trọng khi họ được truyền qua tên của họ:
Nhưng nó không quan trọng khi họ được truyền qua tên của họ: 3
Nhưng nó không quan trọng khi họ được truyền qua tên của họ:
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) 5Vì 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:
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.
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.
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) def main(): bar = ['hello', 'world'] foo(bar) ... 0 1Điều này lấy một đối tượng tệp 5 và 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í:
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.
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.
Nhưng nó không quan trọng khi họ được truyền qua tên của họ:
5Vì 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: 7
Đ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 2 syntax before, 5 captures all positional arguments given to the 6 function into a tuple which the 7 variable points to.Tại sao sử dụng từ khóa đối số?
5
7
Đ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 2 để chấp nhận bất kỳ số lượng đối số vị trí nào, bạn có thể sử dụng 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:
Không giống như việc triển khai 05 hiện tại của Django, phiên bản này không biết gọi 05 bằng cách chỉ định mọi đối số một cách vị trí. Các đối số 07, 08 và 09 phải được chỉ định bởi 10 của chúng.
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:
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ọ:
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:
Rõ ràng hơn nhiều so với cái này:
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) 3Mộ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 ý
1 2 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 66
|
0 | 1 2 3 4 5 63 |
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
0 | 1 2 3 4 5 65 |
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:
0 | 1 2 3 4 5 66 |
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 60
1 2 3 4 5 69
Đ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)
5Là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)
7Toá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.