Python递归算法以及命名空间

枫铃3年前 (2021-09-30)Python237

递归算法

递归是一种编程的思路或者可以说是一种算法,并没有标准的语句结构或者语法等限制,只需满足条件即可算是递归。

递归条件

  • 基线条件
    基线条件是防止递归无限循环下去必不可少的条件,当条件满足基线条件时,递归就不在执行。
  • 递归条件
    问题可以被分解成无数个小问题,而满足递归条件,则问题会被继续分解下去

递归例子

10的集乘:
10的集乘相当于,109的集乘,9的集乘相当于98的集乘,以此类推,为递归条件
而当乘到1时,集乘结束,为基线条件

# 集乘的递归
def fn(a):
    if a == 1:
        return 1
    return a * fn(a-1)

data = fn(10)
print(data)

回文:
字符串前半段和后半段一一对应的称之为回文,列如zxcvbvcxz。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 回文的递归思路
def fn(a):
    if len(a) <= 1:
        data = True
        return data
    elif a[0] != a[-1]:
        data = False
        return data
    return fn(a[1:-1])

s = 'asdfdsa'
a = fn(s)
print(a)

命名空间

命名空间是一个专门用来存储变量的容器,Python中的命名空间是以字典的的形式存在的。

命名空间可以用关键字 locals() 来获得

全局作用域命名空间

在全局作用域中调用locals()时可以获得全局作用域命名空间

在全局作用域中调用locals()时不仅会输出全局变量,函数等还会输出一些内置的变量,下面我就就来解读一下个内置变量的含义,出现在全局变量中的key,都是全局变量。

内置变量说明name用来标识模块的名字。这里分两种情况:如果是主模,此模块名字默认是__main__;不是主模块,则此模块名字为文件名字。doc用来访问模块,类声明或者函数的声明中第一个未被赋值的字符串.package用于避免模块名冲突loader存储对象本身file程序保存的路径builtins用来保存Python中一些内建的函数,比如说max,min这类不用创建就能使用的函数

还有的’spec’: None, ‘annotations’: {},‘cached’: None,作用未知,等之后我搞清楚了回来这个更新的。

函数命名空间

在函数中使用locals()即可获取到函数内部的命名空间,如果在函数中想要获取全局作用域命名空间可以使用==globals()==方法

def fn():
    data_fn = locals()
    print('我是函数内部的命名空间', data_fn) # 我是函数内部的命名空间 {}
    data_all = globals()
    print('我在函数内部获取到了全局作用域', data_all) 
# 我在函数内部获取到了全局作用域 {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000002858CC230C8>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'I:/递归算法.py', '__cached__': None, 'fn': <function fn at 0x000002858D104048>}
data = locals()
print('我是全局命名空间', data)
# 我是全局命名空间 {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000002858CC230C8>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'I:/递归算法.py', '__cached__': None, 'fn': <function fn at 0x000002858D104048>, 'data': {...}}

相关文章

Python | 5分钟搞定 Python3 元组

Python | 5分钟搞定 Python3 元组

简介 Python3 中元组表现为如下形式: 元组(tuple)是一种静态的(immutable)或者说是不可变(unchangeabl...

白话 Python 的函数式编程

今天和大家聊聊 Python 的函数式编程特性。所谓函数式编程,就是指代码中每一块都是不可变的(immutable)...

Python中的四种交换数值的方法

交换两个变量的值方法,这...

python实现顺序查找和哈希查找

顺序查找非常简单,只是个开胃菜,今天主要练习的是哈希查找 先上顺序查找代码: def sequence_sear...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。