iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >[Python入门及进阶笔记]Pytho
  • 344
分享到

[Python入门及进阶笔记]Pytho

进阶入门笔记 2023-01-31 03:01:35 344人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

博客迁往:新地址 (点击直达) 新博客使用markdown维护,线下有版本库,自己写的所以会定时更新同步,同时提供更好的导航和阅读体验 csdn对markdown支持不好,所以旧版不会花时间进行同步修订,抱歉 ------------

博客迁往:新地址 (点击直达)

新博客使用markdown维护,线下有版本库,自己写的所以会定时更新同步,同时提供更好的导航和阅读体验

csdn对markdown支持不好,所以旧版不会花时间进行同步修订,抱歉

-----------------------------------------------

想找个地方快乐的coding,貌似不是一件容易的事情。

一时冲动,不过后路已断,做自己想做的事情,总要付出一些代价的,坚持吧,只能。

吐槽下,本周各种事情,搞得如越级打怪般艰难。周六,去三小时,回来三小时,大败而归,但是还是学到不少东西。

差距还是有的,虽然自信可以在最短时间补上,但是,需要成本。

总之,貌似时机不对,哎以上废话,进入正题


上周六碰到了,一周忙碌,今天稍微理下,待补全,资料主要来源于书籍,网络&self.coding()。有任何问题,请指正哈

基本概念

具体概念自己Google

装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志性能测试事务处理, WEB权限校验, Cache等。

很有名的例子,就是咖啡,加糖的咖啡,加牛奶的咖啡。本质上,还是咖啡,只是在原有的东西上,做了“装饰”,使之附加一些功能或特性。

例如记录日志,需要对某些函数进行记录

笨的办法,每个函数加入代码,如果代码变了,就悲催了

装饰器的办法,定义一个专门日志记录的装饰器,对需要的函数进行装饰,搞定

优点

抽离出大量函数中与函数功能本身无关的雷同代码并继续重用

即,可以将函数“修饰”为完全不同的行为,可以有效的将业务逻辑正交分解,如用于将权限和身份验证从业务中独立出来

概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能

python中的装饰器

Python中,装饰器实现是十分方便的

原因是:函数可以被扔来扔去。

函数作为一个对象:

A.可以被赋值给其他变量,可以作为返回值

B.可以被定义在另外一个函数内

def:

装饰器是一个函数,一个用来包装函数的函数,装饰器在函数申明完成的时候被调用,调用之后返回一个修改之后的函数对象,将其重新赋值原来的标识符,并永久丧失对原始函数对象的访问(申明的函数被换成一个被装饰器装饰过后的函数)

当我们对某个方法应用了装饰方法后, 其实就改变了被装饰函数名称所引用的函数代码块入口点,使其重新指向了由装饰方法所返回的函数入口点。

由此我们可以用decorator改变某个原有函数的功能,添加各种操作,或者完全改变原有实现

分类:

装饰器分为无参数decorator,有参数decorator

* 无参数decorator

生成一个新的装饰器函数

* 有参decorator

有参装饰,装饰函数先处理参数,再生成一个新的装饰器函数,然后对函数进行装饰

装饰器有参/无参,函数有参/无参,组合共4种

具体定义:

decorator方法

A.把要装饰的方法作为输入参数,

B.在函数体内可以进行任意的操作(可以想象其中蕴含的威力强大,会有很多应用场景),

C.只要确保最后返回一个可执行的函数即可(可以是原来的输入参数函数, 或者是一个新函数)

无参数装饰器 – 包装无参数函数

不需要针对参数进行处理和优化

def decorator(func):
    print "hello"
    return func

@decorator
def foo():
    pass

foo()

foo()等价于:

foo = decorator(foo)
foo()

无参数装饰器 – 包装带参数函数

def decorator_func_args(func):
    def handle_args(*args, **kwargs): #处理传入函数的参数
        print "begin"
        func(*args, **kwargs)   #函数调用
        print "end"
    return handle_args


@decorator_func_args
def foo2(a, b=2):
    print a, b

foo2(1)

foo2(1)等价于

foo2 = decorator_func_args(foo2)
foo2(1)

带参数装饰器 – 包装无参数函数

def decorator_with_params(arg_of_decorator):#这里是装饰器的参数
    print arg_of_decorator
    #最终被返回的函数
    def newDecorator(func): 
        print func
        return func
    return newDecorator


@decorator_with_params("deco_args")
def foo3():
    pass
foo3()

与前面的不同在于:比上一层多了一层封装,先传递参数,再传递函数名

第一个函数decomaker是装饰函数,它的参数是用来加强“加强装饰”的。由于此函数并非被装饰的函数对象,所以在内部必须至少创建一个接受被装饰函数的函数,然后返回这个对象(实际上此时foo3= decorator_with_params(arg_of_decorator)(foo3))

带参数装饰器– 包装带参数函数

def decorator_whith_params_and_func_args(arg_of_decorator):
    def handle_func(func):
        def handle_args(*args, **kwargs):
            print "begin"
            func(*args, **kwargs)
            print "end"
            print arg_of_decorator, func, args,kwargs
        return handle_args
    return handle_func


@decorator_whith_params_and_func_args("123")
def foo4(a, b=2):
    print "Content"

foo4(1, b=3)

内置装饰器

内置的装饰器有三个:staticmethod,claSSMethod, property

class A():
    @staticmethod
    def test_static():
        print "static"
    def test_nORMal(self):
        print "normal"
    @classmethod
    def test_class(cls):
        print "class", cls

a = A()
A.test_static()
a.test_static()
a.test_normal()
a.test_class()

结果:

static
static
normal
class __main__.A

A.test_static

staticmethod 类中定义的实例方法变成静态方法

基本上和一个全局函数差不多(不需要传入self,只有一般的参数),只不过可以通过类或类的实例对象来调用,不会隐式地传入任何参数。

类似于静态语言中的静态方法

B.test_normal

普通对象方法:普通对象方法至少需要一个self参数,代表类对象实例

C.test_class

类中定义的实例方法变成类方法

classmethod需要传入类对象,可以通过实例和类对象进行调用。

是和一个class相关的方法,可以通过类或类实例调用,并将该class对象(不是class的实例对象)隐式地当作第一个参数传入。

就这种方法可能会 比较奇怪一点,不过只要你搞清楚了python里class也是个真实地存在于内存中的对象,而不是静态语言中只存在于编译期间的类型,就好办了。正常的方法就是和一个类的实例对象相关的方法,通过类实例对象进行调用,并将该实例对象隐式地作为第一个参数传入,这个也和其它语言比较像。

D.区别

staticmethod,classmethod相当于全局方法,一般用在抽象类或父类中。一般与具体的类无关。

类方法需要额外的类变量cls,当有子类继承时,调用类方法传入的类变量cls是子类,而不是父类。

类方法和静态方法都可以通过类对象和类的实例对象访问

定义方式,传入的参数,调用方式都不相同。

E.property

对类属性的操作,类似于java中定义getter/setter

class B():
    def __init__(self):
        self.__prop = 1
    @property
    def prop(self):
        print "call get"
        return self.__prop
    @prop.setter
    def prop(self, value):
        print "call set"
        self.__prop = value
    @prop.deleter
    def prop(self):
        print "call del"
        del self.__prop

其他

A.装饰器的顺序很重要,需要注意

@A
@B
@C
def f ():

等价于

f = A(B(C(f)))

B.decorator的作用对象可以是模块级的方法或者类方法

C.functools模块提供了两个装饰器。这个模块是Python 2.5后新增的。

functools.wraps(func)total_ordering(cls)这个具体自己去看吧,后续用到了再补充

一个简单例子

通过一个变量,控制调用函数时是否统计时间

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#@author: wklken@yeah.net
#@version: a test of decorator
#@date: 20121027
#@desc: just a test


import logging

from time import time

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
is_debug = True

def count_time(is_debug):
    def  handle_func(func):
        def  handle_args(*args, **kwargs):
            if is_debug:
                begin = time()
                func(*args, **kwargs)
                logging.debug( "[" + func.__name__ + "] -> " + str(time() - begin) )
            else:
                func(*args, **kwargs)
        return handle_args
    return handle_func

def pr():
    for i in range(1,1000000):
        i = i * 2
    print "hello world"

def test():
    pr()

@count_time(is_debug)
def test2():
    pr()

@count_time(False)
def test3():
    pr()

if __name__ == "__main__":
    test()
    test2()
    test3()

结果:

hello world
hello world
DEBUG:root:[test2] -> 0.0748538970947
hello world

The end!

wklken

Gighub: https://GitHub.com/wklken

Blog: Http://wklken.sinaapp.com/

2012-10-27

转载请注明出处,谢谢!


--结束END--

本文标题: [Python入门及进阶笔记]Pytho

本文链接: https://www.lsjlt.com/news/187541.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • [Python入门及进阶笔记]Pytho
    博客迁往:新地址 (点击直达) 新博客使用markdown维护,线下有版本库,自己写的所以会定时更新同步,同时提供更好的导航和阅读体验 csdn对markdown支持不好,所以旧版不会花时间进行同步修订,抱歉 ------------...
    99+
    2023-01-31
    进阶 入门 笔记
  • Python3入门与进阶笔记(一):基本
    Number:数字int 和 float       python3中的整型只有int,小数只有float.。type函数可以用来查看类型。       /表示小数除法,例如2/2=1.0,type(2/2)是float。       /...
    99+
    2023-01-31
    进阶 入门 笔记
  • Python进阶笔记
    列表生成式 函数的参数类型 lambda函数 map, reduce, filter, sorted函数 eval, exec, join, zip函数 itertools中的函数 copy与deepcopy函数 模块 os、sys模块...
    99+
    2023-01-31
    进阶 笔记 Python
  • python进阶笔记【2】 --- 一
    我是在学习cs231n的assignment3的课程,发现里面的代码大量频繁出现了这个库,那我就很奇怪了,为什么有个future这个奇怪名字的库会出现呢?到底这个库又有什么用?下面就让我为你揭开。 总所周知,python3.x和pyt...
    99+
    2023-01-31
    进阶 笔记 python
  • Python学习笔记 --- pytho
    对于python操作scp不输入密码还有一个很好的解决方案: 就是利用python中的 pexpect ,类似于linux下expect这个包。 使用方式如下: 上面的file_transfer()就是使用了免密的方式。 想看源码...
    99+
    2023-01-31
    学习笔记 Python pytho
  • python学习笔记(1)--pytho
    Python 语言概述 面向对象、解释型计算机程序设计语言。 语法简洁、清晰、丰富和强大的类,能够把用其他语言(如c++/c)制作的各种模块很轻松的连接起来(胶水语言)。 是纯粹的自由软件,源代码和解释器Cpython均遵循GP...
    99+
    2023-01-31
    学习笔记 python pytho
  • Python学习笔记(29)-Pytho
    一,简介 上一篇已经介绍了python-docx模块的安装和导入,本篇直接介绍如何创建并写入word文档,需要注意的是:创建word并写入之后,操作的都是内存中的对象,最后需要保存到文件,才能看到真实的文件。 二,代码演示 非常简...
    99+
    2023-01-31
    学习笔记 Python Pytho
  • Python 入门学习笔记
    1 安装Anaconda和jupyter notebook   之前没有听说过这两个名词,然后看完介绍,按照我自己的理解,Anaconda是一个集合很多环境和模块的存储地方。 Jupyter notebook 就是一个可以在此环境里打代码...
    99+
    2023-01-30
    学习笔记 入门 Python
  • Python基础入门笔记(一)
    前言(认识Python) 既然学习 Python,那么至少得了解下这门语言,知道 Python 代码执行过程吧。Python 的历史有兴趣的百度百科下就有,这个不多说了。 1、我们先来了解下什么是解释型语言和编译型语言? 计算机...
    99+
    2023-01-31
    入门 基础 笔记
  • linux入门笔记
    学习linux也不是那么难,首先你就必须掌握这些入门知识,这样才能让你从新手变老手,下面就从几个方面来教你学linux。【1】Linux介绍【2】vi编辑器(1)三种模式:(2)vi命令【1】Linux介绍(1)四个重要的人物肯.汤姆森 B...
    99+
    2023-06-05
  • Python学习笔记整理(七)Pytho
    一、元组介绍 元组(tuple)是无法修改的其他对象的结合.元组由简单的对象构成,元组与列表类似,不过元组不能在原处修改。通常写成圆括号中的一系列项。 1、元组的属性 *任意对象的有序集合 与字符串和...
    99+
    2023-01-31
    学习笔记 Python Pytho
  • Python学习笔记整理(五)Pytho
    列表和字段,这两种类型几乎是Python所有脚本的主要工作组件。他们都可以在原处进行修改,可以按需求增加或缩短,而且包含任何种类的对象或者被嵌套。 一、列表 列表的主要属性: *任意对象的有序集合 ...
    99+
    2023-01-31
    学习笔记 Python Pytho
  • Python学习笔记整理(八)Pytho
      程序由模块构成 模块包含语句 语句包含表达式 表达式建立并处理对象 一、Python语句 语句 角色 列子 赋值 创建引用 a,b,c='good','bad...
    99+
    2023-01-31
    学习笔记 Python Pytho
  • Python学习笔记—第一章—Pytho
    书目:Python(Unix和Linux系统管理指南)学习日期:20120627知识点总结:Python的优势:既简单易学,也可以完成任何复杂任务可读性好(严格的代码缩进格式)支持面向对象编程(OOP)强大的Python社区强大的Pytho...
    99+
    2023-01-31
    学习笔记 Python Pytho
  • Python学习笔记整理(九)Pytho
    赋值语句,表达式语句,打印 一、赋值语句 赋值语句给对象命名,基本形式是在等号左边写赋值语句的目标,右边写赋值的对象。左边可以是变量名或对象元素,而右侧的对象可以是任何会计算得到的对象表达式 。 1、赋值...
    99+
    2023-01-31
    学习笔记 Python Pytho
  • Python学习笔记整理(十)Pytho
    if语句是选取要执行的操作. 一、if语句 1、通用格式 形式是if测试,后面跟着一个或多个可选的elif(else if)测试,以及一个最终选用的else块。测试和else部分可以结合嵌套语句块,缩进列在行首...
    99+
    2023-01-31
    学习笔记 Python Pytho
  • Python学习笔记整理(二)pytho
    一、Python的数字类型 1、数字常量 python数字类型在程序中如何显示(换句话说,作为常量) 数字            常量 1234,-23,0        一般整数 9999...
    99+
    2023-01-31
    学习笔记 Python pytho
  • Python学习笔记整理(一)pytho
    Python对象类型 说明:python程序可以分解成模块,语句,表达式以及对象。 1)、程序由模块构成 2)、模块包含语句 3)、语句包含表达式 4)、表达式建立并处理对象 一、...
    99+
    2023-01-31
    学习笔记 Python pytho
  • Python学习笔记整理(四)Pytho
    字符串是一个有序的字符集合,用于存储和表现基于文本的信息。 常见的字符串常量和表达式 T1=‘’ 空字符串 T2="diege's" 双引号 T3="""...""" 三重引号块 T4=r'...
    99+
    2023-01-31
    学习笔记 Python Pytho
  • Python学习笔记整理(六)Pytho
    一、字典介绍 字典(dictionary)是除列表意外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。 1、字...
    99+
    2023-01-31
    学习笔记 Python Pytho
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作