2018年8月29日

摘要: functools模块 functools.reduce(function, iterable[, initializer]) 在其说明文档中,有以下的代码理解这一过程 reduce减少,消减 可迭代对象不能为空,初始值未提供就在可迭代对象中取一个元素 partial 方法 偏函数,把函数部分的参数 阅读全文
posted @ 2018-08-29 22:57 Riper 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 装饰器 有一个需求,将一个加法函数,增加一个功能,输出调用的参数,及调用信息 在源代码里插入代码,叫硬编码,不利于更改。非业务功能输出信息,不应该放在业务代码里。 定义两个函数,调用后加强输出,但是函数传参是个问题,使用以下方法,*args和**kwargs 将函数柯里化 柯里化是为了带参装饰器的应 阅读全文
posted @ 2018-08-29 22:56 Riper 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 函数定义的弊端 动态语言的弊端,不能事先声明类型,赋值可以是不同的类型,只有在运行时才能发现 动态语言的灵活的特性也是弊端 为解决这些问题而使用类型注解,但也只是声明,并不能强制约束 难发现,问题只有使用时才能发现, 难使用,函数使用者并不能知道数据类型 Documentation string文档 阅读全文
posted @ 2018-08-29 22:56 Riper 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 高阶函数 函数在Python中是一等公民 函数也是对象,可调用对象 函数可以做为普通变量、参数、返回值等 数学概念y = g(f(x)) 在数学和计算机科学中,高阶函数要满足至少一个以下的条件 接收一个或多个函数 输出一个函数,最多一个,不能多 比较两个函数,比不了大小,就比地址, == 判断内容是 阅读全文
posted @ 2018-08-29 22:55 Riper 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 匿名函数 lambda 参数列表:表达式 lambda x : x**2 (lambda x :x**2)(4) 不推荐 fn = lambda x,y :(x+y)**2 ,建议使用普通函数 使用lambda关键字来定义匿名函数 冒号分割参数列表和表达式 表达式的值就是匿名函数的返回值,不能是赋值 阅读全文
posted @ 2018-08-29 22:54 Riper 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 生成器generator 生成器是指生成器对象,可以使用生成器表达式,也可以使用yield关键字得到生成器函数,调用一次得到一个对象 生成器函数 函数体中包含yield语句函数返回生成器对象 是一个迭代器,是可迭代对象 惰性求值,延迟计算 生成器对象迭代完不能回头,调用使用next 没有多余的 yi 阅读全文
posted @ 2018-08-29 22:54 Riper 阅读(94) 评论(0) 推荐(0) 编辑
摘要: 递归 函数间接或直接调用函数自身就是递归 递归要有边界条件,递归前进段,递归返回段 递归一定要有边界条件, 边界条件不满足,递归前进, 满足边界条件,递归返回 斐波那契数列的递归实现 这种调用方式效率极低,每一次的计算都没有用到前一次计算出的值 可以改写为 以上方式每次计算可以用到上次的结果,n是边 阅读全文
posted @ 2018-08-29 22:52 Riper 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 函数执行流程 对于以上函数,执行流程为 1、在全局帧中生成foo1,foo2,foo3,main函数对象 2、调用main函数 3、main函数查找print函数压栈,,将常量main called字符串常量压栈,调用print函数,弹出常量,执行后打印与栈无关 4、main 函数在全局中查找函数f 阅读全文
posted @ 2018-08-29 22:52 Riper 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 函数返回值,作用域 Python函数使用return语句返回“返回值” 函数一定有返回值。没有return 语句,隐式调用return None 一个函数可以存在多个return语句,但只执行一条,如果一条return都没有执行,就隐式调用return None 如果有必要,可以调用return N 阅读全文
posted @ 2018-08-29 22:50 Riper 阅读(143) 评论(0) 推荐(0) 编辑

导航