第九讲
函数的返回值
- 返回值就是函数执⾏以后返回的结果
- 通过return来指定函数的返回值
- return后⾯可以跟任意对象,返回值甚⾄可以是⼀个函数
- 可以直接使用函数的返回值也可以通过一个变量来接收函数的返回值
def fn():
return 123/'hello'/({'a','b'}#return后面可以跟任何变量,甚至可以是一个函数
print(fn())#直接使用函数的返回值
r=fn()
print(r)#通过一个变量来接收函数的返回值
def fn():
def fn2():
print('I love 可爱炸了形成猪')
return fn2#返回的是一个函数对象,加括号则返回的是函数的功能
r=fn()
print(r)#打印的结果r是函数对象fn2
r()#就是函数fn2
- 如果return后无任何返回,或者无return,则相当于return None,即结果为None
- return一旦执行,函数就结束
def fn():
for i in range(5):
if i == 3:
return
print(i)
print('循环执行完毕')
fn()#无返回值,则结果为0 1 2
r=fn()
print(r)#有返回值,结果为 0 1 2 None
def fn(*a):
r=0
for i in range(a):#遍历元组
r+=i
return r
r=fn(1,2,3,40)
print(r)
#结果为46
文档字符串
- help()是Python中内置函数,通过help()函数可以查询Python中函数的⽤法
help(函数名)
- 在定义函数时,可以在函数内部编写⽂档字符串,⽂档字符串就是对函数的说明
def fn(a:int,b:str,c:bool):
'''
这个函数的功能是一个文档字符串在函数中的使用说明:
文本
'''
return 1
help(fn)
函数的作用域
- 作⽤域(scope)
作⽤域指的是变量⽣效的区域 - 在Python中⼀共有两种作⽤域
- 全局作⽤域
全局作⽤域在程序执⾏时创建,在程序执⾏结束时销毁 - 所有函数以外的区域都是全局作⽤域
- 在全局作⽤域中定义的变量,都是全局变量,全局变量可以在程序的任意位置进⾏访问
- 函数作⽤域
- 函数作⽤域在函数调⽤时创建,在调⽤结束时销毁
- 函数每调⽤⼀次就会产⽣⼀个新的函数作⽤域
- 在函数作⽤域中定义的变量,都是局部变量,局部变量只能在函数内部被访问
def fn():
a=20
def fn2():
a=10
print('fn2中a=',a)
return fn2
print('fn中a=',a)
fn()#打印结果为‘fn2中a=10’,即内部函数可以看到外部,外部函数无法看到内部
- 要想在函数内部修改全局变量,需要使用一个关键字global
命名空间
- 命名空间实际上就是⼀个字典,是⼀个专⻔⽤来存储变量的字典
- locals()⽤来获取当前作⽤域的命名空间
- 如果在全局作⽤域中调⽤locals()则获取全局命名空间,如果在函数作⽤域中 调⽤locals()则获取函数命名空间
- 返回值是⼀个字典
a=20
b=20
c=26
s=locals()
print(a)
print(s['a'])#使用key值调用字典中的value值
#打印结果都是20
s['d']=200
print(d)
#执行之前程序会报错,软件不认可,但是可以执行,
#且执行结果为200(如果使用append就不会报错了)
#该种情况,在函数内部就执行不了了,会直接报错,
#这是python的一个小细节
- globals函数可以获取全局的命名空间
递归函数
- 递归是解决问题的⼀种⽅式,它的整体思想,是将⼀个⼤问题分解为⼀个个的⼩问题,直到问题⽆法分解时,在去解决问题
- 递归式函数有2个条件
- 基线条件 问题可以被分解为最⼩问题,当满⾜基线条件时,递归就不执⾏了
- 递归条件 可以将问题继续分解的条件
练习:
定义一个函数来求任意数字的任意幂运算
def fn(n,m):
if m==1:
return n
return n*fn(n,m-1)
print(9**5)
print(fn(9,5))