1.函数的返回值

返回值就是函数执行以后返回的结果

通过return来指定函数的返回值

可以直接使用函数返回值,也可以通过一个变量来接收函数的返回值

def fonaA():

return 123

r = fonaA()

print(r)

print(fonaA())

输出结果:

123

renturn后面可以跟任意对象,返回值甚至可以是一个函数

def fonaA():

def fn1():

print('python')

return fn1

r = fonaA()

print(r)

r()

输出结果:

.fn1 at 0x7fe60ba02790>

python

rentun一旦执行函数自动结束,return后面的代码不在执行

def fn3():

print('python')

return

print('啦啦啦')

fn3()

输出结果:

python

2.文档字符串

help()是Python中内置函数,通过help()函数可以查询Python中函数的用法

在定义函数时,可以在函数内部编写文档字符串,文档字符串就是对函数的说明

语法

help(函数对象)

举个🌰

def abc(a,b,c):

'''

这个函数的功能就是一个文档字符串在函数中的使用说明

参数

a 作用,类型,默认值...

b 作用,类型,默认值...

c 作用,类型,默认值...

返回值

'''

return 1

help(abc)

打印结果:

abc(a, b, c)

这个函数的功能就是一个文档字符串在函数中的使用说明

参数

a 作用,类型,默认值...

b 作用,类型,默认值...

c 作用,类型,默认值...

返回值

3.函数的作用域

作用域(scope)

作用域指的是变量生效的区域

def fn():

a=10

print('函数内部:a=',a)

fn()

print('函数外部:a=',a)

输出结果:#报错

NameError: name 'a' is not defined

函数内部:a= 10

在Python中一共有两种作用域

1.全局作用域

全局作用域在程序执行时创建,在程序执行结束时销毁

所有函数以外的区域都是全局作用域

在全局作用域中定义的变量,都是全局变量,全局变量可以在程序的任意位置进行访问

b=20

def fn():

a=10

print('函数内部:a=',a)

print('函数内部:b=', b)

fn()

print('函数外部:b=',b)

打印结果:

函数内部:a= 10

函数内部:b= 20

函数外部:b= 20

2.函数作用域

函数作用域在函数调用时创建,再调用结束时销毁

函数每调用一次就会产生一个新的函数作用域

在函数作用域中定义的变量,都是局部变量,它只能在函数内部被访问

#a只能在函数内部访问

def fn():

a=10

print('函数内部:a=',a)

fn()

print('函数外部:a=',a)

输出结果:#报错

NameError: name 'a' is not defined

函数内部:a= 10

注意:

如果希望在函数内部修改全局变量,则需要使用一个关键字global,来声明变量

a=20

def fn():

global a

a=100

print('函数内部:a=',a)

fn()

print('函数外部:a=',a)

打印结果:

函数内部:a= 100

函数外部:a= 100

4.命名空间

命名空间实际上就是一个字典,是一个专门用来存储变量的字典

locals()用来获取当前作用域的命名空间

如果在全局作用域中调用locals()则获取全局命名空间,如果在函数内部调用locals()则获取函数命名空间

返回值是一个字典

a=20

b=30

print(locals())

打印结果:

{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.sourcefileloader object at>, '__spec__': None, '__annotations__': {}, '__builtins__': , '__file__': '/Users/XXX/PycharmProjects/pythonProject/llll.py', '__cached__': None, 'a': 20, 'b': 30}

***************************************

函数内部调用

def fn4():

a=20

print(locals())

fn4()

打印结果:

{'a': 20}

5.递归函数

5.1递归定义:

如果函数中包含了对其自身的调用,该函数就是递归的;(自己调用自己)

递归,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法;

5.2递归思想:

递归是解决问题的一种方式,它的整体思路,就是将一个大问题分解为一个个的小问题,直到问题无法分解时,再去解决问题

5.3基本要素:

递归函数有2个条件

1.基线条件

问题可以被分解成为最小问题,当满足基线条件时,递归就不执行了

2.递归条件

可以将问题继续分解的条件

举个🌰

求10的阶乘(10!)

1!=1

2!=1*2=2

3!=1*2*3=6

...

10!=1*2*3*4*5*6*7*8*9*10=3628800

def fn(n):

#1.基线条件,判断如果用户让求的数字是1的情况,我们就满足基本条件,就不在递归了

if n==1:

#1的阶乘是1

return 1

return n*fn(n-1)

print(fn(10))

打印结果:

3628800

练习

定义一个函数,来为任意数字做任意幂运算 n**i

def fn(n,i):

if i==1:

return n

return n*fn(n,i-1)

print(fn(5,3))