解析式

列表解析式和字典解析式

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

(0)
上一篇 2018-04-09 08:55
下一篇 2018-04-09 10:58

相关推荐

  • Python数据结构

    数据结构个人总结,方便以后查找。

    Python笔记 2018-04-01
  • Ipython封装解构

    IPython Shell命令 !command 执行shell命令 !ls -l , !touch a.txt file = !ls -l | grep py 魔术方法 使用%开头的,IPython内置的特殊方法 %magic 格式 %开头是line magic %% 开头是cell magic,notebook的cell %alias 定义一个系统命令的…

    2018-04-09
  • 树 非线性结构,每个元素可有多个前驱和后继 树是n(n>=0)个元素的集合,n=0时,称为空树,树只有一个特殊的没有前驱的元素,称为树的根root,树中除了根结点外,其余元素只能有一个前驱,可以有零个和多个后继,子树也有自己的根 结点:树中的数据元素 结点的度degree:结点拥有的子树的数目称为度,记作d(v)。树的度是树内各结点的度最大值 叶子结点…

    2018-04-16
  • Python函数返回值、作用域以及树的概念

    Python函数返回值、作用域以及树的概念

    Python笔记 2018-04-15
  • 内置数据结构

    list,tuple,str,bytes,bytearray,set,切片,分装解构,冒泡法

    2018-03-31
  • 二叉树的遍历和堆排序

    二叉树的遍历和堆排序

    Python笔记 2018-05-16