函数的返回值
返回值就是返回函数执行的结果
通过return来指定函数的返回值
求任意数的和
def fn(*args):
r = 0
for n in args:
r += n
print(r)
return r
r = fn(1,2,3)
print(r-4)
函数的返回值可以直接使用函数的返回值,另一种方式通过一个变量来接收函数的返回值
return 后面可以跟任意的对象,甚至可以是一个函数
在函数中,return后的代码都不会执行,return一旦执行函数自动结束
def fn4():
for i in range(5):
if i == 3:
break 用来退出当前循环
return 函数结束
continue 用来跳过当次循环
print(i)
print('循环执行完毕')
fn4()
文档字符串
- help()内置函数 可以查询python中函数的用法
- 语法 help(函数对象)(不加函数对象不加括号)
- 在定义函数的时候,可以在函数内部编写文档字符串,文档字符串就是函数的说明
- 当我们编写了文档字符串时,就可以通过help()函数来查看函数的说明
def fn(a,b,c):
'''
这是一个文档字符串的示例
这个函数的作用.......
:param a: 作用 类型 默认值...
:param b: 作用 类型 默认值...
:param c: 作用 类型 默认值...
:return: 需要/不需要
'''
return 123
help(fn)
函数的作用域
作用域(scope) 指的就是变量生效的区域
在python当中一共有2中作用域
全局作用域
在程序执行的时候创建,在程序执行结束的时候销毁,所有函数以外的区域我们都认为是全局作用域,在全局作用域当中我们定义的变量都属于全局变量,可以在程序的任意位置被访问。
函数作用域(局部作用域)
在函数调用的时候创建,在调用结束的时候销毁,函数每调用一次就会产生一个新的函数作用域,在函数作用域中定的变量都是局部变量,只能在函数内部被访问。
a = 456
def fn3():
在函数内部修改全局变量,需要使用global关键字,来声明局部变量
global a 声明在函数内部使用的a是全局变量,此时去修改a,就是在修改全局的a
a = 123
print('函数内部a =',a)
fn3()
print('函数外部a =',a)
命名空间 - 命名空间就是一个字典,是一个专门用来保存变量的字典
- locals() 用来获取当前作用域的命名空间 返回一个字典
a = 123
b = 456
scope = locals()
print(a)
print(scope['a'])
向scope里面添加了一个key-value
scope['c'] = 789
print(c)
a = 123
b = 456
def fn():
a = 1
scope = locals() 在函数内部调用locals()会获取函数的命名空间
scope['c'] = 789
print(scope)
fn()
globals() 函数可以用来获取全局的命名空间
a = 123
b = 456
def fn():
a = 1
global_scope = globals()
print( global_scope )
fn()
递归函数
定义一个函数来实现任意数的阶乘
def fn(n):
参数n 代表要求阶乘的数字
r = n
for i in range(1,n):
r *= i
return r
print(fn(3))
递归简单理解是就是自己引用自己
递归式的函数,在函数中自己调用自己
递归式解决问题的一种思想,它和循环很想
它的整体思想是吧一个大的问题分解为一个小的问题,知道问题无法分解时,再去解决问题
递归函数的两个条件
基线条件
问题可以被分解为最小的问题,当满足基线条件是,递归就不在执行了
递归条件
将问题继续分解的条件
用递归的思想解决任意数的阶乘问题
def fn2(n):
(基线条件)
if n == 1:
return 1
(递归条件)
return n * fn2(n-1)
print(fn2(10))
递归函数练习
定义一个函数 为任意数字做任意的幂运算
def fn1(n,i):
参数 n 代表任意数字 i 代表给任意数字做任意的幂运算 5 ** 3(n就是5 i就是3)
1.基线条件
if i == 1:
** 求1次幂**
return n
2.递归条件 10 * 10 ** 4 10 ** 5
return n * fn1(n,i-1)
print(fn1(8,8))
定义一个函数,用来检测任意的一个字符串是否是回文字符串,如是返回Ture 不是返回false
回文字符串 字符串从前往后从后往前念是一样的 例如:abcba
def fn2(s):
参数s表示要检查的字符串是否是回文字符串
1. 基线条件
if len(s) < 2:
return True
elif s[0] != s[-1]:
return False
2.递归条件
return fn2(s[1:-1])
print(fn2('abcdegedcba'))