Python学习之路

Stella981
• 阅读 429

三元运算 变量 = 条件返回True的结果 if 条件 else 条件返回False ,用于简单

import time

time.time() 1970年至今多少秒

time.sleep()暂时休眠

装饰器形成过程

Python学习之路 Python学习之路

def func():
    time.sleep(0.01)
    print('fds')
def timmer(f): #装饰器函数
    def inner():
        start = time.time()
        f() #被装饰的函数
        end = time.time()
        print(end - start)
    return inner
func = timmer(func)
func()

View Code

timer就是一个装饰器函数,只对一个函数,有一些装饰作用

装饰器作用

 不想修改函数的调用方式,但还想在原来的函数前后添加功能

原则

开发封闭原则

  开放:对扩展是开放的

  封闭:对修改是封闭的

封版

语法糖

Python学习之路 Python学习之路

def timmer(f): #装饰器函数名
    def inner():
        start = time.time()
        f() #被装饰的函数
        end = time.time()
        print(end - start)
    return inner
@timmer   #语法糖
def func():#被装饰的函数
    time.sleep(0.01)
    print('fds')
# func = timmer(func)
func()

View Code

Python学习之路 Python学习之路

def timmer(f): #装饰器函数名
    def inner():
        start = time.time()
        ret = f() #被装饰的函数
        end = time.time()
        print(end - start)
        return ret
    return inner
@timmer   #语法糖
def func():#被装饰的函数
    time.sleep(0.01)
    print('fds')
    return 'hhh'
# func = timmer(func)
ret = func()  #inner
print(ret)
#fds
# 0.01003718376159668
# hhh

View Code

装饰带参数函数的装饰器

Python学习之路 Python学习之路

def timmer(f): #装饰器函数名
    def inner(a):
        start = time.time()
        ret = f(a) #被装饰的函数
        end = time.time()
        print(end - start)
        return ret
    return inner
@timmer   #语法糖
def func(a):#被装饰的函数
    time.sleep(0.01)
    print('fds',a)
    return 'hhh'
# func = timmer(func)
ret = func(1)  #inner
print(ret)
# fds 1
# 0.010416269302368164
# hhh

View Code

Python学习之路 Python学习之路

def timmer(f): #装饰器函数名
    def inner(*args,**kwargs):
        start = time.time()
        ret = f(*args,**kwargs) #被装饰的函数
        end = time.time()
        print(end - start)
        return ret
    return inner
@timmer   #语法糖
def func(a,b):#被装饰的函数
    time.sleep(0.01)
    print('fds',a,b)
    return '111'

@timmer   #语法糖
def func1(a):#被装饰的函数
    time.sleep(0.01)
    print('fds',a)
    return '222'
# func = timmer(func)
ret = func(1,2)  #inner
ret1 = func1(1)
# print(ret,ret1)
# fds 1 2
# 0.010915040969848633
# fds 1
# 0.01041555404663086
# 111 222

View Code

装饰器的固定模式

Python学习之路 Python学习之路

def wrapper(func):
    def inner(*args,**kwargs):
       ret = func(*args,**kwargs) #被装饰函数
       return ret
    return inner()
@wrapper  #qq = wrapper(qq)
def qq():
    print(123)

ret = qq() #相当于在执行inner()

View Code

Python学习之路 Python学习之路

def wrapper(func):
    def inner(*args,**kwargs):
        print('在被装饰器之前做的事:')
        ret = func(*args,**kwargs)
        print('在被装饰的函数执行之后做的事:')
        return ret
    return inner

@wrapper
def h(day):
    print("gg")
    return 'tyw'

ret = h(3)
print(ret)
# 在被装饰器之前做的事:
# gg
# 在被装饰的函数执行之后做的事:
# tyw

View Code

Python学习之路 Python学习之路

def outer(*args,**kwargs):
    print(args)
    print(*args)
    def inner(*args):
        print('inner',args)
    inner(*args)
outer(1,2,3) # ==outer(#[1,2,3,4])
# (1, 2, 3)
# 1 2 3
# inner (1, 2, 3)

View Code

Python学习之路 Python学习之路

def wa():
    '''
    一个哈哈哈的函数
    :return:
    '''
    print('哈哈哈')

print(wa.__name__) #查看字符串的函数名
print(wa.__doc__) #查看函数注释
# wa
# 
#     一个哈哈哈的函数
#     :return

View Code

Python学习之路 Python学习之路

def wrapper(func): #func = h
    def inner(*args,**kwargs):
        print('在被装饰器之前做的事:')
        ret = func(*args,**kwargs)
        print('在被装饰的函数执行之后做的事:')
        return ret
    return inner

@wrapper
def h(day):
    print("gg")
    return 'tyw'
print(h.__name__)#inner

View Code

wraps

Python学习之路 Python学习之路

from functools import wraps
def wrapper(func): #func = h
    @wraps(func)
    def inner(*args,**kwargs):
        print('在被装饰器之前做的事:')
        ret = func(*args,**kwargs)
        print('在被装饰的函数执行之后做的事:')
        return ret
    return inner

@wrapper
def h(day):
    print("gg")
    return 'tyw'
print(h.__name__)#h

View Code

带参数的装饰器

Python学习之路 Python学习之路

import time
flag = True
def timmer_out(flag):
    def timmer(func):
        def inner(*args,**kwargs):
            if flag:
                start = time.time()
                ret = func(*args,**kwargs)
                end = time.time()
                print(end - start)
                return ret
            else:
                ret = func(*args,**kwargs)
        return inner
    return timmer
@timmer_out(flag) # == timmer = timmer_out(flag)
                  # @timmer
def ww():
    time.sleep(0.1)
    print('hhh')
@timmer_out(flag)
def egt():
    time.sleep(0.1)
    print('dddgs')
flag =  False
ww()
egt()
# hhh
# 0.10020256042480469
# dddgs
# 0.10077428817749023

View Code

多个装饰器装饰一个函数

Python学习之路 Python学习之路

def wapper1(func):
    def inner1():
        print('wrap1,bf func')
        func()
        print('qrp1,af func')
    return inner1
def wapper2(func):
    def inner2():
        print('wrap2,bf func')
        func()
        print('qrp2,af func')
    return inner2
@wapper2
@wapper1
def f():
    print('in f')
f()
# wrap2,bf func
# wrap1,bf func
# in f
# qrp1,af func
# qrp2,af func

View Code

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
1年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
1年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Wesley13 Wesley13
1年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Stella981 Stella981
1年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
1年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
1年前
HIVE 时间操作函数
日期函数UNIX时间戳转日期函数: from\_unixtime语法:   from\_unixtime(bigint unixtime\, string format\)返回值: string说明: 转化UNIX时间戳(从19700101 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式举例:hive   selec
Wesley13 Wesley13
1年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_