#导入日志模块
import logging
#制定输出格式 时间 级别 错误信息
loggingFormat="%(asctime)s - %(levelname)s - %(message)s"
#设置日志文件 指定文件名 级别 输出格式
logging.basicConfig(filename="日志文件名.txt",level=logging.DEBUG,format=loggingFormat)
#使用实例
def test():
try:
a=int(input("数字1"))
b=int(input("数字2"))
print(a,"/",b,"=",a/b)
return
except ValueError:
#信息打印在日志文件txt中
logging.debug("输入数字")
except ZeroDivisionError:
logging.debug("除数不能为0")
except Exception:
logging.debug("")
else:
print("没事")
finally:
print("结束")
test()
日志格式信息:
------logging.baiscconfig的参数信息:
filename: 指定日志文件名
filemode: 和file函数意义相同,指定日志文件的打开模式,'w'或'a'
format: 指定输出的格式和内容,format可以输出很多有用信息,如上例所示:
datefmt: 指定时间格式,同time.strftime()
level: 设置日志级别,默认为logging.WARNING
stream: 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略
2.推导式
#list推导
#参数x为返回的参数
numberget=[x for x in range(100) if x%3==0]
print(numberget)
#numberss=[0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, ************]
def cheng(x):
return x**2
#返回的值可以套函数进行运算
numcheng=[cheng(x) for x in range(100) if x%3==0]
print(numcheng)
#numcheng=1 [0, 9, 36, 81, 144, 225, 324, 441, 576, 729**************]
#字典的推导
#键值互换
tupleget={"a":1,"b":2,'c':3}
tuplesget={k:v for v,k in tupleget.items()}
#或
tuplesget2={k:v for k in tupleget.values() for v in tupleget.keys()}
print(tuplesget)
print(tuplesget2)
#{1: 'a', 2: 'b', 3: 'c'}
#3set集合推导(不重复)
squared={x**2 for x in [1,1,2]}
print(squared)
#两个for为嵌套循环
tupless=[(x,y) for x in range(5) if x%2==0 for y in range(5) ]
print(tupless)
#tupless=[(0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (2, 0), (2, 1), (2, 2), (2, 3), (2, 4), (4, 0), (4, 1), (4, 2), (4, 3), (4, 4)]
#两表相乘
m=[[1,2,3],[4,5,6],[7,8,9]]
n=[[2,2,2],[3,3,3],[4,4,4]]
listess=[[m[i][j]*n[i][j] for j in range(len(m))]for i in range(len(m))]
print(listess)
#listess=[[2, 4, 6], [12, 15, 18], [28, 32, 36]]
#迭代器生成器是python特有的 Iterrable 字符串 元组
#重写
#__iter__():返回迭代器自身
#__next__():得到下一次的值
#后可以被迭代
#异常StopIteration
#减少内存空间用一个取一个
class IteratorDemo:
def __init__(self,start=0,end=0):
self.start=start#当前下标
self.end=end#结束的下标
def __iter__(self):
return self
def __next__(self):
#得到当前指针start,让start位移
if self.start<self.end:
i=self.start#当前的下标
self.start+=1#获取下一次的下标
return i
else:
raise StopIteration
it=IteratorDemo(0,5)
print(it.__next__())
print(it.__next__())
print(type(it))
for i in it:
print("--",i)
# 生成器 yield
# 第一种方式 把列表[]改为()
test=(x for x in range(10))
#第二种方式 会停顿 每次调用__next__进入循环 for 只调用一次
#实现
def feibonaqie():
a=b=1
print(a)
print(b)
for i in range(7):
yield (a+b)
a,b=b,a+b
f=feibonaqie()#f 生成器对象
print(f.__next__())
for i in f:
print("I---",i)