函数的返回值

1.函数的返回值就是函数执行返回的结果。
2.通过return来返回。
3.返回值可以是任意对象,也可以是函数。

def ln():
    return 100

i = ln()      #我们可以通过一个变量去接收函数的返回值
print(i)

4.如果仅仅写一个return或者不写,则相当于return None一个空。
5.在函数当中,执行到return时,后面的代码则不在执行,直接结束函数。

文档字符串

1.help()函数是python中的内置函数,可以查询某个函数的用法。
2.在定义函数时,我们可以在函数中编写文档字符串,文档字符串就是对函数的说明。

def ln():
    '''
    这个函数是一个文档字符串的实例
    参数
        a:作用  类型  默认值......
        b:作用  类型  默认值......
        c:作用 类型   默认值......
    '''
    return 100
help(ln)

函数的作用域

1.作用域
作用域是指变量生效的区域
在python中共有两种作用域
全局作用域
全局作用域在程序执行时创建,结束时销毁。
所有函数外的区域都为全局作用域,在全局作用域中定义的变量,在任何区域都可以进行访问。

def fn():
    a =10  #a定义在函数内部,他的作用域就是在函数内部,在外部无效
    print('函数内部','a = ',10)
fn()
a = 20 #a定义在函数外部,他的作用域就全局作用域,可以在任何区域访问
print('函数外部','a = ',a)

函数作用域
函数作用域在函数调用时创建,结束时销毁,在函数作用域中创建的变量为局部变量,只在函数内部中有效。
函数每调用一次就产生一个新的函数作用域。

def fn():
    a =10 #a定义在函数内部,他的作用域就是在函数内部,在外部无效
    print('函数内部','a = ',10)
fn()
print('函数外部','a = ',a)#报错,找不到a

2.global a
在函数中声明这个a为全局作用域。

a = 10
def ln():
    def ln2():
        global a
        a = 50
        print('内部','a = ',a)
    ln2()

ln()
print('外部','a = ',a)

输出的结果为:
内部 = 50
外部 = 50

命名空间

命名空间其实就是一个字典,一个专门用来存储变量的字典。
locals()用来获取当前作用域的命名空间
如果在全局作用域中调用,它就是全局作用域命名空间,如果在函数中调用,就是函数作用域命名空间。
返回值是一个字典。
1.全局作用域中命名空间

a = 30
def fn3():
    a = 50
    print('内部',a)
s = locals()#获取当前全局作用域的命名空间
s['c'] = 100
print(s['a'])  结果为30
print(c)       结果为100

2.函数作用域中命名空间

a = 30
def ln():
    def ln2():
        a = 20
        s = locals()
        s['c'] = 100
        global_s = globals()
        print(global_s)
    ln2()
ln()

递归函数

1.递归
递归函数的简单理解就是自己去引用自己,递归式函数,在函数中自己调用自己。
如无穷递归,类似死循环:

def ln():
    ln()
ln()

递归是一种解决问题的方式,他的整体思想是将大的问题分解为一个一个的小问题,直到问题无法分解时,再去解决问题。
2.递归式的函数有两个条件
(1)基线条件
问题可以被分解最小问题时,满足基线条件,递归就不在执行。
(2)递归条件
将问题可以继续分解的条件。
例如:

#用递归的方式来求任意数的阶乘
def fn(n):
     # n是所求阶乘的数字
     # 10! = 10 * 9!    递归条件
     # 9! = 9 * 8!      递归条件
     #8! = 8 * 7!       递归条件
     #基线条件
     if n == 1:
        #1的阶乘就是1
        return 1
    #递归条件
     return n * fn(n-1)
print(fn(10))