python基础入门----09认识函数(二)

一、函数的返回值

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])

猜你喜欢

转载自blog.csdn.net/ZZQHELLO2018/article/details/80990754