一、返回值
函数并非总是将结果直接输出,相反,函数的调用者需要函数提供一些通过函数处理过后的一个或者一组数据,只有调用者拥有了这个数据,才能够做一些其他的操作。那么这个时候,就需要函数返回给调用者数据,这个就被称之为返回值,想要在函数中把结果返回给调用者,需要在函数中使用return。
二、return语句
① return语句用于退出函数,选择性的向调用者返回一个表达式。直接return的语句返回None。
eg:
#return语句用于退出函数,选择性的向调用者返回一个表达式。直接return的语句返回None。
def eg():
return
print(eg())
'''
函数返回值:需要在函数中使用 return
语法:def 函数名(参数):
函数说明
代码块
return 返回值
'''
def sum(x,y):
print('x的值是:%d'%x)
print('y的值是:%d'%y)
return x+y #返回x+y的值
num = sum(1,3) #调用sum函数并将sum函数的返回值赋值给num
print(num) #打印num
# print(sum(1,3))
注意:return后面的语句将不再执行。
eg:
#return后面的语句将不再执行。
def eg1(a):
return a
print(a)
b=eg1(5)
print(b)
②接收返回值:可使用变量保存函数的返回值(可看上面一个例子)。
③多个返回值,return语句也可以返回多个返回值。
eg:
#多个返回值
def values(x,y):
return x,y,x+y
a,b,c=values(3,5)
print(a,b,c)
三、print和return的区别
print是将结果输出到控制台,return语句结束函数的调用,并将结果返回给调用者,且返回的结果不能输出到控制台(也就是不能直接打印出来)需要通过print才能打印出来。
四、函数类型
根据参数和返回值,可将自定义函数分为四种类型:
①无参数,无返回值的函数
②无参数,有返回值的函数
③有参数,无返回值的函数
④有参数,有返回值的函数
五、迭代器和生成器
yield :就是把一个函数变成一个generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个生成器,如调用Xun函数,不会执行该函数,而是返回一个iterable迭代对象!
eg:
#yield
def Xun(max):
n=0
b=1
while n < max:
yield b
# print(b)
b+=1
n = n + 1
迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。 字符串,列表或元组,集合对象都可用于创建迭代器。迭代器有两个基本的方法:iter() 和 next()。
eg:
a=[1,2,3,4,5]
a=iter(a) #a成了一个可迭代对象,里面包含了1,2,3,4,5
#每次打印一个值
print(next(a)) #1
print(next(a)) #2
print(next(a)) #3
print(next(a)) #4
print(next(a)) #5
print(next(a)) #报错
使用了 yield 的函数被称为生成器。跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回yield的值。并在下一次从当前位置继续运行。
可以通过for循环或者手动调用 next() 方法查看值。
eg:
a=[1,2,3,4,5]
a=iter(a) #a成了一个可迭代对象,里面包含了1,2,3,4,5
# 每次打印一个值
print(next(a)) #1
print(next(a)) #2
print(next(a)) #3
print(next(a)) #4
print(next(a)) #5
print(next(a)) #报错
#使用for循环
for i in a:
print(i)
send方法,用于生成器,调用该方法,它有2个作用:
①让程序继续从上次停止的位置继续运行;
②生成器中遇到yield,会把传递的参数,赋值给yield,然后yield 再把值赋值给另一个变量。
eg:
def test():
for i in range(5):
sig = yield i
print('send by:', sig)
a = test()
print(next(a)) # 运行生成器,在yield处停止
print(a.send('a')) # 将“a”传递给sig变量,并在下一个yield处停止,返回1
print(a.send('b')) # 将“b”传递给sig变量,并在下一个yield处停止,返回2
print(next(a)) # 运行生成器,在yield处停止,sig为None