zoukankan      html  css  js  c++  java
  • python学习第四周总结

    一、Python封装与解构

    • 封装:将多个值使用逗号分割,组合在一起。本质上返回一个元组,只是省掉了小括号。
    • 解构:把线性结构的元素解开,并顺序的赋给其他变量。左边接纳的变量数要和右边解开的元素个数一致。

    例一:

    t1 = (1,2)
    t2 = 1,2    #将1和2封装成元组
    

    例二:交换的数据

    #数据位置交换
    x = 10
    y = 11
    temp = x   #把x赋值于一个新的变量
    x = y
    y = temp
    
    #封装和解构,交换
    x = 10
    y = 11
    x,y = y,x
    

    例三:

      lst = [3,5] 2 first,second = lst #将列表中的值结构后分别赋给 first和secon 

    • 剩余变量解构

    • 【*】标识符
    1. 收集尽可能多的元素
    2. 使用 *变量名 接收,但不可单独使用
    3. *变量名 收集后组成一个列表
    a1,a2,*a3,a4 = range(10)  #其中*a3就将结构后多余的数据全部给自己。
    print(a1,a2,a4)         
    print(a3)
    • 【_】丢弃的变量
    1. 如果不关心一个比那里,可以定义该变量的名字为【_】
    _,_,(*_,a),*_ = [1,2,(3,4,5),6,7]
    print(a)

    二、解析式和生成器表达式

    1、列表解析式

    • 列表解析式List Comprehension,也叫列表推导式。

    例:

    #生成一个列表,元素0~9,将每一个元素加1后的平方值组成新的列表
    x = []
    for i in range(10):
        x.append( (i + 1) **2 )
    print(x)
    
    
    #列表解析式
    print([(i + 1) **2 for i in range(10)])

    语法

    • 【返回值for元素in可迭代对象if条件】
    • 使用中括号【】,内部是for循环,if条件语句可选
    • 立即返回一个新的列表

    列表解析式的优点

    • 编译器会优化,不会因为简写而影响效率,反而因优化提高了效率
    • 减少程序工作量,减少出错
    • 简化代码,可读性增强

    2、生成器表达式

    • 语法
    1. (返回值 for 元素 in 可迭代对象 if 条件)
    2. 使用小括号(),内部是for循环,if条件语句可选,会返回一个生成器对象
    • 生成器与列表解释器的区别
    1. 生成器表达式是按需计算(或称为惰性求值、延迟计算),需要的时候才计算值
    2. 列表解析式是立即返回值
    • 生成器:是一个可迭代对象。是一个迭代器

    生成器:是一个可迭代对象。是一个迭代器

    生成器表达式和列表解析式的区别

    • 计算方式
    1. 生成器表达式:延迟计算,按需取值。
    2. 列表解析器:立即计算,得到所有值
    • 内存占用
    1. 生成器表达式:节约内存,生成器对象是个对象,需要数据时就计算获取一个值
    2. 列表解析式:占用内存与数据总量一致。
    • 计算速度
    1. 生成器表达式:   耗时非常短
    2. 列表解析式:   耗时长

    集合解析式

    • {返回值 for 元素 in 可迭代对象 if 条件}
    • 使用大括号{},值必须是可哈希,内部是for循环,if条件语句可选,会返回一个集合
    {(x,x+1) for x in range(10)}
    { x for x in range(10)}

    字典解析式

    • {返回值 for 元素 in 可迭代对象 if 条件}
    • 使用大括号{},值使用key:value形式定义,key必须是可哈希,内部是for循环,if条件语句可选,会返回一个字典
    dictt1 = { x:x+1 for x in range(10)}
    dictt2 = {x:[x+1] for x in range(10)}
    dictt3 = {(x,):[x+1] for x in range(10)}
    dictt4 = {str(x):[x,x+1] for x in range(10)}
    dictt5 = {chr(0x41+x):x**2 for x in range(10)}
    print(dictt1,dictt2,dictt3,dictt4,dictt5,sep="
    ")

    总结

    • Python2 引入列表解析式
    • Python2.4 引入生成器表达式
    • Python3 引入集合、字典解析式,并迁移到了2.7
    1. 一般来说应该多用解析式,简短、高效。如果一个解析式非常复杂难读懂,要考虑使用for循环
    2. 生成器和迭代器是不同的对象,单都是可迭代对象
    • 生成器对象 —— 一定是迭代器 —— 一定可迭代
    • 迭代器:能用next()函数调用取下一个值。是迭代器  —— 一定可迭代
    • 可迭代对象,不一定是迭代器,也不一定是生成器对象

    三、datetime时间模块

    datetime类,时间模块中的类datetime

    类方法

    • todaty() 返回本地时区当前时间的datetime对象
    • now(tz==None) 返回当前时间的datetime对象,时间到微妙,如果tz为None,返回和today()一样
    • utcnow() 返回没有时区的当前时间
    • fromtimestamp(timestamp,tz=None)从一个时间戳返回一个datetime对象
    • timestamp 时间戳
    • tz 时区
    • strptime(date_string,format) 将指定格式的字符串转换为datetime对象,【日期的格式化】

    例:

    import datetime
    datetime.datetime.strptime("2019-04-8 15:18","%Y-%m-%d %H:%M")

    datetime对象

    • timestamp()–>int 返回一个到微妙的时间戳。
    • 时间戳:格林威治时间1970年1月1日0点到现在的秒数
    • datetime(year,month,day,hour,minute,second,microsecond)—>datetime 构造方法,创建指定时间
    • weekday() 返回本周的第几天,周一 0 ,周日 6
    • isoweekday() 返回本周的第几天,周一 1 ,周日 7
    • date() 返回日期date对象
    • time() 返回时间time对象
    • replace() 修改并返回新的时间
    • socalendar() 返回一个三元组(年,周数,一周内的第几天)
    • strftime(format) —>string,将datetime对象转换成指定格式的时间字符串

    例:

    import datetime
    datetime.datetime.today().strftime("%Y-%m-%d %H:%M:%S")
    "{0:%Y}-{0:%m}-{0:%d}".format(datetime.datetime.today())

    timedelta对象(时间差)

    • datetime.timedelta(days=0,seconds=0,microseconds=0,milliseconds=0,minutes=0,hours=0,weeks=0)

    构造方法

    • timedelta对象还可以根据两个时间相减得到。
    • 例如: timedelta = datetime1 - datetim2
    • 同样datetime加上timedelta可以获取新的datetime对象。则 datetime2 = datetime1 + timedlata
    • total_seconds() 返回时间差的总秒数

    例:

    import datetime
    d1 = datetime.datetime.now() # 获取当前时间
    d2 = datetime.datetime.utcnow() # 获取utc时间
    d3 = datetime.datetime.today() # 获取当前时间
    d4 = datetime.datetime(2019,4,10) # 获取指定时间
    print(d1,d2,d3,d4,sep="
    ")
    
    d5 = datetime.datetime.fromtimestamp(d4.timestamp()) # 根据d4的时间戳获取datetime对象
    d6 = datetime.datetime.fromtimestamp(int(d3.timestamp())) # 根据d3的时间戳(只要秒以前的),获取datetime对象
    print(d5,d6,sep="
    ")
  • 相关阅读:
    实用小软件
    没有找到MSVCP71.dll,迅雷5无法进行离线下载,P2P Seacher无法连入emule网络
    PSP2000V3版5.03系统误删PSP文件夹的拯救方案
    图书馆图书检索的小技巧
    thinkpad指点杆(trackpoint)在WPS的word文档中失效的解决办法
    笔记本电池死而复生
    调试Page.IsPostBack,感觉好奇怪
    OleDbSchemaGuid.Columns返回DataTable介绍
    静态类生命周期的问题
    IE中居中,FF中出问题
  • 原文地址:https://www.cnblogs.com/fjjj/p/12687924.html
Copyright © 2011-2022 走看看