Python递归算法以及命名空间

-xunmi- 2021-09-07 原文


Python递归算法以及命名空间 – Python小知识2


递归算法

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

递归条件

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

递归例子

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。

# 回文的递归思路
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:/我的大学/学习/Python/测试/venv/递归算法.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:/我的大学/学习/Python/测试/venv/递归算法.py\', \'__cached__\': None, \'fn\': <function fn at 0x000002858D104048>, \'data\': {...}}
发表于
2019-10-19 01:09 
O寻_觅O 
阅读(125
评论(0
编辑 
收藏 
举报

 

版权声明:本文为-xunmi-原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/-xunmi-/p/12227431.html

Python递归算法以及命名空间的更多相关文章

随机推荐

  1. PIC16C5X单片机概述

    PIC16C5X单片机概述 —深圳市凌雁电子有限公司       PIC系列单片机是美国Microchip公司 […]...

  2. VSCode插件开发全攻略(十)打包、发布、升级

    更多文章请戳VSCode插件开发全攻略系列目录导航。 发布方式 插件开发完了,如何发布出去分享给他人呢?主要有 […]...

  3. lcd timing的理解

    所谓调lcd timing就是去调lcd时序,一般是6个部分:HFPD(在一行扫描以前需要多少个像素时钟),H […]...

  4. 新的开始 | Arthas GitHub Star 破万后的回顾和展望

    一切新的开始,都始于一个里程碑。 2月20日上午,Java 开源诊断工具 Arthas 的 GitHub St […]...

  5. Windos系统git提交

    一、$ git status   //查看当前项目下所有文的状态,如果第一次,你会发现都红颜色的,因为它还没有 […]...

  6. iphone开发笔记(三) – Tracy E

    iphone开发笔记(三) 2010-08-21 20:35  Tracy E  阅读(1338)  评论(4 […]...

  7. 数组

    一、什么是数组      在内存空间中开开辟的,一连串的空间,且长度不可变 ,存数的数据类型必须要一致。   […]...

  8. 重新整理 .net core 实践篇—————日志系统之结构化[十八]

    前言 什么是结构化呢? 结构化,就是将原本没有规律的东西进行有规律话。 就比如我们学习数据结构,需要学习排序然 […]...

展开目录

目录导航