python 双层装饰器格式化模块迭代器和生成器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 双层装饰器格式化模块迭代器和生成器相关的知识,希望对你有一定的参考价值。

一、双层装饰器

一、双层装饰器


#!/usr/bin/env python
# -*- coding:utf-8 -*-
USER_INFO={}
#USER_INFO[‘is_login‘] = True
#USER_INFO[‘user_type‘] = 2

def check_login(func):
    def inner(*args ,**kwargs):
        if USER_INFO.get(‘is_login‘,None):
            ret = func(*args,**kwargs)
            return  ret
        else:
            print(‘请登录‘)
    return  inner
def check_admin(func):
    def inner(*args ,**kwargs):
        if USER_INFO.get(‘user_type‘,None)==2:
            ret = func(*args,**kwargs)
            return  ret
        else:
            print(‘无权查看‘)
    return  inner
@check_login
@check_admin
def index():
    print("index")
index()

#号的函数分别打开执行代码

以下为执行结果:
请登录
无权查看
index
 

二、格式化

1.%s %d

#常用格式化:

tpl = "i am %s" % "alex"
print(tpl)
以下为执行结果:
i am alex

tpl = "i am %s age %d" % ("alex", 18)
print(tpl)
以下为执行结果:
i am alex age 18

tpl = "i am %(name)s age %(age)d" % {"name": "alex", "age": 18}
print(tpl)
以下为执行结果:
i am alex age 18

tpl = "percent %.2f" % 99.97623
print(tpl)
以下为执行结果:
percent 99.98

tpl = "i am %(pp).2f" % {"pp": 123.425556, }
print(tpl)
以下为执行结果:
i am 123.43

tpl = "i am %.2f %%" % 123.425556
print(tpl)
以下为执行结果:
i am 123.43 %

2.format

#常用格式化:
tpl = "i am {}, age {}, {}".format("seven", 18, ‘alex‘)
print(tpl)
以下为执行结果:
i am seven, age 18, alex

tpl = "i am {}, age {}, {}".format(*["seven", 18, ‘alex‘])
print(tpl)
以下为执行结果:
i am seven, age 18, alex

tpl = "i am {0}, age {1}, really {0}".format("seven", 18)
print(tpl)
以下为执行结果:
i am seven, age 18, really seven

tpl = "i am {0}, age {1}, really {0}".format(*["seven", 18])
print(tpl)
以下为执行结果:
i am seven, age 18, really seven

tpl = "i am {name}, age {age}, really {name}".format(name="seven", age=18)
print(tpl)
以下为执行结果:
i am seven, age 18, really seven

tpl = "i am {name}, age {age}, really {name}".format(**{"name": "seven", "age": 18})
print(tpl)
以下为执行结果:i am seven, age 18, really seven
i am seven, age 18, really seven

tpl = "i am {0[0]}, age {0[1]}, really {0[2]}".format([1, 2, 3], [11, 22, 33])
print(tpl)
以下为执行结果:
i am 1, age 2, really 3

tpl = "i am {:s}, age {:d}, money {:f}".format("seven", 18, 88888.1)
print(tpl)
以下为执行结果:
i am seven, age 18, money 88888.100000

tpl = "i am {:s}, age {:d}".format(*["seven", 18])
print(tpl)
以下为执行结果:
i am seven, age 18

tpl = "i am {name:s}, age {age:d}".format(name="seven", age=18)
print(tpl)
以下为执行结果:
i am seven, age 18

tpl = "i am {name:s}, age {age:d}".format(**{"name": "seven", "age": 18})
print(tpl)
以下为执行结果:
i am seven, age 18

tpl = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%}".format(15, 15, 15, 15, 15, 15.87623, 2)
print(tpl)
以下为执行结果:
numbers: 1111,17,15,f,F, 1587.623000%

tpl = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%}".format(15, 15, 15, 15, 15, 15.87623, 2)
print(tpl)
以下为执行结果:
numbers: 1111,17,15,f,F, 1587.623000%

tpl = "numbers: {0:b},{0:o},{0:d},{0:x},{0:X}, {0:%}".format(15)
print(tpl)
以下为执行结果:
numbers: 1111,17,15,f,F, 1500.000000%

tpl = "numbers: {num:b},{num:o},{num:d},{num:x},{num:X}, {num:%}".format(num=15)
print(tpl)
以下为执行结果:
numbers: 1111,17,15,f,F, 1500.000000%
 

三、迭代器生成器

def func():
print(‘start‘)
print(‘11111111‘)
yield 1
print(‘2222222222222‘)
yield 2
print("33333333333333")
yield 3
print("4444444444")
yield ("aaaaaaaa")ret = func()
print(ret)
# for i in ret:
#     print(i)
r1 = ret.__next__() #进入函数找到yileld,获取yield后面的数据。
print(r1)
r2 = ret.__next__() #进入函数找到yileld,获取yield后面的数据。
print(r2)
r3 = ret.__next__() #进入函数找到yileld,获取yield后面的数据。
print(r3)
r4 = ret.__next__() #进入函数找到yileld,获取yield后面的数据。
print(r4)
以下为执行结果:
start
11111111
1
2222222222222
2
33333333333333
3
4444444444
aaaaaaaa

while循环生成迭代器

def myrange(arg):
    start=0
    while True:
        yield start
        start+=1
ret =myrange(3)
r = ret.__next__()
print (r)
r = ret.__next__()
print (r)
r = ret.__next__()
print (r)
r = ret.__next__()
print (r)
以下为执行结果:
0
1
2
3

递归

def func(n):
    n +=1
    if n >=10:
        return ‘end‘
    print (n)
    return  func(n)
r = func(1)
print(r)
以下为执行结果:
2
3
4
5
6
7
8
9
end
 

四、模块

 

json

将字符串转换成基本数据类型

 import  json
    dic = {‘k1‘:"v1"}
    #将字典转换成字符串
    result = json.dumps(dic)
    print ("result",type(result))

#将字符串转换成基本数据类型
s1 = ‘{"k1":123}‘
dic = json.loads(s1)
print  ("dic",type(dic))

import requests
response = requests.get(‘http://wthrcdn.etouch.cn/weather_mini?city=北京‘)
response.encoding=‘utf-8‘
dic = json.loads(response.text)
print(dic)
以下为执行结果:
result <class ‘str‘>
dic <class ‘dict‘>
{‘data‘: {‘wendu‘: ‘24‘, ‘forecast‘: [{‘date‘: ‘10日星期五‘, ‘high‘: ‘高温 31℃‘, ‘type‘: ‘雷阵雨‘, ‘low‘: ‘低温 20℃‘, ‘fengli‘: ‘3-4级‘, ‘fengxiang‘: ‘北风‘}, {‘date‘: ‘11日星期六‘, ‘high‘: ‘高温 30℃‘, ‘type‘: ‘多云‘, ‘low‘: ‘低温 19℃‘, ‘fengli‘: ‘微风级‘, ‘fengxiang‘: ‘无持续风向‘}, {‘date‘: ‘12日星期天‘, ‘high‘: ‘高温 32℃‘, ‘type‘: ‘晴‘, ‘low‘: ‘低温 21℃‘, ‘fengli‘: ‘微风级‘, ‘fengxiang‘: ‘无持续风向‘}, {‘date‘: ‘13日星期一‘, ‘high‘: ‘高温 27℃‘, ‘type‘: ‘雷阵雨‘, ‘low‘: ‘低温 18℃‘, ‘fengli‘: ‘微风级‘, ‘fengxiang‘: ‘无持续风向‘}, {‘date‘: ‘14日星期二‘, ‘high‘: ‘高温 26℃‘, ‘type‘: ‘阵雨‘, ‘low‘: ‘低温 17℃‘, ‘fengli‘: ‘微风级‘, ‘fengxiang‘: ‘无持续风向‘}], ‘ganmao‘: ‘各项气象条件适宜,发生感冒机率较低。但请避免长期处于空调房间中,以防感冒。‘, ‘city‘: ‘北京‘, ‘yesterday‘: {‘date‘: ‘9日星期四‘, ‘high‘: ‘高温 32℃‘, ‘type‘: ‘阴‘, ‘low‘: ‘低温 22℃‘, ‘fx‘: ‘南风‘, ‘fl‘: ‘3-4级‘}, ‘aqi‘: ‘120‘}, ‘status‘: 1000, ‘desc‘: ‘OK‘}

python基本数据类型转换字符串

import json
#python基本数据类型转换字符串
r =json.dumps([11,22,33])
li="[‘alex‘,‘eric‘]"
ret = json.load(li) #通过load反序列话,一定要用双引号。
print (ret,type(ret))
import json
#python基本数据类型转换字符串
r =json.dumps([11,22,33])
li="[‘alex‘,‘eric‘]"
ret = json.load(li) #通过load反序列话,一定要用双引号。
print (ret,type(ret))
 

pickle

import  pickle     #jsonzhi只能支持 基本的数据类型,pickle支持任何类型
li = [11,22,33]
r = pickle.dumps(li)
print(r)
result =pickle.loads(r)
print(result)

pickle.dump(li,open(‘db‘,‘wb‘))

r=pickle.load(open(‘db‘,‘rb‘))
print (r)
以下为执行结果
b‘\x80\x03]q\x00(K\x0bK\x16K!e.‘
[11, 22, 33]
[11, 22, 33]
 

time

import time

print (time.time())  #1970 uninx
以下为执行结果:
1465551477.927157

print (time.ctime())
以下为执行结果:
Fri Jun 10 17:37:57 2016

print (time.ctime(time.time()-86640))
以下为执行结果:
Thu Jun  9 17:33:57 2016

time_obj = time.gmtime()
print (time_obj)
以下为执行结果:
time.struct_time(tm_year=2016, tm_mon=6, tm_mday=10, tm_hour=9, tm_min=37, tm_sec=57, tm_wday=4, tm_yday=162, tm_isdst=0)

print ("{year}-{month}".format(year=time_obj.tm_year,month=time_obj.tm_mon))
以下为执行结果:
2016-6

print(time.localtime())
以下为执行结果:
time.struct_time(tm_year=2016, tm_mon=6, tm_mday=10, tm_hour=17, tm_min=37, tm_sec=57, tm_wday=4, tm_yday=162, tm_isdst=0)

print(time.mktime(time.localtime())) #转换成时间戳
以下为执行结果:
1465551477.0

tm=time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime())
print(tm)
以下为执行结果
2016-06-10 09:37:57

print(time.strptime("2016-05-6 10:15","%Y-%m-%d %H:%M"))
以下为执行结果:
time.struct_time(tm_year=2016, tm_mon=5, tm_mday=6, tm_hour=10, tm_min=15, tm_sec=0, tm_wday=4, tm_yday=127, tm_isdst=-1)
 

datetime

import datetime
print(datetime.date.today())
以下为执行结果:
2016-06-10

print(datetime.datetime.now())
以下为执行结果:
2016-06-10 17:44:50.304135

print(datetime.datetime.now() -datetime.timedelta(hours=10))
以下为执行结果:
2016-06-10 07:44:50.304135

print(datetime.datetime.now().replace(1988,10,18))
以下为执行结果:
1988-10-18 17:44:50.304135

str_to_date = datetime.datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
print(str_to_date)
以下为执行结果:
2006-11-21 16:30:00

以上是关于python 双层装饰器格式化模块迭代器和生成器的主要内容,如果未能解决你的问题,请参考以下文章

python- 双层装饰器 字符串格式化 python模块 递归 生成器 迭代器 序列化

python-学习笔记之-Day5 双层装饰器 字符串格式化 python模块 递归 生成器 迭代器 序列化

Python初探第二篇-装饰器和迭代器,生成器

python 基础 day5

Python之装饰器迭代器和生成器

Python迭代器和生成器,装饰器