您的位置:首页 > 编程语言 > Python开发

老男孩学习---python课程Day05

2016-06-10 00:00 597 查看

<center>oldboy 13 Day_5笔记</center>

<center>[武sir的博客内容(单击进入)][1]</center>
<center>[Alex的博客内容][2]</center>
----------

#1.多层装饰器

def d(func):
def inner():
print('d:装饰器_1')
func()
return func
return inner

def e(func):
def inner():
print('e:装饰器_2')
func()
return func
return inner

@d
@e
def b():
print('b:222')

#2.字符串格式化
##% 与 format

s = '名字:%s,年龄:%d' %('panda',12)

print(s)

s = '名字:%(name)s,年龄:%(age)d' %{'name':'panda','age':12}

print(s)

s = '名字:%(name)+10s,年龄:%(age)d' %{'name':'panda','age':12}

print(s)

s = '名字:%(name)s,年龄:%(age)+10d' %{'name':'panda','age':12}

print(s)

s = '名字:%(name)s ,年龄:%(age)+10d ,p:%(p).2f' %{'name':'panda','age':12,'p':1.234354}

print(s)

##常用格式化

tpl = "i am %s" % "alex"

tpl = "i am %s age %d" % ("alex", 18)

tpl = "i am %(name)s age %(age)d" % {"name": "alex", "age": 18}

tpl = "percent %.2f" % 99.97623

tpl = "i am %(pp).2f" % {"pp": 123.425556, }

tpl = "i am %.2f %%" % {"pp": 123.425556, }

##format()

s1 = 'asdsads{0}12321{0}asdsad{1}sa'.format('哈哈','呀呀')

print(s1)

s1 = 'name:{name:s},age:{age:d}'.format(name='panda',age=32)

print(s1)

s1 = '-----{:*^20s}====='.format('panda')
print(s1)

s1 = '-----{:*^20s}====={:+d}___{:#b}'.format('panda',123,15)
print(s1)


<font color="#D2691E">Format 与 %的区别</font>

<font color="#DC143C">format可以填充字符</font>

<font color="#DC143C">可以居中</font>

<font color="#DC143C">%的区别</font>

<font color="#DC143C">二进制,十进制等可以表示</font>

常用的format:

tpl = "i am {}, age {}, {}".format("seven", 18, 'alex')

tpl = "i am {}, age {}, {}".format(*["seven", 18, 'alex'])

tpl = "i am {0}, age {1}, really {0}".format("seven", 18)

tpl = "i am {0}, age {1}, really {0}".format(*["seven", 18])

tpl = "i am {name}, age {age}, really {name}".format(name="seven", age=18)

tpl = "i am {name}, age {age}, really {name}".format(**{"name": "seven", "age": 18})

tpl = "i am {0[0]}, age {0[1]}, really {0[2]}".format([1, 2, 3], [11, 22, 33])

tpl = "i am {:s}, age {:d}, money {:f}".format("seven", 18, 88888.1)

tpl = "i am {:s}, age {:d}".format(*["seven", 18])

tpl = "i am {name:s}, age {age:d}".format(name="seven", age=18)

tpl = "i am {name:s}, age {age:d}&quo
3ff0
t;.format(**{"name": "seven", "age": 18})

tpl = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%}".format(15, 15, 15, 15, 15, 15.87623, 2)

tpl = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%}".format(15, 15, 15, 15, 15, 15.87623, 2)

tpl = "numbers: {0:b},{0:o},{0:d},{0:x},{0:X}, {0:%}".format(15)

tpl = "numbers: {num:b},{num:o},{num:d},{num:x},{num:X}, {num:%}".format(num=15)

##往期回顾
###filter函数

li = [11,22,33]

r = filter(lambda x:x >22,li)

print(r)

<font color="#DC143C">map()需要回顾!</font>

#3.生成器

def func():
yield 1
yield 'panda'
yield 3

ret = func()
print(ret)
for i in ret:
print(i)


yield控制

def func():
print('1111')
yield 1
print('2222')
yield 'panda'
print('3333')
yield 3

ret = func()
r1 = ret.__next__() #进入函数找到yield,获取yield后面的数据
print(r1)
r2 = ret.__next__() #进入函数找到yield,获取yield后面的数据
print(r2)
r3 = ret.__next__() #进入函数找到yield,获取yield后面的数据
print(r3)


生成arg个数,超出返回

def myrange(arg):
start = 0
while True:
if start > arg:
return
yield start
start += 1

r = myrange(3)
a = r.__next__()
print(a)
a = r.__next__()
print(a)
a = r.__next__()
print(a)
a = r.__next__()
print(a)
a = r.__next__()
print(a)

#4.迭代器

def myrange(arg):
start = 0
while True:
if start > arg:
return
yield start
start += 1

r = myrange(3)

for i in r:
print(i)

#5.递归

def d():
return '123'
def c():
r = d()
return r
def b():
r = c()
return r
def a():
r = b()
print(r)

a()

def func(n):
n += 1
if n >= 5:
return 'end'
else:
print(n)
return func(n)

print(func(0))

#6.模块

内置模块

第三方模块

自制模块

import sys
print(sys.argv)

定义一个自定义模块test(放到lib目录中)

def a(arg):
x = print(arg)
return x




导入自定义的模块

import lib.test
lib.test.a(123)




在sys上导入模块

import sys
sys.path.append('/data/panda_python/panda_learn_python/Day_5/lib')
import order

<font color="#DC143C">模块的名称很重要,不要和内置模块重名!</font>

from import

from lib import order
order.a()


<font color="#DC143C">1.单模块:
import ***
</font>

<font color="#DC143C">2.嵌套在文件夹下:
from *** import ***
from *** import *** as ***
</font>
##第三方模块

request模块

pip3安装
<font color="#D2691E">pip3 install ***</font>

源码安装
<font color="#D2691E">进入对应下载包路径</font>
<font color="#D2691E">python3 install setup</font>

###安装request练习
<font color="#D2691E">python3 -m pip install request</font>
备注: <font color="#DC143C">python3 -m pip install</font> <font color="#D2691E">模块名称</font>

##序列化与反序列化模块

import json

import json

dict = {'k1':'v1'}
print(dict,type(dict))
#将python基本数据类型转换成字符串形式
result = json.dumps(dict)
print(result,type(result))

<font color="#DC143C">将字典转换成字符串:</font>


import json

s1 = '{"k1":"v1"}'
# s1 = "{'k1':'v1'}"    #这个是错误的,字符串形式中的内容必须用双引号!!!
print(s1,type(s1))
#将python基本数据类型转换成字符串形式
result = json.loads(s1)
print(result,type(result))

<font color="#DC143C">将字符串转换成字典:</font>


代码1 :

import requests
import json

r = requests.get('http://wthrcdn.etouch.cn/weather_mini?city=北京')
r.encoding = 'utf-8'
print(r.text,type(r.text))

dic = json.loads(r.text)
print(type(dic))

代码2 :

import requests
import json

r = requests.get('http://wthrcdn.etouch.cn/weather_mini?city=北京')
r.encoding = 'utf-8'

dic = json.loads(r.text)
print(dic,type(dic))

总结 :

import json
#python 基本数据类型转换字符串
r = json.dumps([11,22,33])
li = '["panda","zanda"]'
ret = json.loads(li) #通过loads反序列化时,一定要用""
print(ret,type(ret))

###json.dump() 与 json.load()

import json

li = [11,22,33]

json.dump(li,open('db','w'))    #首先将字符串序列化,然后写入文件
json.load(open('db','w'))   #首先打开文件,将数据读到内存,然后将数据序列化成列表


import pickle(python专用)

pickle.dumps() 与 pickle.loads()

import pickle

li = [11,22,33]

r = pickle.dumps(li)
print(r)

result = pickle.loads(r)
print(result)


pickle.dump() 与 pickle.load()

import pickle

li = [11,22,33]

pickle.dump(li,open('db','wb')) #以python的认识的类型保存
result = pickle.load(open('db','rb'))
print(result,type(result))


json与pickle的对比

<font color="#8B008B">json更加适合跨语言,字符串,基本数据类型</font>
<font color="#8B008B">pickle:更适合做所有类型的序列化,仅使用于python</font>

##time模块

import time

print(time.time())  #从1970年1月1日到现在的计时时间(1970年linux正式发布)

print(time.ctime())     #当前系统时间

print(time.ctime(time.time()- 86400))     #返回前一天的时间

print(time.gmtime())    #将时间分字段可以获取,格林威治时间

a = time.gmtime()
print(a.tm_year,a.tm_mday)

print(time.localtime())     #本地时间

print(time.mktime(a))    #必须要传参数(时间对象),把时间对象转换成时间戳

time.sleep(3)   #延迟3秒

t = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())    #将时间对象转换成指定的字符串格式
print(t)

tm = time.strptime("2016-05-6 14:06","%Y-%m-%d %H:%M")     #将时间格式转换成时间对象
print(tm)

time.mktime(time.localtime())       #将字符串装成时间戳

##datetime模块

import datetime

print(datetime.date.today())    #当前的日期

r = datetime.datetime.now()     #当前的时间
print(r)

print(datetime.datetime.now() + datetime.timedelta(days=10))    #加10天

current_time = datetime.datetime.now()
print(current_time.replace(2015,5,1))      #修改替换时间

time_obj = current_time.replace(2015,5)
print(type(time_obj))

print(current_time > time_obj)  #可以做时间的比较

##logging模块(日志记录)

import logging

logging.warning('11111')
logging.critical('server is down')

logging.basicConfig(filename='error.log',
level=logging.WARNING,
format='%(asctime)s %(message)s',
datefmt='%m/%d/%Y %I:%M:%S %p')     #只有warning或更高的级别记录在文件中

日志记录:

import logging

# create logger
logger = logging.getLogger('TEST-LOG')  #get the logger object first
logger.setLevel(logging.DEBUG)  #set a global log level

# create console handler and set level to debug
ch = logging.StreamHandler()    #print the log on monitor
ch.setLevel(logging.DEBUG)      #set a monitor log level

# create file handler and set level to warning
fh = logging.FileHandler("access.log")  #print the log on file
fh.setLevel(logging.WARNING)    #set a file log level
# create formatter
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')   #设定输出格式

# add formatter to ch and fh
ch.setFormatter(formatter)
fh.setFormatter(formatter)

# add ch and fh to logger
logger.addHandler(ch)       #tell the logger to input the log into specified handler
logger.addHandler(fh)

# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: