解析式

列表解析式和字典解析式

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)
zhangmengzhangmeng
上一篇 2018-04-09 08:55
下一篇 2018-04-09

相关推荐

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

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

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

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

    2018-03-31
  • 日志分析项目

    日志分析

    2018-05-07
  • Python高阶函数及装饰器

    First Class Object 函数在Python中是一等公民 函数也是对象,可调用的对象 函数可作为普通变量、参数、返回值等 高阶函数 数学定义:y=g(f(x)) 高阶函数需满足的条件,至少其一 接受一个或多个函数作为参数 输出一个函数 内建函数的高阶函数 排序:sorted(iterable[,key][,reverse]) 返回一个新列表,对一…

    2018-04-22
  • 树 非线性结构,每个元素都可以有多个前驱和后继 树是n(n>=0)个元素 n = 0时,称为空树 树只有一个特殊的没有前驱的元素,称为树的根root 树中除了根结点,其余元素只能有一个前驱,可以有0个或者多个后继 递归定义 树T是n(n>=0)个元素的集合,n=0时,称为空树 有且只有一个特殊元素根,剩余元素都可以被划分为m个互不相交的集合T1,…

    2018-04-16
  • Python面向对象基础

    语言分类 面向机器 抽象成机器指令,让机器容易理解 代表:汇编语言 面向过程 按照步骤一步一步走,若出现情况A做相应的处理,若出现情况B做相应的处理 问题规模小,可以步骤化,按部就班处理 代表:C 面向对象OOP 计算机需要处理的问题的规模越来越大,需要多人、多部门协作 代表:C++、Java、Python 面向对象 一种认识世界、分析世界的方法论。将万事万…

    2018-05-06