python函数基础算法简介
一.多层语法糖本质
""" 语法糖会将紧挨着的被装饰对象名字当参数自动传入装饰器函数中"""
def outter(func_name):
    print('加载outter')
    def wrapper(*args, **kwargs):
        print('执行了wrapper')
        res = func_name(*args, **kwargs)
        return res
    return wrapper
def outter1(fun_name1):
    print('加载了outter1')
    def wrapper1(*args, **kwargs):
        print('执行了wrapper1')
        res1 = fun_name1(*args, **kwargs)
        return res1
    return wrapper1
def outter2(fun_name2):
    print('执行了outter2')
    def wrapper2(*args, **kwargs):
        print('执行了wrapper2')
        res2 = fun_name2(*args, **kwargs)
        return res2
    return wrapper2
@outter
@outter1
@outter2
def index():
    print('from index')
index()
结果:
执行了outter2
加载了outter1
加载outter
执行了wrapper
执行了wrapper1
执行了wrapper2
from index
二.有参装饰器
一个模板
def outer(source_data):
    def login_autn(func_name):
        def inner(*args, **kwargs):
            username = input('username>>:').strip()
            password = input('password>>:').strip()
            if source_data == '1':
                print('使用字典方式处理')
            elif source_data == '2':
                print('使用其他方式处理')
            elif source_data == '3':
                print('使用某些方式处理')
            else:
                print('使用更多方式处理都行')
            res = func_name(*args, **kwargs)
            return res
        return inner
    return login_autn
@outer('3')   #函数名+括号执行优先级别最高
def user():
    print('我随便写的')
user()
结果:
username>>:thn   #加密无判断
password>>:123   #加密无判断
使用某些方式处理
我随便写的
三.递归函数
递归函数的本质:自己直接或者简介的调用了自己本身
    """直接调用本身"""
def index():
    print('我自己')
    index()
index()
结果是997~1000个‘我自己’加报错
997~1000就是python中最大递归深度
"""可以调"""
"""间接调用本身"""
def index():
   print('你好')
   func()
def func():
   print('我不好')
   index()
func()
结果同理:我调用的是func所以‘我不好’开头交叉出现1000个左右的 ‘我不好’and‘你好’等
3.1正确编写方式
几排保龄球的数量
第一排 = 第二排+3
第二排 = 第三排+3
第三排 = 第四排+3
第四排 = 10
函数形式
line_up(4) = list_up(2)+3
line_up(3) = line_up(3)+3
line_up(2) = line_up(4)+3
line_up(1) = 10
def line_up(a):
    if a == 1:
        return 10
    return line_up((a-1))+3
print(line_up(4))
结果:19
结果是由内而外
四.算法之二分法
算法:有效解决办法的各种方法
    二分法 : 一定要有先后顺序排列
    简单来说就是一大串串数字从中间要某一个值,进行一大串数字的一分为2,然后进行判断左侧还是右侧大小,如果若没有就在重复的切割直到找到你那个值为止
l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]
"""我需要后边还可以继续延伸"""
我需要17
def get_target(l1,target_num):
    # 找不到的情况下是不会一直重复下去的
    if len(l1) == 0:
        print('没有')
        return
    # 获取中间的索引值(只能为整数)
    middle_index = len(l1) // 2
    # 判断中间索引值对应数据的大小
    if target_num > l1[middle_index]:
        # 保留数据的右边
        l1_left = l1[middle_index+1:]
        # 对右侧进行切割 重复代码 复杂度降低
        print(l1_left)
        get_target(l1_left, target_num)
    elif target_num < l1[middle_index]:
        # 保留左侧数据
        l1_right = l1[:middle_index]
        print(l1_right)
        # 重复右侧切割 重复代码 再次降低复杂
        get_target(l1_right, target_num)
    else:
        print('找到了', target_num)
get_target(l1,17)
结果是:
[12, 13, 14, 15, 16, 17, 18, 19, 20, 21]
找到了 17python函数基础算法简介的更多相关文章
- 《转》Python学习(17)-python函数基础部分
		http://www.cnblogs.com/BeginMan/p/3171977.html 一.什么是函数.方法.过程 推荐阅读:http://www.cnblogs.com/snandy/arch ... 
- python函数基础学习
		函数的定义与调用: def 函数名(参数1,参数2): ‘’’函数注释’’’ print(‘函数体’) return 返回值 定 义:def关键字开关,空格之后接函数名和圆括号,最后冒号结尾 def ... 
- Python 函数基础、有序集合、文件操作(三)
		一.set 特点: set是一个无序且不重复的元素集合访问速度快:天生解决元素重复问题 方法: 初始化 >>> s1 = set()>>> print(type(s ... 
- 10分钟学会Python函数基础知识
		看完本文大概需要8分钟,看完后,仔细看下代码,认真回一下,函数基本知识就OK了.最好还是把代码敲一下. 一.函数基础 简单地说,一个函数就是一组Python语句的组合,它们可以在程序中运行一次或多次运 ... 
- Python函数基础和函数参数
		函数的定义和函数的调用 return的作用 三种参数的定义 常用的内置函数 len() 函数基础 函数的定义 def 函数名(参数): pass return 表达式 pass在这里表示什么都没有,不 ... 
- python函数基础
		一.基础 函数的定义 def 函数名(参数): ... 函数体 ... 返回值 #如果函数执行完毕也没有return语句时,自动return None. 空函数 如果想定义一个什么事也不做的空函数,可 ... 
- python 函数基础介绍
		函数是对程序逻辑进行结构化或过程化的一种编程方法.能将整块代码巧妙地隔离成易于管理的小块,把重复代码放在函数中而不是进行大量的拷贝. 一.函数创建 def 函数创建格式如下: def function ... 
- 4.python函数基础
		一.函数 1.函数简介 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但 ... 
- Python函数基础学习(定义、函数参数、递归函数)
		1.本程序是测试函数的基础.函数的参数.递归函数的测试. 函数的参数有: 必选参数.默认参数.可变参数.命名关键字参数和关键字参数 #!/usr/bin/python # -*- coding: ut ... 
随机推荐
- LGP6694题解
			第一眼似乎很困难,实际上非常简单( 好吧这题我做了一个小时( 首先期望具有线性性,我们转化为计算点对对答案的贡献. 发现相对位置一样的点对对答案的贡献是一样的.我们把相对位置一样的点对铃出来,乘了之后 ... 
- LGP3092题解
			看 DP 的时候翻到的题,发现这题的坑鸽子了一年半 这个状态感觉比较厉害,还是来记录一下吧. 首先硬币数量很少让我们想到状压,可以想出来一个十分 navie 的状态:\(dp[S][n]\) 表示用过 ... 
- SP3734题解
			题意: 有 \(n\) 列表格,第 \(i\) 列有 \(a_i\) 个格子,问在 \(n\) 列表格中有多少种放置 \(k\) 个棋子的方法使没有棋子在同一列和同一行.(如果中间有一个"格 ... 
- 移动IP通信过程
			看了点资料,沿着自己的思路来整理一下计算机网络部分移动IP通信遇到的问题以及是怎样解决的.如有错误,欢迎纠正! 遇到问题,然后解决问题. 沿着这样一个思路我们可以看看移动IP通信和传统的网络通信有什么 ... 
- Git 修改历史提交信息 commit message
			修改最近一条提交的消息 git commit --amend 进入vim模式 按字母 o 或者 insert键 开始修改内容 按 esc 推出编辑,最常用的是输入":q"直接退出, ... 
- 项目构建工具之maven01
			Maven 是一个项目管理工具,可以对 Java 项目进行构建.依赖管理.Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其他语言编写的项目.Maven 曾是 Jakar ... 
- bzoj5417/luoguP4770 [NOI2018]你的名字(后缀自动机+线段树合并)
			bzoj5417/luoguP4770 [NOI2018]你的名字(后缀自动机+线段树合并) bzoj Luogu 给出一个字符串 $ S $ 及 $ q $ 次询问,每次询问一个字符串 $ T $ ... 
- springcloud如何实现服务的注册?
			1.服务发布时,指定对应的服务名,将服务注册到 注册中心(eureka zookeeper)2.注册中心加@EnableEurekaServer,服务用@EnableDiscoveryClient,然 ... 
- Linux用户身份与文件权限学习笔记
			用户身份 管理员UID为0:系统的管理员用户 系统用户UID为1~999:服务程序会有独立的系统用户负责运行:防止被黑客入侵进行提权,并有效控制被破坏的范围 普通用户UID从1000开始:是由管理员创 ... 
- 面试问题之计算机网络:简述TCP和UDP的区别以及优缺点
			转载于:https://blog.csdn.net/liulin1207/article/details/80960964 一.TCP: TCP是面向连接的通讯协议,通过三次握手建立连接,通讯完成时四 ... 
