解析式

列表解析式和字典解析式

datetime模块

对日期,时间,时间戳的处理

datetime

today()返回本地时区当前的datetime对象

now(tz=None)返回当前时间的datetime对象,时间到微秒,如果tzNone,返回和today()一样

utcnow()没有时区的当前时间

fromtimestamp(timestamp,tz=Zone)从时间戳返回另一个datetime对象

datetime对象

Timestamp()返回一个到微秒的时间戳

时间戳:格林威治时间1970110点到现在的秒数

标准库datetime

日期格式化

类方法strptimedate_string,format,返回datetime对象

对象方法strfimeformat),返回字符串

字符串format函数格式化

timedate对象

datetime2 = datetime1 + datetime2

datetime2 =datetime1 – timedate

timedate = datetime -datetime2

构造方法

Datetime.timedelta(days=0,seconfs=0,microseconds=0,milliseconds=0,minutes=0,hours=0,weeks=0)

Year = datetime.timedelta(days=365)

Total_seconds()返回时间差的总秒数

标准库time

time.sleep(secs)将调用线程挂起指定的秒数

列表解析

生成一个列表,元素0~9对每一个元素自增1后求平方返回新的列表

lst1 = list(range(10))

lst2 = []

for i in lst1:

    lst2.append((i+1)**2)

print(lst2)

列表解析式

lst1 = list(range(10))

lst2 = [lst2.append((i+1)**2) for i in lst1]

print(lst2)

print(type(lst2))

列表解析

语法:[返回值 for 元素 in  可迭代对象 if条件]

使用中括号[],内部是for循环,if条件语句可选

返回一个新的列表

列表解析式是一种语法糖

编译器会优化,不会因为简写而影响效率,反而优化提高了效率

减少程序员工作量,减少出错

简化了代码,但可读性强

举例:获取10以内的偶数,比较执行效率

lst = []

for i in range(10):

    if i % 2 == 0:

        print(i)

解析式:[i for i in range(10) if i % 2 == 0]

列表解析式进阶

[expr for i in iterable1 for j in iterable2]等价于

expr = []

for i in iterable1:

    for j in range(iterable2):

        ret.append(expr)

练习题:返回1-10平方的列表

[i**2 for i in range(1,11)]

有一个新列表 lst = [] ,生成一个新列表,要求列表元素是lst相邻之和

 [ (lst[i]+lst[i+1]) for i in range(7)]

打印99乘法表

print(“”.join([‘{}*{}={:<3}{}’.format(j,i,j*i, ‘\n’if j==i else ”) for i in range(1,10) for j in range(1,i+1) ]) )

[print(‘{}*{}={:<3}{}’.format(i,j,i*j,’\n’ if i==j else ‘ ‘),end=”) for i in range(1,10) for j in range(1,i+1)]

生成器表达式

语法:返回值 for 元素 in 可迭代对象 if 条件

列表解析式的中括号换成小括号

返回一个生成器

和列表解析式的区别

生成器表达式是按需计算(或者说是惰性求值,延迟计算),需要的时候才计算值

列表解析式是立即返回值

生成器:可迭代对象,迭代器

举例:

g = (“{:04}”.format(i)  for i in range(1,11))

next(g)

next(g)

for x in g:

    print(x)

print(‘——————–‘)

for x in g:

    print(x)

总结:延迟计算

 返回迭代器,可以迭代

从前到后走完一遍,不能回头

对比列表:

g = (“{:04}”.format(i)  for i in range(1,11))

for x in g:

    print(x)

print(‘———————‘)

for x in g:

    print(x)

立即计算,返回的不是迭代器,返回的事迭代对象列表

从前到后走完一遍后,可以重新回头迭代

和列表解析式的对比

计算方式

生成器表达式延迟计算,列表解析式立即计算

内存占用

单从返回值来说,生成器表达式省内存,列表解析式返回新的列表

生成器没有数据,内存占用极少,但是使的时候,虽然一个个返回数据,但是合起来占用的内存也差不多

列表解析式构造新的列表需要占内存

计算速度

但看时间看,生成器表达式耗时非常短,列表解析式耗时长

但是生成器本身没有返回值,只返回了一个生成器对象

列表解析式构造并返回了一个新的列表

集合解析式

语法:{返回值for 元素 in 可迭代对象 if 条件}

列表解析式的中括号换成大括号{}就行了

;立即返回一个集合

用法:{(x,x+1)for i in range(10)}

字典解析式

用法;{str(x):y for i in range(3) for y in range(4)}等价于

lsr = {}

for i in range(3):

    for y in range(4):

        lsr[str(x)] = y

print(lsr)

总结

Python2 引入了列表解析式

Python2.4 引入了生成器表达式

Python3 引入了集合,字典解析式,并迁移到了2.7

一般来说,应该多应用解析式,简短高效

如果一个解析式非常复杂,难以读懂,要考虑解成for循环

生成器和迭代器是不同的对象,但是都是可迭代对象

内建函数

标识id

返回对象的逶迤标识CPython的内存地址

哈希hash()

返回一个对象的哈希值

类型type()

返回对象的类型

类型转换

Float() int() bin() hex() oct() bool() list()  tuple()   dict() set()  complex()  bytes() bytearray()

输入input([prompt])

接收用户输入,返回一个字符串

打印print()

    打印输出,默认使用空格分割,换行结尾,输出到控制台

对象长度len()

返回一个集合类型的元素个数

Isinstance(obj,class_or_tuple)

判断对象obj是否属于某种类型或者元组中列出的某个类型

Isinstance(Ture,int)

判断类型cls是否某种类型的子类或者元组中列出的某个类型的子类

Issubclass(bool,int)

绝对值abs(x) x为数值

最大值max()  最小值min()

返回值可迭代对象中最大或者最小值

返回多个参数中最大或者最小值

Round() 四舍六入五取偶 round(-0.5)

 

 

 

 

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/95569

发表评论

登录后才能评论

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班