Làm thế nào để bạn có được các đối số từ khóa trong python?

Tốt hơn một chút so với việc kiểm tra trực tiếp đối tượng mã và tìm ra các biến là sử dụng mô-đun kiểm tra

>>> import inspect
>>> def func[a,b,c=42, *args, **kwargs]: pass
>>> inspect.getargspec[func]
[['a', 'b', 'c'], 'args', 'kwargs', [42,]]

Nếu bạn muốn biết liệu nó có thể gọi được với một nhóm đối số cụ thể hay không, bạn cần có các đối số mà không có mặc định đã được chỉ định. Đây có thể được nhận bởi

def get_required_args[func]:
    args, varargs, varkw, defaults = inspect.getargspec[func]
    if defaults:
        args = args[:-len[defaults]]
    return args   # *args and **kwargs are not required, so ignore them.

Sau đó, một chức năng để cho biết những gì bạn đang thiếu từ chính tả cụ thể của bạn là

def missing_args[func, argdict]:
    return set[get_required_args[func]].difference[argdict]

Tương tự, để kiểm tra các đối số không hợp lệ, hãy sử dụng

def invalid_args[func, argdict]:
    args, varargs, varkw, defaults = inspect.getargspec[func]
    if varkw: return set[]  # All accepted
    return set[argdict] - set[args]

Và do đó, một bài kiểm tra đầy đủ nếu nó có thể gọi được là

def is_callable_with_args[func, argdict]:
    return not missing_args[func, argdict] and not invalid_args[func, argdict]

[Điều này chỉ tốt khi phân tích cú pháp arg của python. Mọi kiểm tra thời gian chạy cho các giá trị không hợp lệ trong

def is_callable_with_args[func, argdict]:
    return not missing_args[func, argdict] and not invalid_args[func, argdict]
9 rõ ràng là không thể phát hiện được. ]

Bản tóm tắt. trong hướng dẫn này, bạn sẽ tìm hiểu về các đối số từ khóa Python và cách sử dụng chúng để gọi hàm rõ ràng hơn

Giới thiệu về đối số từ khóa Python

Hãy bắt đầu với một hàm đơn giản tính giá ròng từ giá bán và chiết khấu

def get_net_price[price, discount]: return price * [1-discount]

Code language: Python [python]

Hàm

90.0

Code language: Python [python]
1 có hai tham số.

90.0

Code language: Python [python]
2 và

90.0

Code language: Python [python]
3

Sau đây trình bày cách gọi hàm

90.0

Code language: Python [python]
1 để tính giá ròng từ giá

90.0

Code language: Python [python]
5 và chiết khấu

90.0

Code language: Python [python]
6

def get_required_args[func]:
    args, varargs, varkw, defaults = inspect.getargspec[func]
    if defaults:
        args = args[:-len[defaults]]
    return args   # *args and **kwargs are not required, so ignore them.
2

đầu ra

90.0

Code language: Python [python]

Trong lệnh gọi hàm

90.0

Code language: Python [python]
7, chúng tôi chuyển từng đối số dưới dạng đối số vị trí. Nói cách khác, chúng tôi chuyển đối số

90.0

Code language: Python [python]
2 trước và đối số

90.0

Code language: Python [python]
3 thứ hai

Tuy nhiên, lệnh gọi hàm

90.0

Code language: Python [python]
7 có vấn đề về khả năng đọc. Bởi vì chỉ nhìn vào lệnh gọi hàm đó, bạn không biết đối số nào là

90.0

Code language: Python [python]
2 và đối số nào là

90.0

Code language: Python [python]
3

Ngoài ra, khi gọi hàm

90.0

Code language: Python [python]
1, bạn cần biết vị trí của từng đối số

Nếu không, hàm sẽ tính sai

def missing_args[func, argdict]:
    return set[get_required_args[func]].difference[argdict]
14. Ví dụ

def missing_args[func, argdict]:
    return set[get_required_args[func]].difference[argdict]
1

đầu ra

def missing_args[func, argdict]:
    return set[get_required_args[func]].difference[argdict]
3

Để cải thiện khả năng đọc, Python giới thiệu các đối số từ khóa

Sau đây cho thấy cú pháp đối số từ khóa

def missing_args[func, argdict]:
    return set[get_required_args[func]].difference[argdict]
4

Bằng cách sử dụng cú pháp đối số từ khóa, bạn không cần chỉ định các đối số theo thứ tự như đã xác định trong hàm

Do đó, bạn có thể gọi một hàm bằng cách hoán đổi vị trí đối số như thế này

def missing_args[func, argdict]:
    return set[get_required_args[func]].difference[argdict]
5

Phần sau đây trình bày cách sử dụng cú pháp đối số từ khóa để gọi hàm

90.0

Code language: Python [python]
1

def missing_args[func, argdict]:
    return set[get_required_args[func]].difference[argdict]
7

Hoặc

def missing_args[func, argdict]:
    return set[get_required_args[func]].difference[argdict]
8

Cả hai đều trả về cùng một kết quả

Khi bạn sử dụng các đối số từ khóa, tên của chúng mới quan trọng chứ không phải vị trí của chúng

Lưu ý rằng bạn có thể gọi một hàm bằng cách trộn các đối số vị trí và từ khóa. Ví dụ

def missing_args[func, argdict]:
    return set[get_required_args[func]].difference[argdict]
9

Đối số từ khóa và tham số mặc định

Giả sử bạn có hàm

90.0

Code language: Python [python]
1 sau để tính giá ròng từ giá bán, thuế và chiết khấu

def get_required_args[func]:
    args, varargs, varkw, defaults = inspect.getargspec[func]
    if defaults:
        args = args[:-len[defaults]]
    return args   # *args and **kwargs are not required, so ignore them.
20

Trong hàm

90.0

Code language: Python [python]
1, tham số tax và discount có giá trị mặc định lần lượt là
def missing_args[func, argdict]:
    return set[get_required_args[func]].difference[argdict]
18 và
def missing_args[func, argdict]:
    return set[get_required_args[func]].difference[argdict]
19

Sau đây gọi hàm

90.0

Code language: Python [python]
1 và sử dụng các giá trị mặc định cho tham số
def missing_args[func, argdict]:
    return set[get_required_args[func]].difference[argdict]
31 và

90.0

Code language: Python [python]
3

def get_required_args[func]:
    args, varargs, varkw, defaults = inspect.getargspec[func]
    if defaults:
        args = args[:-len[defaults]]
    return args   # *args and **kwargs are not required, so ignore them.
21

đầu ra

def get_required_args[func]:
    args, varargs, varkw, defaults = inspect.getargspec[func]
    if defaults:
        args = args[:-len[defaults]]
    return args   # *args and **kwargs are not required, so ignore them.
22

Giả sử bạn muốn sử dụng giá trị mặc định cho tham số

def missing_args[func, argdict]:
    return set[get_required_args[func]].difference[argdict]
31 chứ không phải

90.0

Code language: Python [python]
3. Cuộc gọi chức năng sau không hoạt động chính xác

def get_required_args[func]:
    args, varargs, varkw, defaults = inspect.getargspec[func]
    if defaults:
        args = args[:-len[defaults]]
    return args   # *args and **kwargs are not required, so ignore them.
23

… vì Python sẽ gán

90.0

Code language: Python [python]
5 cho giá và
def missing_args[func, argdict]:
    return set[get_required_args[func]].difference[argdict]
36 cho thuế chứ không phải chiết khấu

Để khắc phục điều này, bạn phải sử dụng đối số từ khóa

def get_required_args[func]:
    args, varargs, varkw, defaults = inspect.getargspec[func]
    if defaults:
        args = args[:-len[defaults]]
    return args   # *args and **kwargs are not required, so ignore them.
24

đầu ra

def get_required_args[func]:
    args, varargs, varkw, defaults = inspect.getargspec[func]
    if defaults:
        args = args[:-len[defaults]]
    return args   # *args and **kwargs are not required, so ignore them.
25

Hoặc bạn có thể kết hợp các đối số vị trí và từ khóa

def get_required_args[func]:
    args, varargs, varkw, defaults = inspect.getargspec[func]
    if defaults:
        args = args[:-len[defaults]]
    return args   # *args and **kwargs are not required, so ignore them.
26

đầu ra

def get_required_args[func]:
    args, varargs, varkw, defaults = inspect.getargspec[func]
    if defaults:
        args = args[:-len[defaults]]
    return args   # *args and **kwargs are not required, so ignore them.
25

Yêu cầu đối số từ khóa Python

Khi bạn sử dụng đối số từ khóa, bạn cần sử dụng đối số từ khóa cho các tham số còn lại

Điều sau đây sẽ dẫn đến lỗi vì nó sử dụng đối số vị trí sau đối số từ khóa

Chủ Đề