Python 基础知识 Day4

本节内容

1 迭代器和装饰器

2 装饰器

3 Json 和 Pickle数据序列化

4 软件目录结构规范

5 作业:ATM项目开发

一  装饰器

1 装饰器:2 定义:本质是函数,(装饰其他函数),就是为其他函数添加附加功能3 原则:        1-不能修改被装饰的函数的源代码        2-不能修改被装饰的函数的调用方式

实现装饰器知识储备:1.函数即"变量"   (定义函数体到内存房间,函数体是字符串,调用的时候,通过函数名直接调取内存的函数体,函数名就是内存地址)2.高阶函数  满足下面两个条件之一就是高阶函数  A:把一个函数名当作实参传给另一个函数(在不修改被装饰函数源代码的情况下为其添加功能)
def bar():
    print("in the bar")

def test1(func):
    print(func)
    func()

test1(bar)              # 此处bar 就是 把 func = bar ,func等于bar了,意思就是fucn 有了内存地址,有了函数体

  

import  time

def bar():
    time.sleep(3)
    print("in the bar")

def test1(func):
    start_time = time.time()
    func()
    stop_time = time.time()
    print("the func run time is %s "%(stop_time-start_time))    # 这里就是func 运行的时间

test1(bar)

  

  


  B:返回值中包含函数名(不修改函数的调用方式)
import time
def bar():
    time.sleep(3)
    print("in the bar")

def test2(func):
    print(func)
    return func

bar = (test2(bar))
bar()                   # 这里实现了未改变源代码的情况下,增加打印func(其实就是bar的内存地址)的内存地址的功能
                        # 并且未改变源函数的调用方式

  

3.嵌套函数
def foo():
    print("in the foo")
    def bar():              # 函数的嵌套是 在一个函数的函数体内用def 去申明一个函数(而不是调用函数)
        print("in the bar")

    bar()

  

高阶函数+嵌套函数 = 装饰器
__author__ = ‘shellxie‘
# -*- coding:utf-8 -*-
import time

def timmer(fuc):            #未修改源代码
    def warpper (*args,**kwargs):
        start_time = time.time()
        fuc()
        stop_time = time.time()
        print("in the fuc run time %s"%(stop_time-start_time))
    return warpper
@timmer                     #调用装饰器
def test1():                # 一个被装饰的函数
    time.sleep(3)
    print("in the test1")

test1()

  装饰器1.0版

import time
def timer(func):                  # 这时候timer(test1) 就是tiemr(func) func = test1
    def deco():
        start_time = time.time()
        func()                    # 这时候是run test1
        stop_time = time.time()
        print("the func run time %s"%(stop_time-start_time))

    return deco

def test1():
    time.sleep(3)
    print( "in the test1")        # 在不改变调用方式以及源代码的情况下,给源函数增加功能

def test2():
    time.sleep(3)
    print("in the test2")

print(timer(test1))
test1= (timer(test1))
test1()                           # 这时候test1() ------就是执行deco的内存地址然后调用

  装饰器1.0版优化

import time
def timer(func):                  # 这时候timer(test1) 就是tiemr(func) func = test1
    def deco():
        start_time = time.time()
        func()                    # 这时候是run test1
        stop_time = time.time()
        print("the func run time %s"%(stop_time-start_time))

    return deco
@timer                            # 这一步的意思就是test1 = timer(test1)
def test1():
    time.sleep(3)
    print( "in the test1")        # 在不改变调用方式以及源代码的情况下,给源函数增加功能
@timer
def test2():
    time.sleep(3)
    print("in the test2")
test1()
test2()

  

 

时间: 2024-10-09 20:11:56

Python 基础知识 Day4的相关文章

python基础知识(day4)

一.装饰器 为什么要使用装饰器? 1.不改变函数原有的代码 2.不改变函数原有的调用方式 什么是装饰器? 高阶函数+嵌套函数====>装饰器 装饰器的具体实现: 通过装饰器实现用户登录页面的认证: 1 __author__ = 'NL' 2 3 user,passwd = "nl","123" 4 5 def login(login_tpye): 6 def out_wapper(func): 7 def wapper(*args,**kwargs): 8 i

python基础知识总结

python有段时间没用了,实在是惭愧啊,屌丝今天决定开始对python基础知识重新进行总结,以慰自心. 一.python概念 Python是著名的"龟叔"Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. python定位"优雅","简单","明确" 二.python安装 略 三.python基础 1.数据类型 整数: Python可以处理任意大小的整数,当然包括负整数,在程序

python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding:utf-8from com.wenhy.crawler_baidu_baike import url_manager, html_downloader, html_parser, html_outputer print "爬虫百度百科调度入口" # 创建爬虫类class SpiderMai

python基础知识(二)

以下内容,作为python基础知识的补充,主要涉及基础数据类型的创建及特性,以及新数据类型Bytes类型的引入介绍

python基础知识1

Python的基础知识: if-elif-else while-else break continue from..import import.. dir(),当提供一个模块明的时候,返回模块定义的名称列表 列表[],元祖(),字典{} 面向对象编程:self,__init__方法 try-except try-finally python的GUI库:Tkinter   床架一个root,把创建的其它元素放到root里面来 python基础知识1

python 基础知识(一)

                                       python 基础知识(一) 一.python发展介绍 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC 语言的一种继承.之所以选中Python(大蟒蛇的意思)作为程序的名字,是因为他是一个叫Monty Python的喜剧团体的爱好者.Python是从ABC发展起来,主要受到了Modula-3(另一种相当

Python基础知识梳理 - 第01部分

在开始Python基础知识梳理前, 先安装下环境. 以下过程是在Linux操作系统, root用户下进行的, 主要安装了2.7版本的python, 和pip, ipython, virtualenv等工具, 最后是vim的设置. 1. 安装python. # wget https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tgz Python-2.7.14 # ./configure --prefix=/usr/local/python27

Python基础知识两部曲:二

如果没有看基础部分第一章,请前往Python基础知识两部曲:一 8.函数 1.定义函数: 使用关键字def来告诉python你要定义一个函数 接着指出函数名:如下面函数名是--greet_user ()是必须带上的,这里可以可以传递一些参数,也可以不传 以:结尾,且与后面所有的缩进构成了函数体 调用函数直接写上函数名,如果有参数记得带上参数 1. 无参数的函数: def greet_user(): """显示简单的函数体""" print(&qu

Python基础知识梳理 - 第02部分

本文是Python基础知识的第二篇, 主要是对内置对象类型的介绍, 涉及的类型如下表. 数字类型 在Python中, 数字并不是一个真正的对象类型, 而是一组类似类型的分类, 如整数和浮点数, 复数等. Python还提供了若干处理数字对象的工具, 如内置数学函数pow, abs等, 标准库math, random等. 看下数字的简单使用. In [15]: 123 + 234 Out[15]: 357 In [16]: 1.5 * 4 Out[16]: 6.0 In [32]: pow(2,