⽂档字符串
函数的作⽤
域命名空间
递归函数
⽂档字符串
help()是Python中内置函数,通过help()函数可以查询Python中函数的⽤法
在定义函数时,可以在函数内部编写⽂档字符串,⽂档字符串就是对函数的
说明
案列:
help(print)
结果:
print(...)
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
案例:
def fn(a:int,b:str,c:bool)->int:
'''
这个函数的功能就是一个文档字符串在函数中的使用说明
参数
a,作用,类型,默认值...
b,作用,类型,默认值...
c,作用,类型,默认值...
返回值
'''
return 1
help(fn)
结果:
Help on function fn in module __main__:
fn(a: int, b: str, c: bool) -> int
这个函数的功能就是一个文档字符串在函数中的使用说明
参数
a,作用,类型,默认值...
b,作用,类型,默认值...
c,作用,类型,默认值...
返回值
命名空间
- 在Python中,所有的名字都存在一个空间中,它们在该空间中存在和被操作——这就是命名空间。它就像一个盒子,每一个变量名字都对应装着一个对象。当查询变量的时候,会从该盒子里面找到相应的对象。
- 命名空间实际上就是⼀个字典,是⼀个专⻔⽤来存储变量的字典
- locals()⽤来获取当前作⽤域的命名空间
- 如果在全局作⽤域中调⽤locals()则获取全局命名空间,如果在函数作⽤域中 调⽤locals()则获取函数命名空间 返回值是⼀个字典
- glaobals() 可以调出全局的命名空间
案列:
a = 20
b = 30
c = 100
def fn4():
a = 50
scope = locals()
scope['c'] = 1000
print(scope)
print(c)
g = globals()
print(g)
fn4()
结果:
{'a': 50, 'c': 1000}
100
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x03C9AF58>, '__spec__': None, '__annotations__'
递归函数
- 递归是解决问题的⼀种⽅式,它的整体思想,是将⼀个⼤问题分解为⼀个个 的⼩问题,直到问题⽆法分解时
- 通俗来讲就是自己引用自己:从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事,讲的是从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事…
条件
- 在去解决问题 递归式函数有2个条件:
-
- 基线条件 问题可以被分解为最⼩问题,当满⾜基线条件时,递归就不 执⾏了
- 2.递归条件 可以将问题继续分解的条件
递归
求10 的阶乘:
n = 1
for i in range(1, 10):
n *= i
print(n)
结果:
362880
求任意数阶乘:
def fn(n):
r = n
for i in range(1, n):
# print(i)
r *= i
return r
print(fn(10))
结果:
3628800
用递归求任意数阶乘:
# 10! = 10 * 9!
# 9! = 9 * 8!
# ...
# 1! = 1
def fn3(n):
# 1. 基线条件 判断如果用户让求的数字是1的情况我们就满足基线条件了就不在递归了
if n == 1:
# 1的阶乘就是1
return 1
# 2. 递归条件 9 * 8!
return n * fn3(n-1)
print(fn3(10))
结果:
3628800
定义一个函数,用来检查一个任意的字符串是否是回文字符串,如果是返回True,不是返回False。回文字符串从前往后念和从后往前念是一样的。例如 TNT
def fn(s):
if len(s) <= 2:
return False
else:
a = reversed(list(s))
if list(a) == list(s):
return True
else:
return False
i=input('请输入一个大于2的字符串:')
print(fn(i))
结果:
请输入一个长度大于2的字符串:12321
True