新手求助,python中的return返回值用法

一条励志的咸鱼 2019-08-15 08:35:12
首先是调用函数对列表进行修改
def show_magicians(magicians):
"""Print the name of each magician in the list."""
for magician in magicians:
print(magician)

def make_great(magicians):
"""Add 'the Great!' to each magician's name."""
# Build a new list to hold the great musicians.
great_magicians = []

# Make each magician great, and add it to great_magicians.
while magicians:
magician = magicians.pop()
great_magician = magician + ' the Great'
great_magicians.append(great_magician)

# Add the great magicians back into magicians.
for great_magician in great_magicians:
magicians.append(great_magician)

magicians = ['Harry Houdini', 'David Blaine', 'Teller']
show_magicians(magicians)

print("\n")
make_great(magicians)
show_magicians(magicians)


接着是修改列表的副本
def show_magicians(magicians):
"""Print the name of each magician in the list."""
for magician in magicians:
print(magician)

def make_great(magicians):
"""Add 'the Great!' to each magician's name."""
# Build a new list to hold the great musicians.
great_magicians = []

# Make each magician great, and add it to great_magicians.
while magicians:
magician = magicians.pop()
great_magician = magician + ' the Great'
great_magicians.append(great_magician)

# Add the great magicians back into magicians.
for great_magician in great_magicians:
magicians.append(great_magician)

return magicians

magicians = ['Harry Houdini', 'David Blaine', 'Teller']
show_magicians(magicians)

print("\nGreat magicians:")
great_magicians = make_great(magicians[:])
show_magicians(great_magicians)

print("\nOriginal magicians:")
show_magicians(magicians)


我想请教的是为什么第一次可以不用return,第二次没有 return magicians 就不行。另一个疑问是,return到底返回的是什么,是修改之后的列表magicians吗,那在之后调用和函数的时候(great_magicians = make_great(magicians[:]))又如何理解,是把已经改变的列表再次带入函数吗?显然是不对的,那又该如何理解呢
...全文
589 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
黄哥Python培训 2019-08-17
  • 打赏
  • 举报
回复
引用 5 楼 一条励志的咸鱼 的回复:
[quote=引用 4 楼 黄哥Python培训的回复:]第一段代码,是通过修改全局变量magicians 来实现每一个字符串添加了 "the Great" 字符串。 第二段代码,在函数内部没有修改全局变量magicians,是通过return 返回值实现了添加 "the Great" 字符串。 就是这点区别。
主要还是有点不明白,什么时候要用return,什么时候不用[/quote] 你可以理解函数为一个黑箱子,如果需要调用函数时,有返回值,就需要用return。
黄哥Python培训 2019-08-16
  • 打赏
  • 举报
回复
第一段代码,是通过修改全局变量magicians 来实现每一个字符串添加了 "the Great" 字符串。 第二段代码,在函数内部没有修改全局变量magicians,是通过return 返回值实现了添加 "the Great" 字符串。 就是这点区别。
小黑LLB 2019-08-16
  • 打赏
  • 举报
回复
函数运算就会得出一个值。如果你想让函数得出一个结果,就要 return xxx 返回函数里的变量等。

def ex1(a):
    # 默认不写,函数结果返回 None
    a += 1

def ex2(a):
    # return 空,相当于 return None,什么也没有,函数结果返回 None
    a += 1
    return

def ex3(a):
    # 直接返回 None,函数结果返回 None
    a += 1
    return None

def ex4(a):
    # 返回 a 的结果,函数结果返回 a 的结果
    a += 1
    return a


a = ex1(1) # 函数运行后,得到 None ,赋给了 a
b = ex2(1) # 同上
c = ex3(1) # 同上
d = ex4(1) # 函数运行后,得到 a 的值 ,赋给了 d(变量接受)
e = d + 1
f = ex4(ex4(1)) #直接将返回值传入函数(直接传参)
print('a: {0}, b: {1}, c: {2}, d: {3}, f: {4}'.format(a, b, c, d, e, f))
  • 打赏
  • 举报
回复
引用 1 楼 小黑LLB的回复:
我的理解是: 第一张图,应该是 magicians 是全局变量,函数内修改对 magicians 产生了影响,你可以把函数参数和传参全部去掉,结果也是一样的。 第二张图,magicians[:] 是一个全新的对象,是原列表的副本,不是原来的列表,所以不存在修改全局变量 magicians 不写 return,默认 return None,什么也没有 直接写 return 也是 一个效果 return magicians ,函数调用返回一个值,值为 magicians,可以用变量接受,或直接传参。
请问,调用函数的时候,输出的就是返回值吗?可不可以这样理解,如果我接下来要调用函数,并对这个结果进行操作,就要有return,就像这个是调用函数,然后制作副本一样。 直接传参是什么意思,书上说有返回值得时候必须有变量
  • 打赏
  • 举报
回复
引用 4 楼 黄哥Python培训的回复:
第一段代码,是通过修改全局变量magicians 来实现每一个字符串添加了 "the Great" 字符串。 第二段代码,在函数内部没有修改全局变量magicians,是通过return 返回值实现了添加 "the Great" 字符串。 就是这点区别。
主要还是有点不明白,什么时候要用return,什么时候不用
小黑LLB 2019-08-15
  • 打赏
  • 举报
回复
我的理解是: 第一张图,应该是 magicians 是全局变量,函数内修改对 magicians 产生了影响,你可以把函数参数和传参全部去掉,结果也是一样的。 第二张图,magicians[:] 是一个全新的对象,是原列表的副本,不是原来的列表,所以不存在修改全局变量 magicians 不写 return,默认 return None,什么也没有 直接写 return 也是 一个效果 return magicians ,函数调用返回一个值,值为 magicians,可以用变量接受,或直接传参。

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧