【问题标题】:Python: Return doesn't work but Print worksPython:返回不起作用,但打印有效
【发布时间】:2018-08-06 02:46:12
【问题描述】:

我正在创建的库的目的是在您输入颜色名称时返回颜色的十六进制值。

上面的程序可以很好地处理打印,尽管它不会在 printreturn 替换后立即返回值。 但是返回值的全部意义都消失了,因为它不能与其他程序一起使用。 返回(“#F2F3F4”)不起作用

是的我试过不带括号,它没有任何区别。 希望你能找出问题所在。提前谢谢!

class ColourConst():
    def __init__(self, colour):
        col = ""
        #Shades of White
        def Anti_flash_white():
             print("#F2F3F4")

        def Antique_white():
            print("#FAEBD7")

        def Beige():
            print("#F5F5DC")

        def Blond():
            print("#FAF0BE")

        ColourCon = {
        #Shades of White
        "Anti-flash white": Anti_flash_white, 
        "Antique white": Antique_white,
        "Beige": Beige,
        "Blond" : Blond
        }
        myfunc = ColourCon[colour]
        myfunc()

ColourConst("Anti-flash white")

【问题讨论】:

  • 修复编辑
  • 您缺少 self 作为所有方法的第一个参数(或 @staticmehod 装饰器?)。你永远不会实例化 ColourConst 对象。在一个类中包含所有这些功能是没有意义的。
  • 如果你使用return,它确实返回一个值,但如果你不使用print,它就不会打印它。此外,除非这是函数式编程的练习,否则为什么不直接使用 dict 将颜色名称映射到颜色代码,而不是使用那些中间内部函数?
  • 返回不代表打印

标签: python function dictionary switch-statement return


【解决方案1】:

如果您使用return,它确实返回一个值,但除非您也使用print,否则它不会打印它。

class ColourConst():
    def __init__(self, colour):
        def Anti_flash_white():
            return "#F2F3F4" # return here
        def Antique_white():
            return "#FAEBD7" # and here
        def Beige():
            return "#F5F5DC" # and here
        def Blond():
            return "#FAF0BE" # you get the point...
        ColourCon = {
            "Anti-flash white": Anti_flash_white, 
            "Antique white": Antique_white,
            "Beige": Beige,
            "Blond" : Blond
        }
        myfunc = ColourCon[colour]
        print(myfunc()) # add print here

ColourConst("Anti-flash white")

话虽如此,这是一种非常可怕的做法。首先,这是一个类的构造函数,根据定义,它只能返回该类的新创建实例self。相反,您可以将其设为一个返回值的函数,并在调用该函数时打印该值,使其更易于重用。此外,您可以直接将名称映射到值,而不是将颜色名称映射到函数,每个函数都返回值。

def colour_const(name):
    colour_codes = {
        "Anti-flash white": "#F2F3F4", 
        "Antique white": "#FAEBD7",
        "Beige": "#F5F5DC",
        "Blond" : "#FAF0BE"
    }
    return colour_codes.get(name, "unknown color")

print(colour_const("Anti-flash white"))

【讨论】:

  • 谢谢@tobias_k,尽管我正试图完全摆脱打印,所以我正在研究的这个库可以与其他库结合使用,例如 matplotlib。还有你为什么用get
  • @SavL 然后你应该使用带有单个函数的第二个变体。这里,print 不是函数(库)的一部分,而是使用函数/库的代码的一部分。
  • 很抱歉,您在函数外使用了打印。你能解释一下你用过get吗?
  • @SavL get 如果密钥不存在于字典中,则不会引发异常,而是返回 None 或提供的默认值。根据用例,引发异常或返回 None 或一些默认值(例如纯白色 #FFFFFF)可能是最好的。只是想表明还有其他选择。
猜你喜欢
  • 1970-01-01
  • 2017-07-03
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 2013-08-05
  • 2014-11-16
  • 2012-06-16
  • 1970-01-01
相关资源
最近更新 更多