日期的格式一定要写正确,正确格式如下: yyyy-MM-dd HH:mm:ss

下面总结下不同格式会出现的不同错误:

  1. 格式:YYYY-MM-dd HH:mm:ss

[format setDateFormat:@"yyyy-MM-dd"];输出2018-12-27[format setDateFormat:@"YYYY-MM-dd"];输出2019-12-27

格式是YYYY-MM-dd会出现年份不正确!这是因为YYYY
是以周为单位计算的,yyyy才是标注的年份。

图片 1

  1. 格式:yyyy-mm-dd HH:mm:ss

[format setDateFormat:@"yyyy-MM-dd"];输出2018-12-27[format setDateFormat:@"yyyy-mm-dd"];输出2018-42-27
  1. 格式:yyyy-MM-DD HH:mm:ss

[format setDateFormat:@"yyyy-MM-dd"];输出2018-12-27[format setDateFormat:@"yyyy-MM-DD"];输出2019-42-27
  1. 格式:yyyy-MM-dd HH:MM:ss

[format setDateFormat:@"HH:mm:ss"]; 输出11:58:38[format setDateFormat:@"HH:MM:ss"]; 输出11:01:38

yyyy:以四位数字格式显示年份。

M: 将月份显示为不带前导零的数字。

MM: 将月份显示为带前导零的数字(例如 2019-01)。

MMM:将月份显示为缩写形式。

MMMM:将月份显示为完整月份名(例如 January)。

d:将日显示为不带前导零的数字。如果这是用户定义的数字格式中的唯一字符,请使用
%d。

dd: 将日显示为带前导零的数字。

H:使用 24 小时制将小时显示为不带前导零的数字(例如
1:15:15)。如果这是用户定义的数字格式中的唯一字符,请使用 %H。

HH: 使用 24 小时制将小时显示为带前导零的数字(例如 01:15:15)。

h:使用 12 小时制将小时显示为不带前导零的数字(例如 1:15:15
PM)。如果这是用户定义的数字格式中的唯一字符,请使用 %h。

hh:使用 12 小时制将小时显示为带前导零的数字(例如 01:15:15 PM)。

m:将分钟显示为不带前导零的数字(例如 12:1:15)。

mm:将分钟显示为带前导零的数字(例如 12:01:15)。

s:将秒显示为不带前导零的数字(例如 12:15:5)。

ss:将秒显示为带前导零的数字(例如 12:15:05)。

所以,学编程不是为了成为程序员,而是为你打开新的职业可能性。

li[-1:-1] = 6 # (报错,TypeError: can only assign an
iterable)li[:0] = # [9, 0, 1, 2, 3, 4, 5, 6, 7]li[:0] = range #
[0, 1, 2, 9, 0, 1, 2, 3, 4, 5, 6, 7]</pre>

 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formattersetDateStyle:NSDateFormatterMediumStyle]; [formattersetTimeStyle:NSDateFormatterShortStyle]; [formattersetDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSString*DateTime = [formatterstringFromDate:date]; NSLog(@"当前时间:%@",DateTime);

但同时,在技术专家(计算机工程师、专家)大类中,中国岗位需求将增长50%。

接下来,我们定义一个简单的 MyList
,并给它加上切片功能。(PS:仅作演示,不保证其它功能的完备性)。

我们的项目中有个功能是根据昨天到当前时间去查找记录,可是就在圣诞节过后,出现了问题,查找记录查找不到了?最后发现时间区间是:2019-12-26
3:00:00—–2019-12-27
23:15:45,怎么回事呢?只有年份不对,年份应该是2018年啊!代码没有问题啊!找了好久,最后发现时间格式设置不对!
好大的坑!

作为语法最简单的编程语言,Python可以用更少的代码来表达想法。比如,同样是实现“一键整理文档”的功能,Python的代码就明显更加简洁。

输出结果:

key is : 3Python猫key is : slice(None, 2, None)data is : [‘My’,
‘name’]<main.MyList object at 0x0000019CD83A7A90>key is :
hiTraceback (most recent call last):…TypeError: MyList indices must be
integers or slices</pre>

从输出结果来看,自定义的 MyList
既支持按索引查找,也支持切片操作,这正是我们的目的。

3.3、自定义字典实现切片功能

切片是序列类型的特性,所以在上例中,我们不需要写切片的具体实现逻辑。但是,对于其它非序列类型的自定义对象,就得自己实现切片逻辑。以自定义字典为例(PS:仅作演示,不保证其它功能的完备性):

<pre style=”-webkit-tap-highlight-color: transparent; box-sizing:
border-box; font-family: Consolas, Menlo, Courier, monospace; font-size:
16px; white-space: pre-wrap; position: relative; line-height: 1.5;
color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px;
background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232);
font-style: normal; font-variant-ligatures: normal; font-variant-caps:
normal; font-weight: normal; letter-spacing: normal; orphans: 2;
text-align: start; text-indent: 0px; text-transform: none; widows: 2;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
text-decoration-style: initial; text-decoration-color:
initial;”>class MyDict():def init:self.data = {}def
len:return len(self.data)def append(self, item):self.data[len] =
itemdef getitem(self, key):if isinstance:return self.data[key]if
isinstance(key, slice):slicedkeys = list(self.data.keys[key]return {k:
self.data[k] for k in slicedkeys}else:raise TypeErrord =
MyDict()d.appendd.appendd.appendd.append(“Python猫”)printprintprintprint

获取当前时间代码:

举两个简单的例子。

输出结果:

Truepython is a cat.this is the end.</pre>

本节内容较多,简单回顾一下:迭代器是一种特殊的可迭代对象,可用于它遍历与自遍历,但遍历过程是损耗型的,不具备循环复用性,因此,迭代器本身不支持切片操作;通过借助
itertools
模块,我们能实现迭代器切片,将两者的优势相结合,其主要用途在于截取大型迭代器(如无限数列、超大文件等等)的片段,实现精准的处理,从而大大地提升性能与效率。

5、小结

最后总结一下,切片是 Python
的一种高级特性,常用于截取序列类型的元素,但并不局限于此,本文主要介绍了它的基础用法、高级用法、自定义对象切片、以及迭代器切片等使用内容。除此之外,切片还有更广阔多样的使用场景,例如
Numpy
的多维切片、内存视图切片、异步迭代器切片等等,都值得我们去探索一番。

▲报告显示,在技术专家大类中,

<pre style=”-webkit-tap-highlight-color: transparent; box-sizing:
border-box; font-family: Consolas, Menlo, Courier, monospace; font-size:
16px; white-space: pre-wrap; position: relative; line-height: 1.5;
color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px;
background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232);
font-style: normal; font-variant-ligatures: normal; font-variant-caps:
normal; font-weight: normal; letter-spacing: normal; orphans: 2;
text-align: start; text-indent: 0px; text-transform: none; widows: 2;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
text-decoration-style: initial; text-decoration-color: initial;”>li =
[1, 2, 3, 4]

图片 2那些年薪50万的python年轻人,都有哪些厉害的技能?图片 3那些年薪50万的python年轻人,都有哪些厉害的技能?

li[:0] = [0] # [0, 1, 2, 3, 4]

图片 4那些年薪50万的python年轻人,都有哪些厉害的技能?

if:print(“not empty”)else:print

正如麦肯锡报告所说,单一的技能早已经不够用了,我们只能提升工作技能来应对时代的变化。

3、自定义对象实现切片功能

03

del li[2:3] # [7, 8, 6, 7]</pre>

每一个设计师都经历过被“logo放大再缩小”、“五彩斑斓的黑”支配的恐惧,一张海报经常需要修改数十次。但阿里去年发布了一款名叫“鲁班”的人工智能设计师,平均每秒能做8000张海报,在在双十一期间就完成了四亿张设计图。

图片 5Python切片高级特性完全解读

▲各类高端岗位的招聘要求

牢牢记住公式[i : i+n : m],当出现缺省值时,通过想象把公式补全;

图片 6那些年薪50万的python年轻人,都有哪些厉害的技能?

3.1、魔术方法:getitem()

据《中国ICT人才生态白皮书》研究分析,到2018年底,我国人工智能人才缺口将突破100万,到2020年,这一数字将攀升到226万。

官方文档释义:Called to implement evaluation of self[key]. For
sequence types, the accepted keys should be integers and slice objects.
Note that the special interpretation of negative indexes (if the class
wishes to emulate a sequence type) is up to the getitem() method. If
key is of an inappropriate type, TypeError may be raised; if of a value
outside the set of indexes for the sequence (after any special
interpretation of negative values), IndexError should be raised. For
mapping types, if key is missing (not in the container), KeyError should
be raised.

不仅因为AI人才的极度紧缺,也因为技术的无可取代,更因为编程可以将我们从重复的工作中解放出来,去完成更多更有创造性、挑战性的工作。爬数据、分析数据、做统计、做报告……这些我们每天都在做的重复性的工作,你都可以交给程序搞定。

<pre style=”-webkit-tap-highlight-color: transparent; box-sizing:
border-box; font-family: Consolas, Menlo, Courier, monospace; font-size:
16px; white-space: pre-wrap; position: relative; line-height: 1.5;
color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px;
background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232);
font-style: normal; font-variant-ligatures: normal; font-variant-caps:
normal; font-weight: normal; letter-spacing: normal; orphans: 2;
text-align: start; text-indent: 0px; text-transform: none; widows: 2;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
text-decoration-style: initial; text-decoration-color: initial;”>li =
[1, 2, 3, 4, 5, 6]li[::2] = [‘a’,’b’,’c’] # [‘a’, 2, ‘b’, 4,
‘c’, 6]li[::2] = [0]*3 # [0, 2, 0, 4, 0, 6]li[::2] = [‘w’]
# 报错,attempt to assign sequence of size 1 to extended slice of size
3del li[::2] # [2, 4, 6]</pre>

02

前两节内容都是基于原生的序列类型(如字符串、列表、元组……),那么,我们是否可以定义自己的序列类型并让它支持切片语法呢?更进一步,我们是否可以自定义其它对象并让它支持切片呢?

感慨这世界变化太快?其实,在你的视线范围之外,还有更多行业正在受到人工智能的冲击。设计、编辑、作业批改员、快递小哥、司机……

列表是 Python
中极为基础且重要的一种数据结构,也是最能发挥切片的用处的一种数据结构,所以在前两节,我将以列表为例介绍切片的一些常见用法。

在麦肯锡全球研究院(McKinsey Global
Institute)去年冬天发布的一份就业报告中显示,随着科技的进步,至2030年,全球将有7500万至3.75亿人口重新就业并学习新的技能。从数量上看,中国将面临最大规模的就业变迁,预计将有1200万至1.02亿中国人需重新就业。

<pre style=”-webkit-tap-highlight-color: transparent; box-sizing:
border-box; font-family: Consolas, Menlo, Courier, monospace; font-size:
16px; white-space: pre-wrap; position: relative; line-height: 1.5;
color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px;
background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232);
font-style: normal; font-variant-ligatures: normal; font-variant-caps:
normal; font-weight: normal; letter-spacing: normal; orphans: 2;
text-align: start; text-indent: 0px; text-transform: none; widows: 2;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
text-decoration-style: initial; text-decoration-color: initial;”>li =
[1, 2, 3, 4]

发现了吗?我们身边其实已经充满了人工智能的身影,只是我们不知道,或者没有留意罢了。

切片既可以作为独立对象被“取出”原序列,也可以留在原序列,作为一种占位符使用。

发表评论

电子邮件地址不会被公开。 必填项已用*标注