一、函数的返回值
1.什么是函数的返回值:
(1)就是函数调用表达式的值;
(2).就是retur n关键字后的表达式的值;
(3)就是函数执行完成后返回给调用者的值
2.函数的调用过程
函数的调用过程:
第一步:将实参传递给形参(传参:用实参给形参赋值)
第二步:执行函数体
第三步:获取返回值(这个时候回到函数调用的位置)
注意:
函数在声明的时候不会调用
如何看一个函数的返回值是多少:就看retrun后面的结果!!,如果没有return就是None
3.返回值
(1).函数调用表达式: 就是调用函数的那个表达式(这个表达式是有值的,默认是None)
【例】
def func1():
print('hello world')
# func1()就是函数调用表达式,它是一个值;
# 普通的值能做的事情,函数调用表达式都能做;例如:给变量赋值,打印(可以作为实参传给函数),运算等
result = func1()
print(result, func1())
这里 func1就是一个函数,
普通的值能做的事情,函数调用表达式都能做;例如:给变量赋值,打印(可以作为实参传给函数),运算等
(2)return :
作用:1.将值传给函数调用者(函数调用表达式) 2.结束函数
如果函数中没有return, 就相当于在函数结束的时候后面加了一个return None
【例】写一个函数,获取两个数 的乘积(注意是获取,不是但打印)
def qf_multiply(num1, num2):
return num1 * num2
result = qf_multiply(10, 3)
print(result)
所以我们这里用的retutrn来返回
(3)函数的结束
a.没有return,函数体执行完毕,函数结束
b.如果函数中有return,遇到return函数就结束。程序直接回到函数调用位置,接着往下执行
def func3():
print('hello')
return 10
print('world') #打印不出来
print(func3())
很明显上面的第二个print函数不会打印出来,因为函数遇到return就结束了
【例】编写一个函数,找出100-200之间第一个能被13整除的数
def qf_find_num():
for x in range(100, 201):
if x % 13 == 0:
return x
print(qf_find_num())
【变式提升】编写一个函数,找出100-200之间第一个能被13整除的数
ef func3():
count = 0
for x in range(100,201):
if x % 13 == 0:
count += 1
if count == 3:
return x
二、将列表作为参数
注意,将列表变量作为实参传递给函数,如果在函数中改变了列表的元素,那么原来列表元素也会改变
【例】写一个函数,删除指定列表中的偶数
def del_list(list):
index = 0
while index < len(list):
if list[index] % 2 == 0:
del list[index]
index -= 1
index += 1
print(list)
list2 = [1, 2, 3, 4]
del_list(list2)
# 注意,将列表变量作为实参传递给函数,如果在函数中改变了列表的元素,那么原来列表元素也会改变
print(list2)
list2 = [1, 2, 3, 4]
del_list(list2[:])
print(list2)
控制台输出结果
[1, 3]
[1, 3]
[1, 3]
[1, 2, 3, 4]
这里说明两点:将列表变量作为实参传递给函数,如果在函数中改变了列表的元素,那么原来列表元素也会改变所以index -=1那一步生成新的下标(索引)
list[ : ]代表复制了元列表,而原来列表的内容不改变
三、函数变量
回顾一下函数的格式
def 函数名(参数列表):
函数体
我们在声明函数的时候,其实就是在声明一个类型是函数类型(function)的变量。普通变量能做的事情,函数变量都能做
1.函数名就是函数类型变量(类型名:function),存的是函数入口的地址
def func1():
print('aaa')
print(type(func1)) # <class 'function'>
num = 10
print(type(num)) # <class 'int'>
type()用来输出函数类型的函数
2. 可以用一个变量给另外一个变量赋值
a = func1() 这样赋值,是将函数func1的返回值赋给a,将函数变量func1赋给a, a就会变成一个函数
a( ) 现在就可以用函数变量a,去调用函数func1
def func2(num):
return num*2
b = func2
print(func2(10))
print(b(20))
<补充>isinstance() 函数====判断一个对象是否是一个已知的类型,类似 type
sinstance() 与 type() 区别:
-
type() 不会认为子类是一种父类类型,不考虑继承关系。
-
isinstance() 会认为子类是一种父类类型,考虑继承关系。
如果要判断两个类型是否相同推荐使用 isinstance()。
格式====isinstance(object, classinfo)
3. 函数变量作为函数的参数
# num1 = 10 num2 = 20 fn = func_add
# 如果num1不是int或者float数据
if not (isinstance(num1, int) or isinstance(num1, float)):
print('num1不是数字')
return None # 在这儿让函数直接结束
if not (isinstance(num2, int) or isinstance(num2, float)):
print('num2不是数字')
return None # 在这儿让函数直接结束
return fn(num1, num2) # return func_add(10, 20) return 30
def func_add(m, n):
# m = 10 n = 20
return m + n # return 30
def func_sub(m, n):
return m - n
result = calculate(10, 20, func_add)
print(result)
4.然函数作为函数的返回值
在python中可以将函数作为函数的返回值,也可以在函数中声明 函数
【例】 写一个函数,func3('+') -> 返回求和的功能;func3('*')-> 返回求乘积的功能
def func3(char):
if char == '+':
# python中,是可以在函数中声明函数
def fn(*nums):
sum1 = 0
for x in nums:
sum1 += x
return sum1
return fn
if char == '*':
def fn(*nums):
sum1 = 1
for x in nums:
sum1 *= x
return sum1
return fn
result = func3('+') # reslut是一个求和功能的函数的函数变量
print('aaa', result(1, 2, 3, 4))
result2 = func3('*')(10, 20)
print(result2)
# 列表作为返回(对象变量作为返回值)
def func4():
list1 = [1, 2, 3]
return list1
result = func4()
print(result)
print(func4()[0])