1.函数的返回值
- 函数执行以后的返回结果
- 通过return开指定函数的返回值
- return后面课跟任意的对象,也可以是一个函数
- retur后面的函数都不会执行
def fn():
return 123
r=fn()
print(r)
#123
2.文档字符串
- help()是python中的内置函数,通过help()函数可以查询python中函数的用法
- 在定义函数时,可以在函数内部编写字符串就是对函数的说明
def fn2(a,b,c):
'''
这是一个文档字符串
参数的作用
:param a:作用...类型...默认值...
:param a:作用...类型...默认值...
:param a:作用...类型...默认值...
:return:
...
'''
return 123
help(fn2)
3.函数的作用域
-
作用域(scope)
-
作用域指的是变量生效的区域
-
在python中一共有两种作用域
1.全局作用域
- 全局作用域在程序执行时创建,在程序执行结束时销毁
- 所有的函数意外的区域都是作用域
- 在全局作用域中定义的变量,都是全局变量,全局变量可以在程序任意的位置进行访问
2.函数作用域
- 函数作用域在函数调用时创建,在调用结束时销毁
- 函数没吊用一次就会产生一个新的函数作用域
- 在函授作用域中定义的变量,都是局部变量,他只能在函授内部访问
a=20
def fn3():
#如果希望在函数内部修改全部变量,则需要使用一个global关键字,来声明变量
global a
#声明在函授内部的a是全部变量,此时我们修改a,就是修改全部变量
a=10
print('函数内部','a=',a)
fn3()
print('函数外部','a=',a)
#函数内部 a= 10
#函数外部 a= 10
4.命名空间
- 命名空间实际是一个字典,是一个专门用来储存变量的字典
- locals()用来获取当前作用域的命名空间
- 如果在全局作用域中吊钟locals()则获取全局命名空间,如果在函数作用和域中调用locals()则获取函数命名空间
- 返回值是一个字典
a=10
b=20
scope=locals()#获取当前的命名空间
print(scope)
#{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__':
<_frozen_importlib_external.SourceFileLoader object at 0x0000020203BF2910>,
'__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins'
(built-in)>, '__file__': 'D:/untitled/2/2.py', '__cached__': None, 'a': 10,
'b': 20, 'scope': {...}}
#a,b都以字典形式储存起来了
5.递归函数
- 递归是解决问题的⼀种⽅式,它的整体思想,是将⼀个⼤问题分解为⼀个个
的⼩问题,直到问题⽆法分解时,在去解决问题 - 递归式函数有2个条件
1.基线条件 问题可以被分解为最⼩问题,当满⾜基线条件时,递归就不执⾏了
2.递归条件 可以将问题继续分解的条件
def fn(n):
if n == 1:
return 1
return n * fn(n - 1)
while True:
A=input('请输入数字:')
if A=='y':
break
else:
break
A=int(A)
print(fn(A))
# B=input('请问是否继续:')
#当n=10时
return 10*fn(9)
return 10*9*fn(8)
return 10*9*8*fn(7)
.......