Hướng dẫn can you pass a variable to a function in python? - bạn có thể chuyển một biến cho một hàm trong python không?

Tôi muốn truyền các giá trị [dưới dạng biến] giữa các hàm khác nhau.

Ví dụ: tôi gán các giá trị cho một danh sách trong một hàm, sau đó tôi muốn sử dụng danh sách đó trong một chức năng khác:

list = []

def defineAList[]:
    list = ['1','2','3']
    print "For checking purposes: in defineAList, list is",list
    return list

def useTheList[list]:
    print "For checking purposes: in useTheList, list is",list

def main[]:
    defineAList[]
    useTheList[list]

main[]

Tôi mong đợi điều này sẽ làm như sau:

  1. Khởi tạo 'danh sách' như một danh sách trống; Gọi chính [điều này, ít nhất, tôi biết tôi đã có đúng ...]
  2. Trong DEFINEALIST [], gán các giá trị nhất định vào danh sách; Sau đó chuyển danh sách mới trở lại Main []
  3. Trong Main [], hãy gọi Usethelist [Danh sách]
  4. Vì 'Danh sách' được bao gồm trong các tham số của hàm Usethelist, tôi hy vọng rằng Usethelist hiện sẽ sử dụng danh sách như được định nghĩa bởi DEFINEALIST [], chứ không phải danh sách trống được xác định trước khi gọi chính.

Tuy nhiên, đầu ra của tôi là:

For checking purposes: in defineAList, list is ['1', '2', '3']
For checking purposes: in useTheList, list is []

"Return" không làm những gì tôi mong đợi. Nó thực sự làm gì? Làm cách nào để lấy danh sách từ DEFINEALIST [] và sử dụng nó trong Usethelist []?

Tôi không muốn sử dụng các biến toàn cầu.

Mateen Ulhaq

22.6K16 Huy hiệu vàng87 Huy hiệu bạc128 Huy hiệu đồng16 gold badges87 silver badges128 bronze badges

Hỏi ngày 16 tháng 4 năm 2013 lúc 17:54Apr 16, 2013 at 17:54

0

Đây là những gì đang thực sự xảy ra:

global_list = []

def defineAList[]:
    local_list = ['1','2','3']
    print "For checking purposes: in defineAList, list is", local_list 
    return local_list 

def useTheList[passed_list]:
    print "For checking purposes: in useTheList, list is", passed_list

def main[]:
    # returned list is ignored
    returned_list = defineAList[]   

    # passed_list inside useTheList is set to global_list
    useTheList[global_list] 

main[]

Đây là cái bạn muốn:

def defineAList[]:
    local_list = ['1','2','3']
    print "For checking purposes: in defineAList, list is", local_list 
    return local_list 

def useTheList[passed_list]:
    print "For checking purposes: in useTheList, list is", passed_list

def main[]:
    # returned list is ignored
    returned_list = defineAList[]   

    # passed_list inside useTheList is set to what is returned from defineAList
    useTheList[returned_list] 

main[]

Bạn thậm chí có thể bỏ qua

For checking purposes: in defineAList, list is ['1', '2', '3']
For checking purposes: in useTheList, list is []
6 tạm thời và chuyển giá trị trả về trực tiếp đến
For checking purposes: in defineAList, list is ['1', '2', '3']
For checking purposes: in useTheList, list is []
7:

def main[]:
    # passed_list inside useTheList is set to what is returned from defineAList
    useTheList[defineAList[]] 

Đã trả lời ngày 16 tháng 4 năm 2013 lúc 18:00Apr 16, 2013 at 18:00

Pavel Anossovpavel AnossovPavel Anossov

59.1K14 Huy hiệu vàng148 Huy hiệu bạc124 Huy hiệu đồng14 gold badges148 silver badges124 bronze badges

0

Bạn chỉ thiếu một bước quan trọng. Bạn phải chuyển giá trị trả về một cách rõ ràng vào hàm thứ hai.

def main[]:
    l = defineAList[]
    useTheList[l]

Alternatively:

def main[]:
    useTheList[defineAList[]]

Hoặc [mặc dù bạn không nên làm điều này! Lúc đầu, nó có vẻ tốt đẹp, nhưng Globals chỉ khiến bạn đau buồn về lâu dài.]:

l = []

def defineAList[]:
    global l
    l.extend[['1','2','3']]

def main[]:
    global l
    defineAList[]
    useTheList[l]

Hàm trả về một giá trị, nhưng nó không tạo biểu tượng trong bất kỳ loại tên gọi toàn cầu nào như mã của bạn giả định. Bạn phải thực sự nắm bắt giá trị trả về trong phạm vi gọi và sau đó sử dụng nó cho các hoạt động tiếp theo.

Đã trả lời ngày 16 tháng 4 năm 2013 lúc 17:57Apr 16, 2013 at 17:57

Silas Raysilas RaySilas Ray

25.2K5 Huy hiệu vàng47 Huy hiệu bạc61 Huy hiệu Đồng5 gold badges47 silver badges61 bronze badges

1

For checking purposes: in defineAList, list is ['1', '2', '3']
For checking purposes: in useTheList, list is []
8 Trả về một giá trị. Không quan trọng bạn đặt tên cho giá trị đó. Trả lại nó chỉ là "truyền nó ra" để một cái gì đó khác có thể sử dụng nó. Nếu bạn muốn sử dụng nó, bạn phải lấy nó từ bên ngoài:

lst = defineAList[]
useTheList[lst]

Trở lại

For checking purposes: in defineAList, list is ['1', '2', '3']
For checking purposes: in useTheList, list is []
9 từ bên trong
global_list = []

def defineAList[]:
    local_list = ['1','2','3']
    print "For checking purposes: in defineAList, list is", local_list 
    return local_list 

def useTheList[passed_list]:
    print "For checking purposes: in useTheList, list is", passed_list

def main[]:
    # returned list is ignored
    returned_list = defineAList[]   

    # passed_list inside useTheList is set to global_list
    useTheList[global_list] 

main[]
0 không có nghĩa là "làm cho nó để toàn bộ phần còn lại của chương trình có thể sử dụng biến đó". Nó có nghĩa là "vượt qua giá trị của biến này và cho phần còn lại của chương trình một cơ hội để lấy nó và sử dụng nó". Bạn cần gán giá trị đó cho một cái gì đó bên ngoài chức năng để sử dụng nó. Ngoài ra, vì điều này, không cần phải xác định danh sách của bạn trước thời hạn với
global_list = []

def defineAList[]:
    local_list = ['1','2','3']
    print "For checking purposes: in defineAList, list is", local_list 
    return local_list 

def useTheList[passed_list]:
    print "For checking purposes: in useTheList, list is", passed_list

def main[]:
    # returned list is ignored
    returned_list = defineAList[]   

    # passed_list inside useTheList is set to global_list
    useTheList[global_list] 

main[]
1. Bên trong
global_list = []

def defineAList[]:
    local_list = ['1','2','3']
    print "For checking purposes: in defineAList, list is", local_list 
    return local_list 

def useTheList[passed_list]:
    print "For checking purposes: in useTheList, list is", passed_list

def main[]:
    # returned list is ignored
    returned_list = defineAList[]   

    # passed_list inside useTheList is set to global_list
    useTheList[global_list] 

main[]
0, bạn tạo một danh sách mới và trả lại nó; Danh sách này không có mối quan hệ với danh sách bạn xác định với
global_list = []

def defineAList[]:
    local_list = ['1','2','3']
    print "For checking purposes: in defineAList, list is", local_list 
    return local_list 

def useTheList[passed_list]:
    print "For checking purposes: in useTheList, list is", passed_list

def main[]:
    # returned list is ignored
    returned_list = defineAList[]   

    # passed_list inside useTheList is set to global_list
    useTheList[global_list] 

main[]
1 lúc đầu.

Ngẫu nhiên, tôi đã thay đổi tên biến của bạn từ

For checking purposes: in defineAList, list is ['1', '2', '3']
For checking purposes: in useTheList, list is []
9 thành
global_list = []

def defineAList[]:
    local_list = ['1','2','3']
    print "For checking purposes: in defineAList, list is", local_list 
    return local_list 

def useTheList[passed_list]:
    print "For checking purposes: in useTheList, list is", passed_list

def main[]:
    # returned list is ignored
    returned_list = defineAList[]   

    # passed_list inside useTheList is set to global_list
    useTheList[global_list] 

main[]
5. Đó không phải là một ý tưởng tốt để sử dụng
For checking purposes: in defineAList, list is ['1', '2', '3']
For checking purposes: in useTheList, list is []
9 như một tên biến vì đó đã là tên của một loại Python tích hợp. Nếu bạn tạo biến của riêng mình được gọi là
For checking purposes: in defineAList, list is ['1', '2', '3']
For checking purposes: in useTheList, list is []
9, bạn sẽ không thể truy cập vào bản tích hợp nữa.

Đã trả lời ngày 16 tháng 4 năm 2013 lúc 17:58Apr 16, 2013 at 17:58

BrenbarnbrenbarnBrenBarn

Phù thủy vàng 234K3535 gold badges397 silver badges375 bronze badges

1

Sự trở lại của bạn là vô dụng nếu bạn không gán nó

list=defineAList[]

Đã trả lời ngày 16 tháng 4 năm 2013 lúc 17:57Apr 16, 2013 at 17:57

Silas Raysilas Raybobrobbob

25.2K5 Huy hiệu vàng47 Huy hiệu bạc61 Huy hiệu Đồng11 silver badges21 bronze badges

For checking purposes: in defineAList, list is ['1', '2', '3']
For checking purposes: in useTheList, list is []
8 Trả về một giá trị. Không quan trọng bạn đặt tên cho giá trị đó. Trả lại nó chỉ là "truyền nó ra" để một cái gì đó khác có thể sử dụng nó. Nếu bạn muốn sử dụng nó, bạn phải lấy nó từ bên ngoài:

For checking purposes: in defineAList, list is ['1', '2', '3']
For checking purposes: in useTheList, list is []
0

Trở lại

For checking purposes: in defineAList, list is ['1', '2', '3']
For checking purposes: in useTheList, list is []
9 từ bên trong
global_list = []

def defineAList[]:
    local_list = ['1','2','3']
    print "For checking purposes: in defineAList, list is", local_list 
    return local_list 

def useTheList[passed_list]:
    print "For checking purposes: in useTheList, list is", passed_list

def main[]:
    # returned list is ignored
    returned_list = defineAList[]   

    # passed_list inside useTheList is set to global_list
    useTheList[global_list] 

main[]
0 không có nghĩa là "làm cho nó để toàn bộ phần còn lại của chương trình có thể sử dụng biến đó". Nó có nghĩa là "vượt qua giá trị của biến này và cho phần còn lại của chương trình một cơ hội để lấy nó và sử dụng nó". Bạn cần gán giá trị đó cho một cái gì đó bên ngoài chức năng để sử dụng nó. Ngoài ra, vì điều này, không cần phải xác định danh sách của bạn trước thời hạn với
global_list = []

def defineAList[]:
    local_list = ['1','2','3']
    print "For checking purposes: in defineAList, list is", local_list 
    return local_list 

def useTheList[passed_list]:
    print "For checking purposes: in useTheList, list is", passed_list

def main[]:
    # returned list is ignored
    returned_list = defineAList[]   

    # passed_list inside useTheList is set to global_list
    useTheList[global_list] 

main[]
1. Bên trong
global_list = []

def defineAList[]:
    local_list = ['1','2','3']
    print "For checking purposes: in defineAList, list is", local_list 
    return local_list 

def useTheList[passed_list]:
    print "For checking purposes: in useTheList, list is", passed_list

def main[]:
    # returned list is ignored
    returned_list = defineAList[]   

    # passed_list inside useTheList is set to global_list
    useTheList[global_list] 

main[]
0, bạn tạo một danh sách mới và trả lại nó; Danh sách này không có mối quan hệ với danh sách bạn xác định với
global_list = []

def defineAList[]:
    local_list = ['1','2','3']
    print "For checking purposes: in defineAList, list is", local_list 
    return local_list 

def useTheList[passed_list]:
    print "For checking purposes: in useTheList, list is", passed_list

def main[]:
    # returned list is ignored
    returned_list = defineAList[]   

    # passed_list inside useTheList is set to global_list
    useTheList[global_list] 

main[]
1 lúc đầu.

For checking purposes: in defineAList, list is ['1', '2', '3']
For checking purposes: in useTheList, list is []
1

Ngẫu nhiên, tôi đã thay đổi tên biến của bạn từ

For checking purposes: in defineAList, list is ['1', '2', '3']
For checking purposes: in useTheList, list is []
9 thành
global_list = []

def defineAList[]:
    local_list = ['1','2','3']
    print "For checking purposes: in defineAList, list is", local_list 
    return local_list 

def useTheList[passed_list]:
    print "For checking purposes: in useTheList, list is", passed_list

def main[]:
    # returned list is ignored
    returned_list = defineAList[]   

    # passed_list inside useTheList is set to global_list
    useTheList[global_list] 

main[]
5. Đó không phải là một ý tưởng tốt để sử dụng
For checking purposes: in defineAList, list is ['1', '2', '3']
For checking purposes: in useTheList, list is []
9 như một tên biến vì đó đã là tên của một loại Python tích hợp. Nếu bạn tạo biến của riêng mình được gọi là
For checking purposes: in defineAList, list is ['1', '2', '3']
For checking purposes: in useTheList, list is []
9, bạn sẽ không thể truy cập vào bản tích hợp nữa.

Đã trả lời ngày 16 tháng 4 năm 2013 lúc 17:5848 gold badges173 silver badges307 bronze badges

BrenbarnbrenbarnApr 16, 2013 at 18:03

Phù thủy vàng 234K35Benjamin

Sự trở lại của bạn là vô dụng nếu bạn không gán nó3 silver badges8 bronze badges

1

Bobrobbobbobrobbob

1.22911 huy hiệu bạc21 Huy hiệu đồng

For checking purposes: in defineAList, list is ['1', '2', '3']
For checking purposes: in useTheList, list is []
2

Đọc khái niệm về một không gian tên. Khi bạn gán một biến trong một hàm, bạn chỉ gán nó trong không gian tên của hàm này. Nhưng rõ ràng bạn muốn sử dụng nó giữa tất cả các chức năng.

For checking purposes: in defineAList, list is ['1', '2', '3']
For checking purposes: in useTheList, list is []
3

Ngoài ra, bạn có thể vượt qua nó xung quanh:

Benmorel10 gold badges86 silver badges132 bronze badges

32.9K48 Huy hiệu vàng173 Huy hiệu bạc307 Huy hiệu đồngJan 6, 2016 at 20:34

Đã trả lời ngày 16 tháng 4 năm 2013 lúc 18:03Akshay Sahai

Benjaminbenjamin16 silver badges20 bronze badges

5

6093 Huy hiệu bạc8 Huy hiệu Đồng

For checking purposes: in defineAList, list is ['1', '2', '3']
For checking purposes: in useTheList, list is []
4

chuyển biến từ một hàm làm đối số sang các chức năng khác có thể được thực hiện như thế này

Xác định các chức năng như thế nàyMay 5, 2021 at 16:10

Gọi các chức năng như thế này

Example:

For checking purposes: in defineAList, list is ['1', '2', '3']
For checking purposes: in useTheList, list is []
5

Karl KnechtelJul 18 at 12:20

Bạn có thể vượt qua một chức năng trong Python?

Các chức năng có thể được thông qua trong Python.Trong thực tế, có những chức năng được xây dựng thành Python mong đợi các chức năng được đưa ra như một hoặc nhiều đối số của chúng để sau đó họ có thể gọi chúng sau.. In fact there are functions built into Python that expect functions to be given as one or more of their arguments so that they can then call them later.

Python có cho phép vượt qua giá trị không?

Mô hình truyền cho đối số của Python không phải là người vượt qua giá trị, hay vượt qua bằng cách tham chiếu, nhưng đó là cách vượt qua tham chiếu đối tượng.neither “Pass by Value” nor “Pass by Reference” but it is “Pass by Object Reference”.

Bài Viết Liên Quan

Chủ Đề