如何创建一个打印或返回另一个函数结果的函数?

时间:2017-05-12 17:39:38

标签: python python-2.7 function random

我创建了一个函数(p_r),该函数将printreturn函数的结果。

我这样做是为了运行测试。 (print显示输出,return将吐出值但不打印输出)。 - Python noob;所以,让我知道是否有更简单的方法,如“详细”或测试关键字。我已经在这个项目上工作了好几天。

需要的模块......

import random

变量:

yt_url = '' #url of either a video or playlist [user input]
printr_return = True
yt_url1 = 'https://youtu.be/WaGRTixwkSQ'
yt_url2 = 'https://www.youtube.com/playlist?list=PL6FhCd_HO_AD-22-Csv-vYlhLoKlAY3Zt'

功能:

#Switches between printing or returning data, depending on printr_return
#''' 
def p_r (statement, printr_return):
    if printr_return is True:
        print (statement)
    else:
        return (statement)
#'''

问题:

当我在以下函数中使用NoneType时,我不明白为什么会得到p_r

#Choses between the two urls above and outputs yt_url
#'''
def random_urltest (yt_url1, yt_url2):
    rnt = random.choice([1,2])
    if rnt == 1:
        yt_url = yt_url1
    if rnt == 2:
        yt_url = yt_url2
    p_r (yt_url, False)    #-- what's wrong here?
    #return yt_url          #-- but this works
#'''

运行它:

yt_url = random_urltest (yt_url1, yt_url2) #returns NoneType if I use p_r
p_r ('Running test on url...%s' % (yt_url), True) #This works...

4 个答案:

答案 0 :(得分:1)

尝试放在最后

return(p_r(yt_url,False))

而不只是运行函数

答案 1 :(得分:1)

def random_urltest (yt_url1, yt_url2):
     rnt = random.choice([1,2])
     if rnt == 1:
         yt_url = yt_url1
     if rnt == 2:
         yt_url = yt_url2
     val = p_r (yt_url, False)
     if val:
         return val

答案 2 :(得分:1)

您显然希望random_urltest()函数返回一个值:

yt_url = random_urltest (yt_url1, yt_url2)

但该功能不会返回任何内容!正如@bell -_- 0001建议的那样,您需要返回其值,而不仅仅是调用 p_r()

def random_urltest (yt_url1, yt_url2):
    rnt = random.choice([1,2])
    if rnt == 1:
        yt_url = yt_url1
    if rnt == 2:
        yt_url = yt_url2
    return p_r (yt_url, False)

答案 3 :(得分:0)

事实证明我是“试图重新发明轮子” ......

user2357112为我的整体问题提供了最佳答案(尽管John Gordonmohammad的答案直接解决了我的问题)

我可以使用内置logging module来调试/测试 - 和disable logging

有关如何使用该模块的详细信息非常广泛,但我引用了The Hitchhiker's Guide to Python并进行了快速更改以显示其工作原理......

更改包括

  • 添加logging module
  • logging配置创建为logger
  • p_r对象替换logger函数
  • 简化了random_urltest功能

<强>进口:

import random
import logging

创建记录器配置Formats info

logger = logging.getLogger()
handler = logging.StreamHandler()
formatter = logging.Formatter(
        '%(asctime)s %(name)-12s %(levelname)-8s %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)

<强>变量:

yt_url = '' #url of either a video or playlist [user input]
yt_url1 = 'https://youtu.be/WaGRTixwkSQ'
yt_url2 = 'https://www.youtube.com/playlist?list=PL6FhCd_HO_AD-22-Csv-vYlhLoKlAY3Zt'

<强>功能:

#Choses between the two urls above and outputs yt_url
#'''
def random_urltest (yt_url1, yt_url2):
     yt_url = random.choice([yt_url1, yt_url2])
     logger.debug('Running test on url...%s',yt_url)
     return yt_url
#'''

运行它:

random_urltest (yt_url1, yt_url2)

输出:url将在url1和url2之间切换

2017-05-12 12:48:13,186 root         DEBUG    Running test on url...https://www.youtube.com/playlist?list=PL6FhCd_HO_AD-22-Csv-vYlhLoKlAY3Zt
[Finished in 0.118s]