多个函数调用如何在python 2.7中工作

时间:2016-05-16 13:25:10

标签: python function

我试图理解python中的多个函数调用,但有点困惑。

例如,如果有两个名为WorkPlay的字符串变量,我写了多个函数调用,如:

Work.find(Play.strip().split()[0])

这是否意味着

  1. 使用Play,
  2. 调用方法条
  3. 使用上面的结果
  4. 调用方法拆分
  5. 从上面2的结果中提取第一个元素,
  6. 使用上面3中的结果调用方法查找。
  7. 或者是否意味着

    1. 使用上面的工作调用方法拆分。
    2. 使用上面1中的结果调用方法条。
    3. 从上面2的结果中提取第一个元素。
    4. 使用上面3中的结果调用方法查找。
    5. 或者Python在编写时执行call()函数吗?

      感谢您的帮助

6 个答案:

答案 0 :(得分:4)

在Play上调用strip(),在其上调用split(),并将split split中的第一个返回值作为参数传递给Work上的find()调用。
将括号中的内容想象成一个传递给find()调用的表达式。我们可以扩展此代码:

Work.find(Play.strip().split()[0])

成为:

strip_result = Play.strip()
split_result = strip_result.split()
argu = split_result[0]
Work.find(argu)

第一个代码位更紧凑,但第二个代码位更易读。您应该检查PEP 8和您自己的偏好以确定使用哪个。

答案 1 :(得分:1)

  

这是否意味着1.Call到方法条带使用Play,2。使用上面的1的结果来调用方法,3。从上面的2的结果中提取第一个元素,4.Call到方法查找使用上面3的结果

答案 2 :(得分:1)

如果你有多个函数调用,那么你应该从左到右阅读它们,并将下一个函数调用应用到上一个创建的对象。

所以你帖子中的以下内容是正确的:

  

这是否意味着1.Call to方法条使用Play,2.Call to   方法使用上面的1中的结果进行拆分,3。从中提取第一个元素   上面2的结果,4。使用上面3中的结果来查找方法。

答案 3 :(得分:1)

此:

Work.find(Play.strip().split()[0])

......就是相当于:

tmp1 = Play.strip()
tmp2 = tmp1.split()
tmp3 = tmp2[0]
Work.find(tmp3)

Python会在调用附加()的函数之前执行()内的所有内容。在()内,它从左到右评估代码。

答案 4 :(得分:1)

代码方法,就像数学一样,遵循“首先在括号内做东西”的标准对象,例如,如果你这样做:

x = sin(1+5)

您希望1+5首先发生,然后sin(6),其中6是内部操作1+5的结果。完全相同的原则:

Work.find(Play.strip().split()[0])

首先评估内部表达式Play.strip().split()[0],然后调用操作Work.find,并将内部表达式的结果作为参数。

内部操作再次从左到右调用,就像数学一样,所以

Play.strip().split()[0]

首先执行Play.strip()然后对r.split()的结果进行r[0],然后执行结果r(其中dis是最后一部分的结果)

请注意,如果您真的想要绝对不同的答案,那么>>> import dis >>> dis.dis(compile("Work.find(Play.strip().split()[0])","<example>","eval")) 1 0 LOAD_NAME 0 (Work) 3 LOAD_ATTR 1 (find) 6 LOAD_NAME 2 (Play) 9 LOAD_ATTR 3 (strip) 12 CALL_FUNCTION 0 (0 positional, 0 keyword pair) 15 LOAD_ATTR 4 (split) 18 CALL_FUNCTION 0 (0 positional, 0 keyword pair) 21 LOAD_CONST 0 (0) 24 BINARY_SUBSCR 25 CALL_FUNCTION 1 (1 positional, 0 keyword pair) 28 RETURN_VALUE 会汇集代码:

CALL_FUNCTION

好吧也许这会让人感到困惑然后有用......

但是您可以看到前两个.strip()没有参数,因此您可以扣除.split()然后调用CALL_FUNCTION以及使用一个调用的最后一个Work.Play(<expression>)位置是$(function () { $('form#fos_user_registration_form').submit(function (e) { e.preventDefault(); var $this = $(e.currentTarget); inputs = {}; // Send all form's inputs $.each($this.find('input'), function (i, item) { var $item = $(item); inputs[$item.attr('name')] = $item.val(); }); // Send form into ajax $.ajax({ url: $this.attr('action'), type: 'POST', dataType: 'json', data: inputs, success: function (data) { if (data.has_error) { // Insert your error process alert('WRONG'); } else { // Insert your success process alert('check your email!'); } } }); }); });

答案 5 :(得分:0)

电话订单是(为清晰起见而添加的中间变量名称):

    首先调用
  • Play.strip()(x)
  • x.split()被称为(y)
  • y[0](z)
  • Work.find(z)