函数的返回值
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))