李青山 发表于 2020-4-19 13:34:17

使用一个函数修改另一个函数的值

题目:1创建一个魔术师列表,并使用函数show_magicians()将每个魔术师其打印出来
附上我写的代码:
magicians = ['david', 'Louis Liu', 'annie']
def show_magicians(magician):
    for magician in magicians:
      print(magician)
show_magicians(magicians)
题目:
创建一个make_great()函数,将题目一中的魔术师列表进行修改,在每个魔术师的名字中都加入‘the great’的字样调用函数show_magicians(),确认魔术师列表已经改变
magicians = ['david', 'Louis Liu', 'annie']
parameters = []
def make_great(magicians,parameters):
   while magicians:
      parameter = magicians.pop() + 'the great'#这里因为我想的是magicians.pop()返回值+ 'the great',变成的一个新的元素并将这个新的元素重新赋值给parameter。
      parameters.append(parameter)#将新的元素增加到列表中
    magicians = parmeters#将magicians重新赋值,但打印之后感觉并没有赋值成功
---------------------------------------------------------------------------
show_magicians(make_great(magicians,parameters))#发帖之前才想出来 ...(将函数作为参数这是我之前没想到的)
之前的思路一直是修改magicians列表,似乎代码写错了
希望各位大佬改进下我写的代码,太丑了。。。。。。

永恒的蓝色梦想 发表于 2020-4-19 13:41:57

本帖最后由 永恒的蓝色梦想 于 2020-4-19 17:44 编辑

def make_great(magicians) :
        length=len(magicians)
        while length:
                magicians='the great'+magicians
                length-=1

def show_magicians(magicians) :
        print(*magicians,sep='\n')

jkluoling1992 发表于 2020-4-19 14:09:03

def make_great(magicians, parameters) :
    temp = []
    for magic in magicians:
      temp.append(magic+ " " +parameters)
    return temp

李青山 发表于 2020-4-19 17:28:36

本帖最后由 李青山 于 2020-4-19 17:30 编辑

永恒的蓝色梦想 发表于 2020-4-19 13:41


感谢大佬的回答,但是打印出来仍是
david
Louis Liu
annie
运行了以下代码:
magicians = ['david', 'Louis Liu', 'annie']
# parameters = []
def make_great(magicians):
    length = len(magicians)
    while length:
      magicians = 'the great' + magicians
      length -= 1
def show_magicians(magicians):
    print(*magicians, sep='\n')
show_magicians(magicians)

永恒的蓝色梦想 发表于 2020-4-19 17:49:01

李青山 发表于 2020-4-19 17:28
感谢大佬的回答,但是打印出来仍是
david
Louis Liu


你根本就没有调用 make_great 啊,怎么可能会改呢?

不过之前的 make_great 有点小问题,这里给出新的def make_great(magicians) :
      length=len(magicians)
      while length:
                magicians='the great '+magicians
                length-=1

jkluoling1992 发表于 2020-4-19 19:22:24

永恒的蓝色梦想 发表于 2020-4-19 17:49
你根本就没有调用 make_great 啊,怎么可能会改呢?

不过之前的 make_great 有点小问题,这里给出新的

make_great 没有返回值 怎么操作print?

永恒的蓝色梦想 发表于 2020-4-19 19:31:16

jkluoling1992 发表于 2020-4-19 19:22
make_great 没有返回值 怎么操作print?

题目:
创建一个make_great()函数,将题目一中的魔术师列表进行修改

jkluoling1992 发表于 2020-4-19 19:48:32

永恒的蓝色梦想 发表于 2020-4-19 19:31


show_magicians(make_great(magicians,parameters))
这个表达,,把你的函数带进去能实现吗?

永恒的蓝色梦想 发表于 2020-4-19 19:53:18

jkluoling1992 发表于 2020-4-19 19:48
show_magicians(make_great(magicians,parameters))
这个表达,,把你的函数带进去能实现吗?

题目:
创建一个make_great()函数,将题目一中的魔术师列表进行修改所以这么调用也可以make_great(magicians)
show_magicians(magicians)

Stubborn 发表于 2020-4-19 23:30:23

本帖最后由 Stubborn 于 2020-4-19 23:39 编辑


from functools import wraps
def set_magicians(func):
      @wraps(func)
      def wrapper(*args, **kwargs):
            magicians = args if args else kwargs.get("magicians")
            magicians = ["this is "+ x for x in magicians]
            func(magicians)
      return wrapper

magicians = ['david', 'Louis Liu', 'annie']
@set_magicians
def show_magicians(magicians):
    for magician in magicians:
      print(magician)

show_magicians(magicians)

可以使用装饰器,非常强大的功能

简单一点的,就这样咯
magicians = ['david', 'Louis Liu', 'annie']
def show_magicians(magicians):
    for magician in magicians:
      print(magician)

def set_magicians(arg, callback):
    arg = ["the great "+ x for x in arg]
    callback(arg)

set_magicians(magicians, show_magicians)
页: [1]
查看完整版本: 使用一个函数修改另一个函数的值