函数二
再介绍一下函数的创建
1 函数的返回值
即函数执行后返回的结果
- 函数return,指定函数的返回值(可以返回任意对象)
def f():
return '123'
r = f()
print(r) # 函数的返回值
print(f) # 函数对象
print(f()) # 函数的返回值
#
def f1():
for i in range(5):
if i == 3:
# break # 退出循环语句
return # 退出函数定义语句
print(i)
print('函数定义完毕')
f1()
2 文档字符串
即‘‘‘ ’’’,字符串中的格式不变(在自定义函数内编写文档字符串,作为函数的说明)
- 函数help,查询函数(sep为打印值之间的插入,默认为空格)
help(print) # 查询函数print
print('www','Github','com',sep='.') # sep为打印值之间的插入,默认为空格
# 自定义函数:
def f(a=int(0),b=int(0),c=int(0))->float:
'''
加法函数
:param a:加数,整数类型,默认为0
:param b:加数,整数类型,默认为0
:param c:加数,整数类型,默认为0
:return: 和,小数类型,默认为None
'''
c = a + b + c
return c
help(f)
n = f(1,2,3)
print(n)
3 函数的作用域
即变量生效的区域scope,分为函数作用域和全局作用域
- 全局定义域:(用于全局变量)
a = 1
def f():
print('函数内a=',a)
f()
print('函数外a=',a)
- 函数作用域:(用于局部变量,全局变量)
def f():
a = 1
print('函数内a=',a)
f()
# print('函数外a=',a) # 错误:未在函数外定义a
- 关键字global(申明为全局变量):
def f():
global a # 申明a为全局变量
a = 1
print('函数内a=',a)
f()
print('函数外a=',a) # 打印:已在全局定义a
4 命名空间
即存储作用域内所有对象的字典(类似指针)
- 函数locals,获取当前作用域的命名空间并返回字典
函数globals,获取全局作用域的命名空间并返回字典
a = 1
x = locals() # 获取全局作用域
print(x)
print(x['a'])
##
def f():
a = 1
x = locals() # 获取函数作用域
print(x)
f()
##
a = 1
def f():
x = globals() # 获取全局作用域
print(x)
f()
5 递归
- 递归函数:即函数调用它本身
- 递归方法:将一个问题逐步分解为若干小问题,直到无法分解为止,再进行求解
- 两个条件:1.基线条件,问题停止分解的条件;2.递归条件,问题继续分解的条件
- 无穷递归(死循环):
def f():
f()
- 求任意数的阶乘:
def f(n):
if n == 1: # 基线条件(当n=1时)
return 1
return n*f(n-1) # 递归条件(当n!=1时)
print(f(10))
- 求任意数的任意次幂:
def f(m,n):
if n == 1:
return m
return m*f(m,n-1)
print(f(10,5))
- 判断回文字符串(如abcba):
def f(a):
if len(a) < 2: # 基线条件(字符串中只有一个元素)
return True
elif a[0] != a[-1]: # 基线条件(字符串头尾不等)
return False
return f(a[1:-1]) # 递归条件(字符串头尾做切片)
print(f('abccba'))