Python gọi nhiều chức năng trong một dòng

Có thể khai báo các hàm nhận số lượng đối số thay đổi, sử dụng cú pháp sau

def foo[first, second, third, *therest]:
    print["First: %s" % first]
    print["Second: %s" % second]
    print["Third: %s" % third]
    print["And all the rest.. %s" % list[therest]]

Biến "therest" là một danh sách các biến, nó nhận tất cả các đối số được cấp cho hàm "foo" sau 3 đối số đầu tiên. Vì vậy, gọi

def bar[first, second, third, **options]:
    if options.get["action"] == "sum":
        print["The sum is: %d" %[first + second + third]]

    if options.get["number"] == "first":
        return first

result = bar[1, 2, 3, action = "sum", number = "first"]
print["Result: %d" %[result]]
2 sẽ in ra

def foo[first, second, third, *therest]:
    print["First: %s" %[first]]
    print["Second: %s" %[second]]
    print["Third: %s" %[third]]
    print["And all the rest.. %s" %[list[therest]]]

foo[1, 2, 3, 4, 5]

Cũng có thể gửi các đối số của hàm theo từ khóa, do đó thứ tự của đối số không quan trọng, sử dụng cú pháp sau. Đoạn mã sau mang lại đầu ra sau.

def bar[first, second, third, **options]:
    if options.get["action"] == "sum":
        print["The sum is: %d" %[first + second + third]]

    if options.get["number"] == "first":
        return first

result = bar[1, 2, 3, action = "sum", number = "first"]
print["Result: %d" %[result]]
3

def bar[first, second, third, **options]:
    if options.get["action"] == "sum":
        print["The sum is: %d" %[first + second + third]]

    if options.get["number"] == "first":
        return first

result = bar[1, 2, 3, action = "sum", number = "first"]
print["Result: %d" %[result]]

Hàm "bar" nhận 3 đối số. Nếu nhận được một đối số "hành động" bổ sung và nó hướng dẫn tính tổng các số, thì tổng sẽ được in ra. Ngoài ra, hàm cũng biết nó phải trả về đối số đầu tiên, nếu giá trị của tham số "số", được truyền vào hàm, bằng "đầu tiên"

Tập thể dục

Điền vào các hàm

def bar[first, second, third, **options]:
    if options.get["action"] == "sum":
        print["The sum is: %d" %[first + second + third]]

    if options.get["number"] == "first":
        return first

result = bar[1, 2, 3, action = "sum", number = "first"]
print["Result: %d" %[result]]
4 và
def bar[first, second, third, **options]:
    if options.get["action"] == "sum":
        print["The sum is: %d" %[first + second + third]]

    if options.get["number"] == "first":
        return first

result = bar[1, 2, 3, action = "sum", number = "first"]
print["Result: %d" %[result]]
5 để chúng có thể nhận được số lượng đối số thay đổi [3 hoặc nhiều hơn] Hàm
def bar[first, second, third, **options]:
    if options.get["action"] == "sum":
        print["The sum is: %d" %[first + second + third]]

    if options.get["number"] == "first":
        return first

result = bar[1, 2, 3, action = "sum", number = "first"]
print["Result: %d" %[result]]
4 phải trả về số lượng đối số bổ sung nhận được.
def bar[first, second, third, **options]:
    if options.get["action"] == "sum":
        print["The sum is: %d" %[first + second + third]]

    if options.get["number"] == "first":
        return first

result = bar[1, 2, 3, action = "sum", number = "first"]
print["Result: %d" %[result]]
5 phải trả về
def foo[first, second, third, *therest]:
    print["First: %s" % first]
    print["Second: %s" % second]
    print["Third: %s" % third]
    print["And all the rest.. %s" % list[therest]]
0 nếu đối số có từ khóa
def foo[first, second, third, *therest]:
    print["First: %s" % first]
    print["Second: %s" % second]
    print["Third: %s" % third]
    print["And all the rest.. %s" % list[therest]]
1 có giá trị 7 và ngược lại là
def foo[first, second, third, *therest]:
    print["First: %s" % first]
    print["Second: %s" % second]
    print["Third: %s" % third]
    print["And all the rest.. %s" % list[therest]]
2

Bản tóm tắt. Cách Pythonic nhất để xác định hàm trong một dòng là [1] tạo hàm lambda ẩn danh và [2] gán đối tượng hàm cho một tên biến. Sau đó, bạn có thể gọi hàm theo tên giống như bất kỳ hàm được xác định thường xuyên nào khác. Ví dụ: câu lệnh

def bar[first, second, third, **options]:
    if options.get["action"] == "sum":
        print["The sum is: %d" %[first + second + third]]

    if options.get["number"] == "first":
        return first

result = bar[1, 2, 3, action = "sum", number = "first"]
print["Result: %d" %[result]]
8 tạo một hàm
def bar[first, second, third, **options]:
    if options.get["action"] == "sum":
        print["The sum is: %d" %[first + second + third]]

    if options.get["number"] == "first":
        return first

result = bar[1, 2, 3, action = "sum", number = "first"]
print["Result: %d" %[result]]
9 tăng đối số
def foo[first, second, third, *therest]:
    print["First: %s" % first]
    print["Second: %s" % second]
    print["Third: %s" % third]
    print["And all the rest.. %s" % list[therest]]
0 lên một và trả về kết quả.
def foo[first, second, third, *therest]:
    print["First: %s" % first]
    print["Second: %s" % second]
    print["Third: %s" % third]
    print["And all the rest.. %s" % list[therest]]
1 trả về
def foo[first, second, third, *therest]:
    print["First: %s" % first]
    print["Second: %s" % second]
    print["Third: %s" % third]
    print["And all the rest.. %s" % list[therest]]
2

[Nguy hiểm] Cách tin tặc gói tập lệnh độc hại vào một dòng mã Python


Xem video này trên YouTube

Vấn đề. Làm cách nào để xác định hàm trong một dòng mã Python?

Thí dụ. Giả sử, bạn muốn viết hàm sau trong một dòng mã

def f[x]:
    return str[x * 3] + '!'

print[f[1]]
# 3!

print[f['python']]
# pythonpythonpython!

Trước tiên, hãy xem tổng quan nhanh về cách thực hiện điều này

Tập thể dục. Thay đổi các hàm một dòng để trả về phiên bản chữ hoa của chuỗi được tạo bằng cách sử dụng hàm

def f1[x]: return str[x * 3] + '!'

print[f1[1]]
print[f1['python']]
0. Sau đó chạy mã để xem đầu ra của bạn có đúng không

Phương pháp 1. Định nghĩa một dòng

Cách đầu tiên và đơn giản nhất để xác định hàm trong một dòng là chỉ cần xóa dấu ngắt dòng

def f1[x]: return str[x * 3] + '!'

print[f1[1]]
print[f1['python']]

Định nghĩa hàm giống với định nghĩa ban đầu với một điểm khác biệt. bạn đã xóa dòng mới và thụt đầu dòng khỏi định nghĩa. Mặc dù cách này hoạt động với các hàm có nội dung hàm một dòng, nhưng bạn có thể dễ dàng mở rộng nó bằng cách sử dụng dấu chấm phẩy làm dấu phân cách

>>> def fxx[]: x=1; x=2; return x
>>> fxx[]
2

Chắc chắn, khả năng đọc sẽ bị ảnh hưởng nếu bạn đang làm điều này nhưng bạn vẫn nên biết cú pháp trong trường hợp bạn thấy mã như thế này trong một dự án mã thực tế [bạn sẽ biết]

Phương pháp 2. Hàm Lambda

Hàm lambda là một hàm ẩn danh trong Python. Nó bắt đầu bằng từ khóa

def f1[x]: return str[x * 3] + '!'

print[f1[1]]
print[f1['python']]
1, tiếp theo là danh sách không hoặc nhiều đối số được phân tách bằng dấu phẩy, tiếp theo là dấu hai chấm và biểu thức trả về. Ví dụ:
def f1[x]: return str[x * 3] + '!'

print[f1[1]]
print[f1['python']]
2 sẽ tính tổng của ba giá trị đối số
def f1[x]: return str[x * 3] + '!'

print[f1[1]]
print[f1['python']]
3

Nếu bạn cần tìm hiểu thêm về hàm lambda, hãy xem hướng dẫn cơ bản của chúng tôi trên blog này

Đây là cách Pythonic nhất để viết một hàm trong một dòng mã

def foo[first, second, third, *therest]:
    print["First: %s" %[first]]
    print["Second: %s" %[second]]
    print["Third: %s" %[third]]
    print["And all the rest.. %s" %[list[therest]]]

foo[1, 2, 3, 4, 5]
3

Bạn tạo một hàm lambda và gán đối tượng hàm mới cho biến

def f1[x]: return str[x * 3] + '!'

print[f1[1]]
print[f1['python']]
4. Biến này hiện có thể được sử dụng giống như bất kỳ tên hàm nào khác được xác định trong định nghĩa hàm thông thường

Phương pháp 3. giám đốc điều hành []

Bây giờ, chúng ta hãy trở nên đơn giản nhất có thể, phải không? . Sau đó, nó thực thi mã được xác định trong đối số chuỗi. Kết hợp với ký tự nhiều dòng

def f1[x]: return str[x * 3] + '!'

print[f1[1]]
print[f1['python']]
6, điều này cho phép bạn chạy tất cả các đoạn mã nhiều dòng phức tạp trong một dòng. Tin tặc thường sử dụng kỹ thuật này để nhồi nhét các tập lệnh độc hại trong một dòng mã Python dường như vô hại. Mạnh mẽ, tôi biết

def foo[first, second, third, *therest]:
    print["First: %s" %[first]]
    print["Second: %s" %[second]]
    print["Third: %s" %[third]]
    print["And all the rest.. %s" %[list[therest]]]

foo[1, 2, 3, 4, 5]
7

Chuỗi

def f1[x]: return str[x * 3] + '!'

print[f1[1]]
print[f1['python']]
7 chứa định nghĩa hàm hai dòng của hàm ban đầu của chúng ta là
def bar[first, second, third, **options]:
    if options.get["action"] == "sum":
        print["The sum is: %d" %[first + second + third]]

    if options.get["number"] == "first":
        return first

result = bar[1, 2, 3, action = "sum", number = "first"]
print["Result: %d" %[result]]
9. Sau đó, bạn nối chuỗi này với một dòng mới để in kết quả của việc chạy hàm mới tạo này trong tập lệnh của mình bằng cách chuyển các đối số tùy ý vào đó

Câu hỏi liên quan

Có thể viết câu lệnh if-then-else trong một dòng mã không?

Có, bạn có thể viết hầu hết các câu lệnh if trong một dòng Python bằng cách sử dụng bất kỳ phương thức nào sau đây

  1. Viết câu lệnh if không có nhánh khác dưới dạng một lớp lót Python.
    def f1[x]: return str[x * 3] + '!'
    
    print[f1[1]]
    print[f1['python']]
    9
  2. Nếu bạn muốn đặt một biến, hãy sử dụng toán tử bậc ba.
    >>> def fxx[]: x=1; x=2; return x
    >>> fxx[]
    2
    0
  3. Nếu bạn muốn thực thi một hàm có điều kiện, vẫn sử dụng toán tử bậc ba.
    >>> def fxx[]: x=1; x=2; return x
    >>> fxx[]
    2
    1

Đọc thêm. If-Then-Else trong Python một dòng [Video + Vỏ mã tương tác]

Sách Python One-Liners. Làm chủ một dòng đầu tiên

Các lập trình viên Python sẽ cải thiện các kỹ năng khoa học máy tính của họ với những lời khuyên hữu ích này

Python One-Liners sẽ dạy bạn cách đọc và viết “one-liners”. tuyên bố ngắn gọn về chức năng hữu ích được gói gọn trong một dòng mã. Bạn sẽ học cách giải nén một cách có hệ thống và hiểu bất kỳ dòng mã Python nào, đồng thời viết Python được nén mạnh mẽ, hùng hồn như một chuyên gia

Năm chương của cuốn sách bao gồm [1] mẹo và thủ thuật, [2] biểu thức chính quy, [3] học máy, [4] chủ đề khoa học dữ liệu cốt lõi và [5] thuật toán hữu ích

Giải thích chi tiết về một lớp giới thiệu các khái niệm khoa học máy tính quan trọng và nâng cao kỹ năng mã hóa và phân tích của bạn. Bạn sẽ tìm hiểu về các tính năng nâng cao của Python như khả năng hiểu danh sách, cắt lớp, hàm lambda, biểu thức chính quy, hàm ánh xạ và rút gọn cũng như các bài tập cắt lát

Bạn cũng sẽ học cách

  • Tận dụng cấu trúc dữ liệu để giải quyết các vấn đề trong thế giới thực, chẳng hạn như sử dụng lập chỉ mục Boolean để tìm các thành phố có ô nhiễm trên mức trung bình
  • Sử dụng các khái niệm cơ bản về NumPy như mảng, hình dạng, trục, loại, phát sóng, lập chỉ mục nâng cao, cắt, sắp xếp, tìm kiếm, tổng hợp và thống kê
  • Tính toán số liệu thống kê cơ bản của mảng dữ liệu đa chiều và thuật toán K-Means cho học không giám sát
  • Tạo các biểu thức chính quy nâng cao hơn bằng cách sử dụng nhóm và nhóm được đặt tên, giao diện phủ định, ký tự thoát, khoảng trắng, bộ ký tự [và bộ ký tự phủ định] và toán tử tham lam/không tham lam
  • Hiểu một loạt các chủ đề khoa học máy tính, bao gồm đảo chữ cái, đối xứng, siêu bộ, hoán vị, giai thừa, số nguyên tố, số Fibonacci, xáo trộn, tìm kiếm và sắp xếp theo thuật toán

Đến cuối cuốn sách, bạn sẽ biết cách viết Python ở mức tinh tế nhất và tạo ra những tác phẩm “nghệ thuật Python” ngắn gọn, đẹp mắt chỉ trong một dòng

Nhận Python One-Liners của bạn trên Amazon

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

Bạn có thể sử dụng nhiều chức năng trong một dòng Python không?

Có, bạn có thể gọi nhiều phương thức, lần lượt từng phương thức trong cùng một câu lệnh . Điều này đôi khi được gọi là "xâu chuỗi phương pháp". Khi bạn xâu chuỗi các phương thức, nó sẽ áp dụng từng phương thức từ trái sang phải.

Bạn có thể kết hợp các phương thức trong Python không?

Có mười kết hợp phương thức tích hợp sẵn và bạn có thể xác định phương thức của riêng mình bằng cách sử dụng kết hợp phương thức xác định

Chủ Đề