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 xSau đó, 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 xYê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