python日志、推导、迭代器

日志:

import logging
LOG_FORMAT="%(asctime)s - %(levelname)s - %(message)s"
logging.basicConfig(level=logging.DEBUG,format=LOG_FORMAT)
def test():
    try:
        a=int(input("请输入一个被除数:"))
        b=int(input("请输入一个除数:"))
        print(a/b)
        return
    except (ValueError):
        logging.debug("只能输入数字")
    except ZeroDivisionError:
        logging.info("除数不能为0")
    else:
        print("else...")
    finally:
        print("程序结束")
test()

推导:

#列表推导
numbers=[]
# for x in range(100):
#     if x % 3==0:
#         numbers.append(x)

#用推导实现   要用中括号括起来
numbers=[x for x in range(100)if x % 3==0]
print(numbers)
#推导也可以里面嵌套一个函数
def squared(x):
    return x*x
multiples=[squared(i) for i in range(30)if i % 3 is 0]
print(multiples)

#字典推导  用大括号括起来
mcase={'a':10,'b':34}
mcase_frequency={v:k for k,v in mcase.items()}
print(mcase_frequency)

#集合推导
squared={x**2 for x in[1,1,2]}
print(squared) #集合里面都是唯一的不能重复

#练习:
squares=[x**2 for x in range(10)]
print(squares)

#把长度大于3的名字输出大写
names=['bob','tom','alice','jerry','wendy','smith']
aaa=[name.upper() for name in names if len(name)>3]
print(aaa)
#输出(x,y)X0-5  偶数   Y 为0-5 奇数
xx=[(x,y) for x in range(5) if x % 2==0 for y in range(5) if y % 2==1]
print(xx)
#矩阵每个元素相乘
m=[[1,2,3],[4,5,6],[7,8,9]]
n=[[2,2,2],[3,3,3],[4,4,4]]
list=[[m[i][0]*n[i][0],m[i][1]*n[i][1],m[i][2]*n[i][2]] for i in range(len(m))]
print(list)

迭代器:

from collections import Iterable
#迭代器有两个基本方法:__iter__()和__next__()
class InterratorDemo:
    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=InterratorDemo(0,5)
print(it.__next__())
print(it.__next__())
print(it.__next__())
print(it.__next__())
print(it.__next__())
 

生成器:

#生成器
#1.第一种实现生成器的方式,推导外面写()
test=(x for x in range(10))#中括号变成小括号 就是推导变成生成器了
print(test.__next__())#得到每一个值
#2.第二种实现生成器的方式
def feibonaqie():#菲波那切数列
    a=b=1
    print(a)
    print(b)
    for i in range(7):
        yield (a+b)
        a,b=b,a+b
f=feibonaqie()
# print(f.__next__())
for i in f:
    print(i)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值