python第六节课 日志 列表字典set推导 迭代器生成器

#导入日志模块
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)




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值