【问题标题】:referring to arrays from another function从另一个函数引用数组
【发布时间】:2018-10-18 12:22:56
【问题描述】:

我有一些包含几个用户定义函数的代码。我希望其中一个函数使用另一个函数的输出,但显然 Python 不会让我使用下面的代码。 Python 似乎不喜欢 array1 没有在 function2 本身中定义的事实。有什么建议么?首先调用function1,所以我的逻辑是应该在调用function 2之前定义array1......但也许我误解了Python的工作原理。 (这是实际代码的简化版本,但归结为同一个问题)

def function1():
    some_input=1
    some_other_input=2
    array1=[]
    array1.append(some_input)
    array1.append(some_other_input)


def function2():
    for i in range(len(array1)):
    print(array1[i])

function1()
function2()

【问题讨论】:

  • 不如将array1作为function1的输出,然后作为参数发送到function2中使用?
  • 您需要查看return,将参数传递给函数,并将返回值分配给名称。所有这些都将在函数的介绍性教程中介绍。

标签: python arrays function


【解决方案1】:

当python搜索变量时,它遵循LEGB规则

所以它会先在 Local 然后在 Enclosure 中搜索,然后在 Global 中搜索,最后在内置函数中搜索,所以要使您的列表(数组)可访问,您需要将其设为 Global

方法 1

在function1中创建并传递给function2

def func1():
    arr=[]
    arr.append(1)
    return arr


def func2(arr):
    arr.append(2)
    print(arr)

arr = func1()
func2(arr)

方法 2

使您的列表全局化并使用“全局”关键字访问它

arr = []

def func1():
    global arr
    arr.append(1)

def func2():
    global arr
    arr.append(2)
    print(arr)

func1()
func2()

【讨论】:

    【解决方案2】:

    以下将起作用,将function1() 返回的数组传递给function2()。另一种可能的方法是将array1 声明为全局变量。

    def function1():
        some_input=1
        some_other_input=2
        array1=[]
        array1.append(some_input)
        array1.append(some_other_input)
        return array1
    
    
    def function2(arr):
        for i in range(len(arr)):
            print(arr[i])
    
    arr = function1()
    function2(arr)
    

    【讨论】:

      【解决方案3】:

      以下可能的实现:

      def function1():
          some_input=1
          some_other_input=2
          array1=[]
          array1.append(some_input)
          array1.append(some_other_input)
          return array1
      
      
      def function2(array):
          for i in range(len(array)):
              print(array[i])
      
      array = function1()
      function2(array) 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-16
        • 2016-06-28
        • 1970-01-01
        • 2016-03-09
        • 1970-01-01
        • 2017-01-09
        • 1970-01-01
        • 2023-01-13
        相关资源
        最近更新 更多