为了账号安全,请及时绑定邮箱和手机立即绑定

Python3 包装函数

Python3 包装函数

跃然一笑 2023-07-05 16:38:19
我在任何地方都找不到问题的解决方案,所以也许我可以在这里得到答案。基本上,我尝试用另一个函数打印一个元组,然后尝试将该输出包装在另一个函数中。如果我将文本包装在wrapped_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, sixthwrapped_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()))
查看完整描述

1 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

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


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           

##############################


查看完整回答
反对 回复 2023-07-05
  • 1 回答
  • 0 关注
  • 71 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信