Truyền danh sách cho hàm trong Python

Bạn đang nói với nó rằng bạn mong đợi một số lượng đối số thay đổi. Nếu bạn muốn chuyển vào Danh sách (Mảng từ các ngôn ngữ khác), bạn sẽ làm điều gì đó như thế này

def someFunc(myList = [], *args):
    for x in myList:
        print x

Sau đó, bạn có thể gọi nó với điều này

items = [1,2,3,4,5]

someFunc(items)

Bạn cần xác định đối số được đặt tên trước đối số biến và đối số biến trước đối số từ khóa. Bạn cũng có thể có cái này

def someFunc(arg1, arg2, arg3, *args, **kwargs):
    for x in args
        print x

Yêu cầu ít nhất ba đối số và hỗ trợ số lượng biến của các đối số và đối số từ khóa khác

Nếu chúng ta chuyển danh sách dưới dạng tham số cho một hàm và thay đổi tham số, thì danh sách ban đầu cũng bị thay đổi. Điều này là do danh sách là một loại có thể thay đổi, khi chúng ta chuyển danh sách cho một hàm, chúng ta sẽ chuyển cùng một danh sách

def my_fun(my_list):
    my_list.append(1)

    return my_list


x = [1, 2, 3]
y = my_fun(x)

print(f"x: {x}, y: {y}")
# x, y are both [1, 2, 3, 1]

Làm cách nào chúng tôi có thể chuyển "giá trị" của danh sách này thay vì "tham chiếu" của nó?

  • cắt lát. my_fun(x[:])
  • danh sách(). my_fun(list(x))
  • list.copy(). my_fun(x.copy())
  • copy.copy(). my_fun(copy.copy(x))
  • copy.deepcopy(). my_fun(copy.deepcopy(x))

Bốn cách đầu tiên chỉ tạo một bản sao nông của danh sách gốc. Chúng chỉ hoạt động đối với danh sách đơn giản bao gồm các loại không thay đổi, ví dụ: danh sách int. Nếu bản thân phần tử danh sách là loại có thể thay đổi, chúng sẽ không hoạt động

Trong Python, việc gửi một danh sách tới một hàm cũng giống như chuyển bất kỳ dạng dữ liệu nào khác. Hãy khám phá thêm một chút về chủ đề này

Chúng ta sẽ định nghĩa một hàm testing với một tham số duy nhất, flavor. Sau đó, chúng tôi chuyển một đối số có tên là Cherry trong khi gọi hàm

Đối số này chuyển đến biến tham số flavor, sau đó hàm có thể sử dụng. Xem ví dụ bên dưới

Mã số

def testing(flavor):
    print("You chose:", flavor)

testing("Cherry")

đầu ra

Truyền danh sách cho hàm Python giống như bất kỳ loại dữ liệu nào khác

Danh sách Python giống như bất kỳ đối tượng Python nào khác mà chúng ta có thể chuyển vào một hàm dưới dạng một biến đơn giản. Chúng ta có một hàm

def enjoy(hobbies): #or def enjoy(hobbies=[]):
    for hobby in hobbies:
        print(hobby)

hobbies_list = ['art', 'dance', 'sing']
enjoy(hobbies_list)
0 với tham số
def enjoy(hobbies): #or def enjoy(hobbies=[]):
    for hobby in hobbies:
        print(hobby)

hobbies_list = ['art', 'dance', 'sing']
enjoy(hobbies_list)
1 trong mẫu mã bên dưới

Bên ngoài khối chức năng, chúng tôi xác định một danh sách

def enjoy(hobbies): #or def enjoy(hobbies=[]):
    for hobby in hobbies:
        print(hobby)

hobbies_list = ['art', 'dance', 'sing']
enjoy(hobbies_list)
2. Trong khi gọi hàm
def enjoy(hobbies): #or def enjoy(hobbies=[]):
    for hobby in hobbies:
        print(hobby)

hobbies_list = ['art', 'dance', 'sing']
enjoy(hobbies_list)
0, chúng ta chuyển biến này,
def enjoy(hobbies): #or def enjoy(hobbies=[]):
    for hobby in hobbies:
        print(hobby)

hobbies_list = ['art', 'dance', 'sing']
enjoy(hobbies_list)
2, làm đối số

Danh sách này chuyển đến biến tham số

def enjoy(hobbies): #or def enjoy(hobbies=[]):
    for hobby in hobbies:
        print(hobby)

hobbies_list = ['art', 'dance', 'sing']
enjoy(hobbies_list)
1, và do đó, hàm có thể sử dụng giá trị của danh sách này

Mã số

def enjoy(hobbies): #or def enjoy(hobbies=[]):
    for hobby in hobbies:
        print(hobby)

hobbies_list = ['art', 'dance', 'sing']
enjoy(hobbies_list)

đầu ra

Xem cách hàm

def enjoy(hobbies): #or def enjoy(hobbies=[]):
    for hobby in hobbies:
        print(hobby)

hobbies_list = ['art', 'dance', 'sing']
enjoy(hobbies_list)
0 nhận giá trị của danh sách và vòng lặp
def enjoy(hobbies): #or def enjoy(hobbies=[]):
    for hobby in hobbies:
        print(hobby)

hobbies_list = ['art', 'dance', 'sing']
enjoy(hobbies_list)
7 bên trong nó in tất cả các mục trong danh sách. Đôi khi, bạn cũng sẽ thấy việc gán dấu ngoặc vuông
def enjoy(hobbies): #or def enjoy(hobbies=[]):
    for hobby in hobbies:
        print(hobby)

hobbies_list = ['art', 'dance', 'sing']
enjoy(hobbies_list)
8 cho biến tham số trong khi truyền danh sách cho hàm

Sự khác biệt giữa Truyền và Giải nén Danh sách trong Python

Trong Python, chúng ta có thể sử dụng

def enjoy(hobbies): #or def enjoy(hobbies=[]):
    for hobby in hobbies:
        print(hobby)

hobbies_list = ['art', 'dance', 'sing']
enjoy(hobbies_list)
9 để truyền một số đối số có thể thay đổi cho một hàm. Bây giờ, vì một danh sách có nhiều giá trị, mọi người có xu hướng sử dụng
def enjoy(hobbies): #or def enjoy(hobbies=[]):
    for hobby in hobbies:
        print(hobby)

hobbies_list = ['art', 'dance', 'sing']
enjoy(hobbies_list)
9 làm biến tham số cho một đối số danh sách để tất cả các giá trị của danh sách được xử lý

Khi chúng ta xác định

def enjoy(hobbies): #or def enjoy(hobbies=[]):
    for hobby in hobbies:
        print(hobby)

hobbies_list = ['art', 'dance', 'sing']
enjoy(hobbies_list)
9 là biến tham số, chúng ta ra hiệu cho hàm đợi một số biến đối số. Truyền các phần tử của danh sách dưới dạng nhiều đối số tương tự như giải nén danh sách

Mã số

def subjects(*args):
    for subject in args:
        print("The subject name is ",subject)

names = ['mathematics', 'science', 'history']
subjects(names)

đầu ra

The subject name is  ['mathematics', 'science', 'history']

Bạn sẽ thấy sự khác biệt tốt hơn nếu bạn so sánh đầu ra này với đoạn mã dưới đây

Mã số

def subjects(args):
    for subject in args:
        print("The subject name is ", subject)

names = ['mathematics', 'science', 'history']
subjects(names)

đầu ra

The subject name is  mathematics
The subject name is  science
The subject name is  history

Lưu ý cách đầu ra thay đổi dựa trên

def enjoy(hobbies): #or def enjoy(hobbies=[]):
    for hobby in hobbies:
        print(hobby)

hobbies_list = ['art', 'dance', 'sing']
enjoy(hobbies_list)
9. Nếu sử dụng
def enjoy(hobbies): #or def enjoy(hobbies=[]):
    for hobby in hobbies:
        print(hobby)

hobbies_list = ['art', 'dance', 'sing']
enjoy(hobbies_list)
9 để chuyển danh sách tới hàm Python, chúng tôi có thể không nhận được kết quả như mong đợi

Do đó, điều quan trọng là chọn cú pháp thích hợp dựa trên các yêu cầu

Phần kết luận

Trong bài viết này, chúng ta đã tìm hiểu về cách chuyển danh sách tới hàm trong Python. Chúng tôi đã thấy cách chúng tôi có thể chuyển một danh sách tới một hàm trong Python giống như chúng tôi chuyển bất kỳ loại dữ liệu nào khác

Bạn có thể chuyển một danh sách tới một hàm trong Python không?

Bạn có thể gửi bất kỳ loại dữ liệu nào của đối số tới một hàm (chuỗi, số, danh sách, từ điển, v.v. ) và nó sẽ được coi là cùng kiểu dữ liệu bên trong hàm.

Danh sách được truyền bằng Python như thế nào?

Nó được thông qua bởi giá trị tham chiếu . Vì vậy, các sửa đổi đối với đối tượng có thể được nhìn thấy bên ngoài chức năng, nhưng việc gán biến cho một đối tượng mới không thay đổi bất cứ điều gì bên ngoài chức năng. Về cơ bản, nó giống như truyền một con trỏ trong C hoặc một kiểu tham chiếu trong Java.