我认为这基本上是两个问题。你知道吗
我一直在尝试用用户输入的任何字符制作一个圆形。(这是一个“为了好玩”的活动,我想出了帮助我习惯的功能。我只自学Python两周了)
到目前为止,我的代码是:
def circle(symbol):
def lines1(aa):
print(symbol * 20)
aa()
print(symbol * 20)
return(lines1)
def lines2(bb):
print(symbol * 7 + ' ' * 6 + symbol * 7)
bb()
print(symbol * 7 + ' ' * 6 + symbol * 7)
return(lines2)
def lines3(cc):
print(symbol * 4 + ' ' * 12 + symbol * 4)
cc()
print(symbol * 4 + ' ' * 12 + symbol * 4)
return(lines3)
def lines4(dd):
print(symbol * 2 + ' ' * 16 + symbol * 2)
dd()
print(symbol * 2 + ' ' * 16 + symbol * 2)
return(lines4)
def lines5():
print(symbol + ' ' * 18 + symbol)
print(symbol + ' ' * 18 + symbol)
return(lines5)
lines1(lines2(lines3(lines4(lines5()))))
circle(raw_input())
示例:如果用户输入一个#,则应该输出:
####################
####### #######
#### ####
## ##
# #
# #
## ##
#### ####
####### #######
####################
问题是它没有输出任何东西。你知道吗
重复太多了,下面是我的功能风格解决方案:
你不使用装饰器
要使代码按原样工作:
看看这个关于装饰师的问题,我发现它在过去也非常有用: How to make a chain of function decorators?
cicles
函数提前返回:剩下的函数是而不是执行的。你知道吗
接下来,使用希望调用其他函数的函数,但从不传入参数。
aa()
没有任何对lines2()
函数的引用。你知道吗相反,您调用
lines5()
,它返回None
,然后将其传递给lines4()
,后者不能调用lines4()
。你知道吗您将需要内包装,使这项工作的方式,你想:
现在函数
lines1
到lines4
都返回一个包装器函数,传递给下一个函数,有效地使它们成为装饰器。我们从lines5
(作为函数引用,而不是调用它开始,然后调用嵌套包装器的结果。你知道吗lines5
的定义现在也可以使用@decorator
语法:相关问题 更多 >
编程相关推荐