2016-06-22 38 views
-3

所以我有这样一个叫下面一个analysis1.py功能:如何使用返回的值从蟒蛇

import glob 
import panda as pd 
def my_function(test_path): 
    path=test_path +"\\"+ "*mainlog.txt" 
    files =glob.glob(path) 
    for name in files: 
     lines=[line.rstrip('\n')for line in open(name)] 
     if "a:" in lines: 
      k_1=pd.Dataframe1 
      return k_1 
     elif "b:" in lines: 
      k_2=pd.Dataframe2 
      return k_2 
     elif "c:" in lines: 
      k_3=pd.Dataframe3 
      return k_3 
     elif "d:" in lines: 
      k_4=pd.Dataframe4 
      return k_4 
     elif "e:" in lines: 
      k_5=pd.Dataframe5 
      return k_5 

我想做出找出什么是从函数返回,并使用返回代码值来计算一些东西。每个返回的值是用来计算在不同的代码存储喜欢不同的东西在同一目录以前和命名main_code.py:

returned_value = analysis1.my_function(test_path) 
if returned_value == k_1: 
    do_something_1 
if returned_value == k_2: 
    do_something_2 
if returned_value == k_3: 
    do_something_3 
if returned_value == k_4: 
    do_something_4 
if returned_value == k_5: 
    do_something_5 

我可以添加什么这个代码,可以帮助我知道什么是返回并使用它来解决所显示的问题。我知道我错过了一些小事,但无法弄清楚它是什么。

+2

'R =创建my_function(my_arg)'会调用'my_function',传递'my_arg'并将返回值保存为'r'。然后,您可以将'r'与不同的预期回报值进行比较。你在问什么? –

+0

这是一个相当大的改变,通过添加单行(你还没有做你认为它正在做的事情...... == ='vs'=')。然而,这个代码的改变使得以某种方式得到的所有三个答案无效。下次您发布问题时,请确保您的示例包含您遇到问题的所有*代码。 – Andy

+0

@安迪感谢您让我知道这实际上是我的代码犯了一个错误。它实际上是在原始代码中的returned_value = my_function(test_path)。对不起,不包括它。但这是我实际上合作过的,但它似乎并没有给我我真正想要的东西。 –

回答

0

我不认为你知道函数如何在Python中工作。功能就像您在编程世界中的口袋工具。你可以随时使用它们,他们将return你的东西 - 就像你输入1 + 1时计算器返回2。

同样,你所需要做的就是运行该函数(使用它的必要参数),它会为你提供某种东西return。你可以简单地这样做:

returned_value = my_function(my_arg) 

当函数返回一个值,你可以把它看作与该值替换整个函数调用。所以,以下语句就会像:

returned_value = "some returned value" 

之后,你可以随身携带的,不管你在干什么。

如果每个if语句的功能不同的参数,请记住,有返回值替换函数调用,看看它是否有道理:

if my_function(arg_1) == k_1: 
    do_something_1 
if my_function(arg_2) == k_2: 
    do_something_2 
if my_function(arg_3) == k_3: 
    do_something_3 
if my_function(arg_4) == k_4: 
    do_something_4 
if my_function(arg_5) == k_5: 
    do_something_5 
0

if returned_value线之前,补充一点:

returned_value = my_function(test_path) 

这会将从my_function返回的值指定为returned_value。此时,您的if语句将开始检查值以查看它是否与期望值匹配。如果是这样,将调用适当的do_something_*函数。

的几个注意事项:

  • 在你的函数,返回的值是变量名(k_1k_2等)的值需要在某处分配它们可以被称为否则你会之前获得NameError例外。
  • 假设do_something_*通话是功能,您需要将呼叫改变从do_something_1do_something_1()(注意括号)
0

您的问题是变量:k_1 .. k_5没有定义保存值。首先在某处定义它们。看起来你正在寻找相当于enum的东西。

from enum import Enum 

KType = Enum('KType', 'k_1 k_2 k_3 k_4 k_5') 

你可以再做:

.. 
.. 
if "a:" in lines: 
    return KType.k_1 
elif "b:" in lines: 
    return KType.k_2 
elif "c:" in lines: 
    return KType.k_3 
elif "d:" in lines: 
    return KType.k_4 
elif "e:" in lines: 
    return KType.k_5 

..然后进行比较,你可以这样做:

returned_value = my_function(path) 
if returned_value==KType.k_1: 
    do_something_1 
if returned_value==KType.k_2: 
    do_something_2 
if returned_value==KType.k_3: 
    do_something_3 
if returned_value==KType.k_4: 
    do_something_4 
if returned_value==KType.k_5: 
    do_something_5