蟒蛇。参数和返回值

时间:2017-04-04 10:25:07

标签: python python-3.x parameter-passing

在这个问题中相对较新的Python,我可能会使用一些不正确的术语,并会显示出误解 - 这就是我在这里的原因。

我正在研究Python函数,并试图确保我理解变量的传递和返回方式。

我已经写了这个简单的函数来对列表中的项进行排序

def func_sort_list(NN):
    for w in NN:
        print (w, type(w))

    NN.sort()
    print (NN)

    return (w)

我已将值分配给列表

unsort_letters=['q','w','e','r','t','y']

然后我调用了函数

func_sort_list(unsort_letters)

并获得结果

q <class 'str'>
w <class 'str'>
e <class 'str'>
r <class 'str'>
t <class 'str'>
y <class 'str'>
['e', 'q', 'r', 't', 'w', 'y']
'y'

然后,执行后,如果我显示我最初传递给函数的变量的内容我得到

unsort_letters
['e', 'q', 'r', 't', 'w', 'y']

我想要的结果是什么。

以下对发生的事情的解释是否正确,以便在编写函数时感觉更安全一点?

  1. unsort_letters,[&#39; q&#39;,&#39; w&#39;&#39; e&#39;,...]的原始值是&#34;全球&#34;

  2. 通过调用func_sort_list(unsort_letters)我已将unsort_letters的地址/指针传递给func_sort_list?

  3. NN是一个变量&#34; local&#34;函数,但它包含传递的变量的指针/地址,因为列表是可变的,unsort_letters的内容在函数内被更改?

  4. 这导致我:

    1. 当我无法在函数中更改传递参数的内容时,是否存在这样的情况?我必须编写如下内容?

      def func_return_only(input_parm):
          result_var = << some processing on input_parm goes here>>
      
      return (result_var)
      
    2. 我必须按如下方式调用以获取var_s中返回值的值。

      var_s = func_return_only(<< my input variable or value>>)
      

1 个答案:

答案 0 :(得分:6)

你的心理模型非常正确。但是,您不应该担心Python是“按值传递”还是“按引用传递”。您必须了解Python中的赋值如何工作。 This是最好的资源。最重要的事实是赋值永远不会复制数据

一旦理解了赋值,你唯一需要知道的是函数参数是通过赋值传递的。

调用函数时隐式发生的第一件事是

NN = unsort_letters

你传递了unsort_letters作为参数。您将另一个名称(NN)分配给该参数 - 就是这样,不会复制任何数据。

  

当我无法在函数

中更改传递参数的内容时,是否存在这种情况

是的,当你传入的任何内容都是不可变的。例如,整数没有方法来更新它们的值,所以你不能在函数体(或其他任何地方)中改变它们。

然而,重要的是要注意Python在赋值和参数传递期间不会以不同方式处理可变和不可变类型。你根本无法改变不可变类型,因为它们没有变异方法。

相关问题