2016-06-22 43 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