day008 笔记 07-25

2018-07-25  本文已影响0人  Yehao_

函数的调用:
a. 先回到函数调用的位置
b. 用实参给形参赋值(传参)
c. 执行函数体
d. 执行完函数体,将返回值返回给函数调用表达式
e. 回到函数调用的位置

2.return关键字

a.将return后面的值,返回给函数表达式 可以有多个返回值 返回值组成一个元组
b.结束函数

3.函数调用表达式

python中的每个函数调用表达式都是有值的

3.函数的结束:

a.函数体执行完
b.遇到return

global和nonlocal
当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。

def glb_demo():
global var # 需要使用 global 关键字声明
var = 10

要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字

4.匿名函数

匿名函数:本质函数函数,以另一种简单的方式来声明
lambda 参数列表: 返回值 --> 结果是一个函数变量

5.递归函数

递归函数:在函数体中调用函数本身

理论上循环能做的事情,递归都可以

怎么写一个递归函数:
a.找临界值(跳出循环 -> return)
b.找关系:假设当前函数对应的功能已经实现,找到f(n)和f(n-1)的关系
c.使用f(n-1)与前面找到的关系去实现f(n)的功能

对递归的要求:能不用就不用
函数调用的过程是一个压栈的过程(每调用一次函数,系统都为其分配内存空间,
用来存储函数中声明的变量和参数等,这个内存会在函数调用结束后自动销毁)

# 写一个递归函数:1+2+3+...+N

# 循环:
def my_sum1(n):
    sum1 = 0
    for i in range(n+1):
        sum1 += i
    return sum1

# 递归
def my_sum2(n):
    # 1.找到临界值
    if n == 1:
        return 1
    # 2.找到my_sum2(n)和my_sum2(n-1)的关系
    """
    my_sum2(n):1+2+3+...+(n-1)+n
    my_sum2(n-1):1+2+3+...+(n-1)
    """
    # 3.使用my_sum2(n-1)去实现my_sum2(n)的功能
    return my_sum2(n-1) + n

print(my_sum1(5))
print(my_sum2(5))


Output:
15
15
# # 使用递归实现
# n = 4
# ****
# ***
# **
# *
# n = 3
# ***
# **
# *

# 关系:先打印n个*,再打印f(n-1)
def print_shape(n):
    char = '*'
    if n == 1:
        print(char*n)
        return None
    print(char*n)
    print_shape(n-1)

print_shape(4)

def print_shape_reverse(n):
    char = '*'
    if n == 1:
        print(char*n)
        return None
    print_shape_reverse(n-1)
    print(char*n)

print_shape_reverse(4)
上一篇下一篇

猜你喜欢

热点阅读