Python3包装函数

丹尼尔·布莱奇

我在任何地方都找不到解决问题的方法,因此也许可以在这里找到答案。基本上,我尝试使用另一个函数打印一个元组,然后尝试将该输出包装到另一个函数中。如果我将文本包装在wrapd_string_linesplit()函数旁边,则它可以完美工作,但我基本上不希望这样。也许有人可以解释我的错误在哪里,以及从另一个函数包装它的好办法是什么。提前致谢

工作解决方案:

def wrapped_string_linesplit(arg):
    print('#' * 30)
    for item in arg:
        print(item)
    print('#' * 30)


def welcome_message():
    first = 'Welcome to xyz'.center(30, ' ')
    second = ('#' * 30).center(30, ' ')
    third = 'New Game'.center(30, ' ')
    fourth = 'Load Game'.center(30, ' ')
    fifth = 'About'.center(30, ' ')
    sixth = 'Quit Game'.center(30, ' ')
    return first, second, third, fourth, fifth, sixth

wrapped_string_linesplit(welcome_message())

输出:

##############################
        Welcome to xyz        
##############################
           New Game           
          Load Game           
            About             
          Quit Game           
##############################

然后将代码更改为以下内容,根本不会出现错误而完全不打印换行:

def message_wrapper(foo):
    def wrap():
        print('#' * 30)
        foo()
        print('#' * 30)
    return wrap
    

def string_linesplit(arg):
    for item in arg:
        print(item)

message_wrapper(string_linesplit(welcome_message()))

输出:

        Welcome to xyz
##############################
           New Game           
          Load Game           
            About             
          Quit Game           
##############################

我完全不理解的下一个,引发错误

foo()

TypeError:在message_wrapper()中调用foo()时,无法调用“ NoneType”对象。为什么它必须具有返回值才能从另一个函数调用?

def message_wrapper(foo):
    print('#' * 30)
    foo()
    print('#' * 30)


def string_linesplit(arg):
    for item in arg:
        print(item)

message_wrapper(string_linesplit(welcome_message()))
沙申克

我对给定的代码片段感到困惑,但是如果我必须处理给定的代码片段并如上所述给出输出:

def welcome_message():
    first = 'Welcome to xyz'.center(30, ' ')
    second = ('#' * 30).center(30, ' ')
    third = 'New Game'.center(30, ' ')
    fourth = 'Load Game'.center(30, ' ')
    fifth = 'About'.center(30, ' ')
    sixth = 'Quit Game'.center(30, ' ')
    return first, second, third, fourth, fifth, sixth


def string_linesplit(arg):
    for item in arg:
        print(item)

def message_wrapper(foo):
    print('#' * 30)
    string_linesplit(foo())
    print('#' * 30)

message_wrapper(welcome_message)

输出:

##############################
        Welcome to xyz        
##############################
           New Game           
          Load Game           
            About             
          Quit Game           
##############################

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章