[Python笔记]Python学习笔记三

Python高阶函数

filter() 用于过滤序列

第一个参数接收一个函数,根据返回值来决定是否保留, True则留下,False则丢弃

def is_odd(n):
    return n%2 == 1

filter( is_odd, range(1,16) )

def not_empty(s):
    return s and s.strip()

filter( not_empty, [ ‘A‘, ‘ ‘, ‘B ‘, None, ‘  ‘ ])

内置sorted()函数用于列表排序

返回函数

将函数作为返回值, 这就涉及到"闭包"

返回函数不要引用任何循环变量,或者后续可能会发生变化的变量。

记住经典的循环问题,最后得到的数都是一样。

匿名函数:lambda表达式

匿名函数只能有一个表达式,不用写return

map(lambda n: n*n, range(1,11))
# 匿名函数的语法就是 lambda关键字后面跟上函数参数,再加冒号 : 没有return

匿名函数也可以作为函数的返回值使用

装饰器

在Python中,任何事物都是对象。 函数也是一个对象,函数对象有 __name__ 属性

def now():
    print ‘2016-03-23‘

f = now

now.__name__ # ‘now‘
f.__name__ # ‘now‘

在代码运行期间动态添加功能的方式就叫做 "装饰器Decorator" 本质上就是一个返回函数的高阶函数。

import functools# 一个最简单的无参数的装饰器
# 定义一个能打印日志的函数作为装饰器
# 装饰器的本质就是返回一个函数
def log(func):    @functools.wraps(func)
    def wrapper(*args, **kw):
        print ‘call %s():‘%func.__name___
        return func(*args, **kw)
    return wrapper

# 使用装饰器的语法就是使用@符号将其放置在其他函数之上
@log #等价于 now = log(now)
def now():
    print ‘2016-03-23‘

now()

# 一个需要传入参数的装饰器
def log(text):
    def decorator(func):        @functools.wraps(func)
        def wrapper(*args, **kw):
            print ‘%s %s()‘%(text, func.__name__)
            return func(*args, **kw)
        return wrapper
    return decorator

@log(‘execute‘)  # 等价于 log(‘execute‘)(now)
def now():
    print ‘2016-03-23‘

now()

为了不把原始函数的__name__属性进行修改,需要使用内置的 functools.wraps装饰器来保证属性不被修改。

#!/usr/bin/env python
# Python装饰器小练习
# 写出一个@log的装饰器,使得它既支持无参数,也支持带参数
import functools
import time

def log(obj):
    if isinstance(obj, (str,int,float,bool)):
        param = obj
        def decorator(func):
            @functools.wraps(func)
            def wrapper(*args, **kw):
                print ‘call %s() begin with param %s:‘%(func.__name__, param)
                res = func(*args, **kw)
                print ‘call %s() end:‘%func.__name__
                return res
            return wrapper
        return decorator
    else:
        @functools.wraps(obj)
        def wrapper(*args, **kw):
            print ‘call %s() begin:‘%obj.__name__
            res = obj(*args, **kw)
            print ‘call %s() end‘%obj.__name__
            return res
        return wrapper

# 写出一个装饰器用于在函数调用前后分别打印出‘begin call‘和‘begin end‘日志
import functools
import time

def showFunName(func):
    @functools.wraps(func)
    def wrapper(*args,**kw):
        print ‘begin call‘
        res = func(*args, **kw)
        print ‘begin end‘
        return res
    return wrapper

@showFunName
def myFunc():
    print ‘executing...‘

myFunc()

偏函数

functools.partial()作用就是将一个函数的某些参数的值进行固定,从而返回一个新的函数,使得调用该函数变得更加简单。

由于任何函数都可以接收定义参数,可变参数,关键字参数。所以调用functools.partial()方法时也可以传入这两种参数。

时间: 2024-09-30 21:11:13

[Python笔记]Python学习笔记三的相关文章

python网络爬虫学习笔记

python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章目录 1. 介绍: 2. 从简单语句中开始: 3. 传送数据给服务器 4. HTTP头-描述数据的数据 5. 异常 5.0.1. URLError 5.0.2. HTTPError 5.0.3. 处理异常 5.0.4. info和geturl 6. Opener和Handler 7. Basic Authentication 8. 代理 9. Timeout 设置 10. Cookie 11. Deb

contiki-main.c 中的process系列函数学习笔记 <contiki学习笔记之六>

说明:本文依然依赖于 contiki/platform/native/contiki-main.c 文件. ------------------------------------------------------------------------------------------------------------------------------------- 根据上一个笔记里面添加的printf()语句的打印信息提示,hello world 打印是在执行了 1 autostart_

python数据分析入门学习笔记儿

学习利用python进行数据分析的笔记儿&下星期二内部交流会要讲的内容,一并分享给大家.博主粗心大意,有什么不对的地方欢迎指正~还有许多尚待完善的地方,待我一边学习一边完善~ 前言:各种和数据分析相关python库的介绍(前言1~4摘抄自<利用python进行数据分析>) 1.Numpy: Numpy是python科学计算的基础包,它提供以下功能(不限于此): (1)快速高效的多维数组对象naarray (2)用于对数组执行元素级计算以及直接对数组执行数学运算的函数 (3)用于读写硬盘

&lt;&lt;Python基础教程&gt;&gt;学习笔记之|第01章|基础知识

本学习笔记主要用要记录下学习<<Python基础教程>>过程中的一些Key Point,或自己没怎么搞明白的内容,可能有点杂乱,但比较实用,查找起来也方便. 第01章:基础知识 ------ Jython:      Python的Java实现,运行在JVM中,相对稳定,但落后于Python,当前版本2.5,在TA(Python+Robot)会用到 IronPython:  Python的C#实现,运行在Common Language Runtime,速度比Python要快 >

Python高级特性——学习笔记

Python中非常有用的高级特性,1行代码能实现的功能,决不写5行代码.请始终牢记,代码越少,开发效率越高. 1.切片slice.L = [1, 2, 3, 4, 5] L[0:3]=[1,2,3]表示,从索引0开始取,直到索引3为止,但不包括索引3.即索引0,1,2,正好是3个元素. 如果第一个索引是0,还可以省略 倒数切片L[-2:]=[4,5]从倒数第二个数 到 最后一个数 L = list(range(100))# 创建一个0-99的数列L L[:10:2]# 前10个数,每两个取一个

&lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第10章 | 充电时刻

第10章 | 充电时刻 本章主要介绍模块及其工作机制 ------ 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 一个简单的模块 #hello.py print ("Hello,World!") >>> import hello Traceback (most recent call last): File "<pyshell#56>", line 1, i

Python 2.7 学习笔记 基本知识

python是一种解释型的.面向对象的.带有动态语义的高级程序设计语言.本文介绍下python的基本知识. 一.安装 各种操作系统有自己的安装方法,linux系统一般都自带了python的环境.这里不再介绍. 二.检查 安装好python后,可在命令行下执行如下命令检查当前环境下python的版本:  python  --version [email protected]:~$ python --version Python 2.7.6 三.编写和运行python程序 运行python程序,通常

&lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第02章 | 列表和数组

第02章: 列表和数组 ------ 在Python中最基本的数据结构是序列,每个元素分配一个序号,即元素的序号,也即索引.注意,需要从0开始,第一位0,第二位为1,依次类推. Python包括: 字符串,列表,元祖,字典 这四种常用数据结构,或者说四种序列,其中元祖为不可变序列. 列表和元祖的主要区别 列表可变,而元祖不可变             >>>list1 = ['Tom',40] 所以元祖: 主要用于存储不变的数据   >>> >>> t

python第一天学习笔记

Python编程 本实验使用Ubuntu系统 Python官网下载 www.python.org Ubuntu官网下载 www.ubuntu.org.cn [email protected]:~$ python–V         //查看python版本 Python 2.7.6 本实验适用python版本为2.6.2.7 编程风格: 语法要求:统一缩进 变量:标识符第一个字符必须是字母表中的字母或下划线,标识符由下划线.字母.数字组成,标识符对大小写敏感 [email protected]:

python+django+mysql学习笔记

安装python 1. 从 http://www.python.org/download/ 下载最新的python版本 (我用的是python2.72, 当时最稳定的) 2. 然后一路next, 安装到你想要的目录下 3. 然后更改path, 点击控制面板->系统->高级->环境变量.在“系统变量”表单中点击叫做PATH的变量,然后编辑这个变量,把” ;C:\Python27; C;\Python27\Scripts; “加到它的结尾.当然,是Python所在的正确路径. 安装djang