1、函数的返回值
返回值就是函数执⾏以后返回的结果通过return来指定函数的返回值可以直接使用函数的返回值,也可以通过一个变量来接收函数的返回值return后⾯可以跟任意对象,返回值甚⾄可以是⼀个函数
def fn():
return 345
r
= fn
()
print(r
)
如果仅仅写一个return,或者没有写return,相当于return Nonereturn一旦执行,函数自动结束
def fn3():
print('hello')
return
print('python')
r
= fn3
()
print(r
)
return可以用来结束函数
def fn4():
for i
in range(5):
if i
== 4:
break
print(i
)
print('循环结束')
fn4
()
def fn4():
for i
in range(5):
if i
== 4:
return
print(i
)
print('循环结束')
fn4
()
def fn4():
for i
in range(5):
if i
== 4:
break
print(i
)
print('循环结束')
print(fn4
())
def fn4():
for i
in range(5):
if i
== 4:
return
print(i
)
print('循环结束')
print(fn4
())
求任意数的加和
def s(*a
):
r
= 0
for n
in a
:
r
+= n
return r
r1
= s
(1,24,6,8)
print(r1
)
2、文档字符串
help()是Python中内置函数,通过help()函数可以查询Python中函数的⽤法在定义函数时,可以在函数内部编写⽂档字符串,⽂档字符串就是对函数的说明
def fn(a
,b
,c
):
'''
这个函数的功能是一个文档字符串在函数中的使用说明
参数
a,作用,类型,默认值...
b,作用,类型,默认值...
c,作用,类型,默认值...
返回值
'''
return
help(fn
)
Help on function fn
in module __main__
:
fn
(a
, b
, c
)
这个函数的功能是一个文档字符串在函数中的使用说明
参数
a
,作用
,类型,默认值
...
b
,作用
,类型,默认值
...
c
,作用
,类型,默认值
...
返回值
def fn(a
:int,b
:str,c
:bool) -> int:
'''
这个函数的功能是一个文档字符串在函数中的使用说明
参数
a,作用,类型,默认值...
b,作用,类型,默认值...
c,作用,类型,默认值...
返回值
'''
return
help(fn
)
Help on function fn
in module __main__
:
fn
(a
:int, b
:str, c
:bool) -> int
这个函数的功能是一个文档字符串在函数中的使用说明
参数
a
,作用
,类型,默认值
...
b
,作用
,类型,默认值
...
c
,作用
,类型,默认值
...
返回值
3、函数的作用域
作⽤域(scope)作⽤域指的是变量⽣效的区域
a
= 30
def fn():
b
= 40
print('函数内部','a = ',a
)
print('函数内部','b = ',b
)
fn
()
print('函数外部','a = ',a
)
在Python中⼀共有两种作⽤域
全局作⽤域
全局作⽤域在程序执⾏时创建,在程序执⾏结束时销毁所有函数以外的区域都是全局作⽤域在全局作⽤域中定义的变量,都是全局变量,全局变量可以在程序的 任意位置进⾏访问 函数作⽤域 (局部作用域)
函数作⽤域在函数调⽤时创建,在调⽤结束时销毁函数每调⽤⼀次就会产⽣⼀个新的函数作⽤域在函数作⽤域中定义的变量,都是局部变量,它只能在函数内部被访问
def fn1():
c
= 50
def fn2():
print('fn2中 c = ',c
)
return fn2
()
fn1
()
def fn1():
c
= 50
def fn2():
c
= 400
print('fn2中 c = ',c
)
return fn2
()
fn1
()
def fn1():
c
= 50
def fn2():
c
= 400
print('fn2中 c = ',c
)
fn2
()
return fn2
()
fn1
()
如果希望在函数内部修改全局变量,则需要使用一个关键字global来声明变量
a
= 30
def fn1():
a
= 100
print('a =',a
)
fn1
()
print('a =',a
)
a
= 30
def fn1():
global a
a
= 100
print('a =',a
)
fn1
()
print('a =',a
)
4、命名空间
命名空间实际上就是⼀个字典,是⼀个专⻔⽤来存储变量的字典locals()⽤来获取当前作⽤域的命名空间如果在全局作⽤域中调⽤locals()则获取全局命名空间,如果在函数作⽤域中调⽤locals()则获取函数命名空间返回值是⼀个字典
a
= 30
b
= 40
scope
= locals()
print(scope
)
print(scope
['a'])
30
a
= 30
b
= 40
scope
= locals()
print(scope
)
print(scope
['a'])
scope
['c'] = 600
print(scope
)
def fn():
a
= 90
scope
= locals()
print(scope
)
fn
()
a
= 30
b
= 40
g
= globals()
print(g
)
5、递归函数
递归是解决问题的⼀种⽅式,类似于循环,它的整体思想是将⼀个⼤问题分解为⼀个个的⼩问题,直到问题⽆法分解时,再去解决问题。递归简单理解就是自己调用自己,递归式函数就是在函数中自己调用自己递归式函数有2个条件
1.基线条件 问题可以被分解为最⼩问题,当满⾜基线条件时,递归就不执⾏了2.递归条件 可以将问题继续分解的条件
求任意数的阶乘
def fn(n
):
r
= n
if n
> 0:
for i
in range(1,n
):
r
*= i
return r
print(fn
(10))
def fn(n
):
if n
== 1:
return 1
return n
* fn
(n
-1)
print(fn
(10))
6、练习
6.1 练习1
定义一个函数,为任意数做幂运算n**i
def fn4(n
,i
):
if i
== 1:
return n
return n
* fn4
(n
,i
-1)
print(fn4
(5,3))
6.2 练习2
定义⼀个函数,⽤来检查⼀个任意的字符串是否是回⽂字符串,如果是返 回True,不是返回False。 回⽂字符串从前往后念和从后往前念是⼀样的。 例如 TNT
def fn(s
):
if len(s
) < 2:
return True
elif s
[0] != s
[-1]:
return False
return fn
(s
[1:-1])
print(fn
('abcbab'))
print(fn
('abcba'))