2012-01-07 110 views
-1

我有一個函數定義,其中包括一個返回語句,但沒有值被交還。我的代碼如下:函數返回但沒有值

def seed(addy): 

    # urllib2 stuff is here 

    seed_result = re.search('<td>Results 1 - \d+ of (\d+)',seed_query) # searches for '<td>Results 1 - x of y', captures 'y' 
    seed_result = seed_result.group(1) # this is 'y' from above 

    # there's a call to a different function here which works properly  
    # other stuff going on here pertaining to addy but seed_result still has my string 

    # now I want to return the seed_result string... 
    return seed_result 

# ... some code outside of the seed function, then I call seed... 

seed(addy) 
print "Result is %s" % seed_result 

我曾經嘗試這樣做有和沒有定義外seed_result功能爲「初始化」,但這種具有在其上的結果沒有影響,在年底的產量「我的print語句結果是「 - 沒有seed_result。我也在返回語句中將seed_result包含在括號中,儘管我相信我是如何擁有它是正確的。這些parens沒有什麼區別。

在Python shell中設置了一個非常基本的但相似的函數,並按照我在這裏所做的那樣調用它,但是它可以工作。不知道我錯過了什麼。

感謝您的反饋和指導。

+0

試圖執行打印語句來調用導致「Result is None」的函數。 *抓頭* – 2012-01-07 09:42:43

+0

它在Python shell中工作的原因是shell打印出任何評估表達式的結果。正如Jon Skeet所說,要在程序中掌握它,你必須把它分配給一些變量。 – 2012-01-07 09:57:45

回答

3

兩個解決這一辦法

seedresult = seed(addy) 

或者你使用一個全局變量(不良風格 - 不惜任何代價):

seedresult = None 

def seed(addy): 
    global seedresult 
    ... 
+0

全球變量建議是有害的;它比糟糕的風格imho差。你的第一個解決方案是正確的。 – 2012-01-07 09:50:15

+0

的確,我現在在帖子中強調了這一點。 – 2012-01-07 09:53:44

+0

我當然可以看到利用全球的優點和缺點,所以我將不得不進一步脫機教育自己。感謝你們所有人。 – 2012-01-07 09:57:44

9

您不是使用返回值(例如,將其分配給變量)。試試這個:

result = seed(addy) 
print "Result is %s" % result 
+0

啊,非常感謝! – 2012-01-07 09:53:53

0

這是造成 None你的函數的執行過程中被分配到 seed_result

正如Jon Skeet發現的那樣,您對函數的返回值沒有任何作用。不過,你也應該解決下面的問題。

尤其是,您對參數addy無所作爲,並且搜索全局變量seed_query。我想你所看到的行爲就是這個結果。

首先,適當明顯,並容易方式實際使用return ED值:

+0

爲了簡潔起見,Addy實際上被用於從樣本中剪下的代碼中。感謝您的反饋意見。 – 2012-01-07 10:00:31

+0

@BitBucket:如果你知道自己在做什麼,那麼只需簡短摘錄即可。 – Marcin 2012-01-07 10:14:26

+0

我剪下的代碼與我的問題無關,而且工作正常 - 這是在我原來的帖子中提到的。 – 2012-01-09 22:06:42