Python编程语言的35个与众不同之处(语言特征和使用技巧),python编程语言
分类:计算机网络

Python编制程序语言的32个特别之处(语言特色和应用技能),python编制程序语言

一、Python介绍

  从本人起头上学Python时笔者就决定维护三个不经常使用的“诀要”列表。无论曾几何时当自身见到后生可畏段让自己觉着“酷,那样也行!”的代码时(在三个例证中、在StackOverflow、在开源码软件中,等等),小编会尝试它直到知道它,然后把它增多到列表中。这篇小说是清理过列表的黄金时代有个别。如若您是一个有经验的Python技士,就算你可能早已知晓某个,但您还是可以开采一些您不理解的。借使您是叁个正在读书Python的C、C++或Java技术员,可能刚最早读书编制程序,那么您会像作者同一开采它们中的非常多非常有效。

每个秘籍或语言特色只可以通超过实际例来申明,无需过多解释。固然作者已尽力使例子清晰,但它们中的一些仍会看起来有个别复杂,那有赖于你的听得多了自然能详细说出来程度。所以假若看过例子后还不晓得的话,标题能够提供丰盛的新闻令你通过谷歌获取详细的剧情。

二、Python的言语特色

列表按难度排序,常用的语言特征和工夫放在眼下。

1. 分拆

复制代码 代码如下:

>>> a, b, c = 1, 2, 3
>>> a, b, c
(1, 2, 3)
>>> a, b, c = [1, 2, 3]
>>> a, b, c
(1, 2, 3)
>>> a, b, c = (2 * i + 1 for i in range(3))
>>> a, b, c
(1, 3, 5)
>>> a, (b, c), d = [1, (2, 3), 4]
>>> a
1
>>> b
2
>>> c
3
>>> d
4

2.置换变量分拆

复制代码 代码如下:

>>> a, b = 1, 2
>>> a, b = b, a
>>> a, b
(2, 1)

3.扩丰盛拆 (Python 3下适用卡塔尔

复制代码 代码如下:

>>> a, *b, c = [1, 2, 3, 4, 5]
>>> a
1
>>> b
[2, 3, 4]
>>> c
5

4.负索引

复制代码 代码如下:

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a[-1]
10
>>> a[-3]
8

5.列表切成块 (a[start:end])

复制代码 代码如下:

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a[2:8]
[2, 3, 4, 5, 6, 7]

6.采纳负索引的列表切成条

复制代码 代码如下:

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a[-4:-2]
[7, 8]

7.带步进值的列表切成片 (a[start:end:step])

复制代码 代码如下:

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a[::2]
[0, 2, 4, 6, 8, 10]
>>> a[::3]
[0, 3, 6, 9]
>>> a[2:8:2]
[2, 4, 6]

8.负步进值得列表切成片

复制代码 代码如下:

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a[::-1]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> a[::-2]
[10, 8, 6, 4, 2, 0]

9.列表切成条赋值

复制代码 代码如下:

>>> a = [1, 2, 3, 4, 5]
>>> a[2:3] = [0, 0]
>>> a
[1, 2, 0, 0, 4, 5]
>>> a[1:1] = [8, 9]
>>> a
[1, 8, 9, 2, 0, 0, 4, 5]
>>> a[1:-1] = []
>>> a
[1, 5]

10.命名切成块 (slice(start, end, stepState of Qatar卡塔尔(قطر‎

复制代码 代码如下:

>>> a = [0, 1, 2, 3, 4, 5]
>>> LASTTHREE = slice(-3, None)
>>> LASTTHREE
slice(-3, None, None)
>>> a[LASTTHREE]
[3, 4, 5]

11.zip打包解包列表和倍数

复制代码 代码如下:

>>> a = [1, 2, 3]
>>> b = ['a', 'b', 'c']
>>> z = zip(a, b)
>>> z
[(1, 'a'), (2, 'b'), (3, 'c')]
>>> zip(*z)
[(1, 2, 3), ('a', 'b', 'c')]

12.施用zip合併相邻的列表项

复制代码 代码如下:

>>> a = [1, 2, 3, 4, 5, 6]
>>> zip(*([iter(a)] * 2))
[(1, 2), (3, 4), (5, 6)]
 
>>> group_adjacent = lambda a, k: zip(*([iter(a)] * k))
>>> group_adjacent(a, 3)
[(1, 2, 3), (4, 5, 6)]
>>> group_adjacent(a, 2)
[(1, 2), (3, 4), (5, 6)]
>>> group_adjacent(a, 1)
[(1,), (2,), (3,), (4,), (5,), (6,)]
 
>>> zip(a[::2], a[1::2])
[(1, 2), (3, 4), (5, 6)]
 
>>> zip(a[::3], a[1::3], a[2::3])
[(1, 2, 3), (4, 5, 6)]
 
>>> group_adjacent = lambda a, k: zip(*(a[i::k] for i in range(k)))
>>> group_adjacent(a, 3)
[(1, 2, 3), (4, 5, 6)]
>>> group_adjacent(a, 2)
[(1, 2), (3, 4), (5, 6)]
>>> group_adjacent(a, 1)
[(1,), (2,), (3,), (4,), (5,), (6,)]

13.施用zip和iterators生成滑动窗口 (n -grams卡塔尔

复制代码 代码如下:

>>> from itertools import islice
>>> def n_grams(a, n):
...     z = (islice(a, i, None) for i in range(n))
...     return zip(*z)
...
>>> a = [1, 2, 3, 4, 5, 6]
>>> n_grams(a, 3)
[(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6)]
>>> n_grams(a, 2)
[(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]
>>> n_grams(a, 4)
[(1, 2, 3, 4), (2, 3, 4, 5), (3, 4, 5, 6)]

14.施用zip反转辞典

复制代码 代码如下:

>>> m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
>>> m.items()
[('a', 1), ('c', 3), ('b', 2), ('d', 4)]
>>> zip(m.values(), m.keys())
[(1, 'a'), (3, 'c'), (2, 'b'), (4, 'd')]
>>> mi = dict(zip(m.values(), m.keys()))
>>> mi
{1: 'a', 2: 'b', 3: 'c', 4: 'd'}

15.摊平列表:

复制代码 代码如下:

>>> a = [[1, 2], [3, 4], [5, 6]]
>>> list(itertools.chain.from_iterable(a))
[1, 2, 3, 4, 5, 6]
 
>>> sum(a, [])
[1, 2, 3, 4, 5, 6]
 
>>> [x for l in a for x in l]
[1, 2, 3, 4, 5, 6]
 
>>> a = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
>>> [x for l1 in a for l2 in l1 for x in l2]
[1, 2, 3, 4, 5, 6, 7, 8]
 
>>> a = [1, 2, [3, 4], [[5, 6], [7, 8]]]
>>> flatten = lambda x: [y for l in x for y in flatten(l)] if type(x) is list else [x]
>>> flatten(a)
[1, 2, 3, 4, 5, 6, 7, 8]  

注意: 根据Python的文档,itertools.chain.from_iterable是首选。

16.生成器表明式

复制代码 代码如下:

>>> g = (x ** 2 for x in xrange(10))
>>> next(g)
0
>>> next(g)
1
>>> next(g)
4
>>> next(g)
9
>>> sum(x ** 3 for x in xrange(10))
2025
>>> sum(x ** 3 for x in xrange(10) if x % 3 == 1)
408

17.迭代字典

复制代码 代码如下:

>>> m = {x: x ** 2 for x in range(5)}
>>> m
十博官网网址,{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
 
>>> m = {x: 'A' + str(x) for x in range(10)}
>>> m
{0: 'A0', 1: 'A1', 2: 'A2', 3: 'A3', 4: 'A4', 5: 'A5', 6: 'A6', 7: 'A7', 8: 'A8', 9: 'A9'}

18.经过迭代字典反转辞典

复制代码 代码如下:

>>> m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
>>> m
{'d': 4, 'a': 1, 'b': 2, 'c': 3}
>>> {v: k for k, v in m.items()}
{1: 'a', 2: 'b', 3: 'c', 4: 'd'}

19.命名类别 (collections.namedtuple卡塔尔国

复制代码 代码如下:

>>> Point = collections.namedtuple('Point', ['x', 'y'])
>>> p = Point(x=1.0, y=2.0)
>>> p
Point(x=1.0, y=2.0)
>>> p.x
1.0
>>> p.y
2.0

20.命名列表的接轨:

复制代码 代码如下:

>>> class Point(collections.namedtuple('PointBase', ['x', 'y'])):
...     __slots__ = ()
...     def __add__(self, other):
...             return Point(x=self.x + other.x, y=self.y + other.y)
...
>>> p = Point(x=1.0, y=2.0)
>>> q = Point(x=2.0, y=3.0)
>>> p + q
Point(x=3.0, y=5.0)

21.集结及集结操作

复制代码 代码如下:

>>> A = {1, 2, 3, 3}
>>> A
set([1, 2, 3])
>>> B = {3, 4, 5, 6, 7}
>>> B
set([3, 4, 5, 6, 7])
>>> A | B
set([1, 2, 3, 4, 5, 6, 7])
>>> A & B
set([3])
>>> A - B
set([1, 2])
>>> B - A
set([4, 5, 6, 7])
>>> A ^ B
set([1, 2, 4, 5, 6, 7])
>>> (A ^ B) == ((A - B) | (B - A))
True

22.多种集及其操作 (collections.Counter卡塔尔(قطر‎

复制代码 代码如下:

>>> A = collections.Counter([1, 2, 2])
>>> B = collections.Counter([2, 2, 3])
>>> A
Counter({2: 2, 1: 1})
>>> B
Counter({2: 2, 3: 1})
>>> A | B
Counter({2: 2, 1: 1, 3: 1})
>>> A & B
Counter({2: 2})
>>> A + B
Counter({2: 4, 1: 1, 3: 1})
>>> A - B
Counter({1: 1})
>>> B - A
Counter({3: 1})

23.迭代中最普遍的成分 (collections.Counter卡塔尔(قطر‎

复制代码 代码如下:

>>> A = collections.Counter([1, 1, 2, 2, 3, 3, 3, 3, 4, 5, 6, 7])
>>> A
Counter({3: 4, 1: 2, 2: 2, 4: 1, 5: 1, 6: 1, 7: 1})
>>> A.most_common(1)
[(3, 4)]
>>> A.most_common(3)
[(3, 4), (1, 2), (2, 2)]

24.双端队列 (collections.dequeState of Qatar

复制代码 代码如下:

>>> Q = collections.deque()
>>> Q.append(1)
>>> Q.appendleft(2)
>>> Q.extend([3, 4])
>>> Q.extendleft([5, 6])
>>> Q
deque([6, 5, 2, 1, 3, 4])
>>> Q.pop()
4
>>> Q.popleft()
6
>>> Q
deque([5, 2, 1, 3])
>>> Q.rotate(3)
>>> Q
deque([2, 1, 3, 5])
>>> Q.rotate(-3)
>>> Q
deque([5, 2, 1, 3])

25.有最大尺寸的双端队列 (collections.deque卡塔尔(قطر‎

复制代码 代码如下:

>>> last_three = collections.deque(maxlen=3)
>>> for i in xrange(10):
...     last_three.append(i)
...     print ', '.join(str(x) for x in last_three)
...
0
0, 1
0, 1, 2
1, 2, 3
2, 3, 4
3, 4, 5
4, 5, 6
5, 6, 7
6, 7, 8
7, 8, 9

26.词典排序 (collections.OrderedDict卡塔尔

复制代码 代码如下:

>>> m = dict((str(x), x) for x in range(10))
>>> print ', '.join(m.keys())
1, 0, 3, 2, 5, 4, 7, 6, 9, 8
>>> m = collections.OrderedDict((str(x), x) for x in range(10))
>>> print ', '.join(m.keys())
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
>>> m = collections.OrderedDict((str(x), x) for x in range(10, 0, -1))
>>> print ', '.join(m.keys())
10, 9, 8, 7, 6, 5, 4, 3, 2, 1

27.缺省词典 (collections.defaultdict卡塔尔(قطر‎

复制代码 代码如下:

>>> m = dict()
>>> m['a']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'a'
>>>
>>> m = collections.defaultdict(int)
>>> m['a']
0
>>> m['b']
0
>>> m = collections.defaultdict(str)
>>> m['a']
''
>>> m['b'] += 'a'
>>> m['b']
'a'
>>> m = collections.defaultdict(lambda: '[default value]')
>>> m['a']
'[default value]'
>>> m['b']
'[default value]'

28. 用缺省词典表示简单的树

复制代码 代码如下:

>>> import json
>>> tree = lambda: collections.defaultdict(tree)
>>> root = tree()
>>> root['menu']['id'] = 'file'
>>> root['menu']['value'] = 'File'
>>> root['menu']['menuitems']['new']['value'] = 'New'
>>> root['menu']['menuitems']['new']['onclick'] = 'new();'
>>> root['menu']['menuitems']['open']['value'] = 'Open'
>>> root['menu']['menuitems']['open']['onclick'] = 'open();'
>>> root['menu']['menuitems']['close']['value'] = 'Close'
>>> root['menu']['menuitems']['close']['onclick'] = 'close();'
>>> print json.dumps(root, sort_keys=True, indent=4, separators=(',', ': '))
{
    "menu": {
        "id": "file",
        "menuitems": {
            "close": {
                "onclick": "close();",
                "value": "Close"
            },
            "new": {
                "onclick": "new();",
                "value": "New"
            },
            "open": {
                "onclick": "open();",
                "value": "Open"
            }
        },
        "value": "File"
    }
}  

(到)

**29.映射对象到唯生机勃勃的连串数 (collections.defaultdict卡塔尔国

**

复制代码 代码如下:

>>> import itertools, collections
>>> value_to_numeric_map = collections.defaultdict(itertools.count().next)
>>> value_to_numeric_map['a']
0
>>> value_to_numeric_map['b']
1
>>> value_to_numeric_map['c']
2
>>> value_to_numeric_map['a']
0
>>> value_to_numeric_map['b']
1

30.最大极小元素 (heapq.nlargest和heapq.nsmallest卡塔尔(قطر‎

复制代码 代码如下:

>>> a = [random.randint(0, 100) for __ in xrange(100)]
>>> heapq.nsmallest(5, a)
[3, 3, 5, 6, 8]
>>> heapq.nlargest(5, a)
[100, 100, 99, 98, 98]

31.笛Carl乘积 (itertools.product卡塔尔(قطر‎

复制代码 代码如下:

>>> for p in itertools.product([1, 2, 3], [4, 5]):
(1, 4)
(1, 5)
(2, 4)
(2, 5)
(3, 4)
(3, 5)
>>> for p in itertools.product([0, 1], repeat=4):
...     print ''.join(str(x) for x in p)
...
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111

32.结缘的咬合和置换 (itertools.combinations 和 itertools.combinations_with_replacement)

复制代码 代码如下:

>>> for c in itertools.combinations([1, 2, 3, 4, 5], 3):
...     print ''.join(str(x) for x in c)
...
123
124
125
134
135
145
234
235
245
345
>>> for c in itertools.combinations_with_replacement([1, 2, 3], 2):
...     print ''.join(str(x) for x in c)
...
11
12
13
22
23
33

33.排序 (itertools.permutations)

复制代码 代码如下:

>>> for p in itertools.permutations([1, 2, 3, 4]):
...     print ''.join(str(x) for x in p)
...
1234
1243
1324
1342
1423
1432
2134
2143
2314
2341
2413
2431
3124
3142
3214
3241
3412
3421
4123
4132
4213
4231
4312
4321

34.链接的迭代 (itertools.chainState of Qatar

复制代码 代码如下:

>>> a = [1, 2, 3, 4]
>>> for p in itertools.chain(itertools.combinations(a, 2), itertools.combinations(a, 3)):
...     print p
...
(1, 2)
(1, 3)
(1, 4)
(2, 3)
(2, 4)
(3, 4)
(1, 2, 3)
(1, 2, 4)
(1, 3, 4)
(2, 3, 4)
>>> for subset in itertools.chain.from_iterable(itertools.combinations(a, n) for n in range(len(a) + 1))
...     print subset
...
()
(1,)
(2,)
(3,)
(4,)
(1, 2)
(1, 3)
(1, 4)
(2, 3)
(2, 4)
(3, 4)
(1, 2, 3)
(1, 2, 4)
(1, 3, 4)
(2, 3, 4)
(1, 2, 3, 4)

35.按给定值分组行 (itertools.groupby卡塔尔国

复制代码 代码如下:

>>> from operator import itemgetter
>>> import itertools
>>> with open('contactlenses.csv', 'r') as infile:
...     data = [line.strip().split(',') for line in infile]
...
>>> data = data[1:]
>>> def print_data(rows):
...     print 'n'.join('t'.join('{: <16}'.format(s) for s in row) for row in rows)
...
 
>>> print_data(data)
young               myope                   no                      reduced                 none
young               myope                   no                      normal                  soft
young               myope                   yes                     reduced                 none
young               myope                   yes                     normal                  hard
young               hypermetrope            no                      reduced                 none
young               hypermetrope            no                      normal                  soft
young               hypermetrope            yes                     reduced                 none
young               hypermetrope            yes                     normal                  hard
pre-presbyopic      myope                   no                      reduced                 none
pre-presbyopic      myope                   no                      normal                  soft
pre-presbyopic      myope                   yes                     reduced                 none
pre-presbyopic      myope                   yes                     normal                  hard
pre-presbyopic      hypermetrope            no                      reduced                 none
pre-presbyopic      hypermetrope            no                      normal                  soft
pre-presbyopic      hypermetrope            yes                     reduced                 none
pre-presbyopic      hypermetrope            yes                     normal                  none
presbyopic          myope                   no                      reduced                 none
presbyopic          myope                   no                      normal                  none
presbyopic          myope                   yes                     reduced                 none
presbyopic          myope                   yes                     normal                  hard
presbyopic          hypermetrope            no                      reduced                 none
presbyopic          hypermetrope            no                      normal                  soft
presbyopic          hypermetrope            yes                     reduced                 none
presbyopic          hypermetrope            yes                     normal                  none
 
>>> data.sort(key=itemgetter(-1))
>>> for value, group in itertools.groupby(data, lambda r: r[-1]):
...     print '-----------'
...     print 'Group: ' + value
...     print_data(group)

一、Python介绍

...

Group: hard
young               myope                   yes                     normal                  hard
young               hypermetrope            yes                     normal                  hard
pre-presbyopic      myope                   yes                     normal                  hard
presbyopic          myope                   yes                    

  从本人开端攻读Python时小编就调节维护三个时有时接收的 秘技列表。无论曾几何时当本身来看后生可畏段让自个儿认为 酷,那样也行! 的代码时(在叁个事例中、在StackOverflow、在开源码软件中,等等),笔者会尝试它直到知道它,然后把它增多到列表中。那篇随笔是理清过列表的意气风发某些。若是您是多少个有阅世的Python程序员,固然你大概已经驾驭某些,但你还是能觉察部分你不清楚的。要是你是一个正在学习Python的C、C++或Java程序猿,恐怕刚起头读书编程,那么您会像本人同样开采它们中的超多极低价。

normal                  hard

Group: none
young               myope                   no                      reduced                 none
young               myope                   yes                     reduced                 none
young               hypermetrope            no                      reduced                 none
young               hypermetrope            yes                     reduced                 none
pre-presbyopic      myope                   no                      reduced                 none
pre-presbyopic      myope                   yes                     reduced                 none
pre-presbyopic      hypermetrope            no                      reduced                 none
pre-presbyopic      hypermetrope            yes                     reduced                 none
pre-presbyopic      hypermetrope            yes                     normal                  none
presbyopic          myope                   no                      reduced                 none
presbyopic          myope                   no                      normal                  none
presbyopic          myope                   yes                     reduced                 none
presbyopic          hypermetrope            no                      reduced                 none
presbyopic          hypermetrope            yes                     reduced                 none
presbyopic          hypermetrope            yes                    

每一个诀窍或语言特色只可以通超过实际例来证实,无需过多解释。纵然自己已尽力使例子清晰,但它们中的一些仍会看起来有一点点复杂,那取决你的听得多了自然能详细说出来程度。所以尽管看过例子后还不知情的话,标题能够提供足够的音信令你通过谷歌(Google卡塔尔(قطر‎获取详细的故事情节。

normal                  none

Group: soft
young               myope                   no                      normal                  soft
young               hypermetrope            no                      normal                  soft
pre-presbyopic      myope                   no                      normal                  soft
pre-presbyopic      hypermetrope            no                      normal                  soft
presbyopic          hypermetrope            no                      normal 

二、Python的言语特征

Python是什编程语言

唯恐最先布置 Python 这种语言的人并从未想到几眼前Python 会在工业和调查商讨上获取这么大面积的应用。闻明的自由软件小编Eric 雷Mond在她的文章《如何成为一名红客》中,将Python 列为骇客应当学习的五种编制程序语言之后生可畏,并建议大家从Python 开头读书编制程序。那诚然是三个深深的建议,对于那多少个根本不曾上学过编制程序只怕并非Computer专门的工作的编制程序学习者来说,Python 是最佳的筛选之黄金年代。Python 第二回学习Python,小编只用了不到拾八分钟的大运,站在文具店里把一本教初学编程的人读书Python 的书翻了二次。也是从那个时候起,笔者起来被这种奇妙的言语吸引。 Python 能够用来开荒symbian 上的东西。 易用与进程的康健组合Python 是意气风发种用起来很有利的语言,相当多初学Java 的人都会被 Java 的CLASSPATH 搞得蒙头转向,花上半天的日子才搞驾驭原本是CLASSPATH 搞错了温馨的 Hello World 才无法运营。用Python 就不会有这种难点,只要装上就能够一直用。 Python 是大器晚成种脚本语言,写好了就足以平素运维,省去了编写翻译链接的劳动,对于急需多动手实施的初读书人来讲,约等于少了失误的时机。并且Python 还大概有黄金年代种相互的方式,即使是少年老成段轻易的小程序,连编辑器都可以省了,间接敲进去就会运作。Python 是风流罗曼蒂克种清晰的言语,用缩进来表示程序的嵌套关系可谓是意气风发种创举,把过去软性的编制程序风格进级为硬性的语准则定。再不需求在不一致的风骨间采用、再没有必要为不相同的风骨相持。与 Perl 差异,Python 中绝非各个隐晦的缩写,没有必要去强记种种意料之外的标识的意义。Python 写的前后相继超级轻易懂,那是诸四人的共鸣。Python 是生龙活虎种面向对象的语言,但它的面向对象却不象C++那样强调概念,而是更正视实用。不是为了呈现对定义的完好帮忙而把语言搞得很复杂,而是用最简易的秘诀让编制程序者能够享受到面向对象带给的补益,那多亏 Python 能像 Java、C#这样吸引众多追随者的来由之风姿洒脱。 Python 是意气风发种功能丰盛的语言,它抱有二个强硬的主导类库和多少众多的第三方扩充,使得Python 工程师无需去爱慕Java 的JDK。Python 为程序猿提供了丰盛的基本成效使得大家写程序时多余一切最底部做起。提及那边,大家日常会用风度翩翩种怀恋:脚本语言经常极慢。脚本语言从运转的进程讲的确会慢一些,但 Python 的速度却比大家想象得快超级多。尽管 Python 是意气风发种脚本语言,但实在也足以对它进行编写翻译,就象编写翻译Java 程序同样将Python 程序编写翻译为风度翩翩种非常的ByteCode,在程序运维时,施行的是ByteCode,省去了对前后相继文件的深入分析表明,速度自然升高广大。在用Java 编制程序是,大家崇尚风华正茂种Pure Java 的法子,除了虚构机一切事物都用Java 编写,无论是基本的数据构造仍旧图形分界面,而Pure Java 的SWING,却成为众多Java 应用开荒者的梦魇。Python 崇尚的是实用,它的欧洲经济共同体境遇是用C 来编排的,很六宗旨的效果和扩大的模块都以用 C/C++来编写的,当实行这后生可畏局地代码时,它的进度就是C 的进程。用Python 编写的日常桌面程序,其运营运作速度与用C 写的主次相差无几。除了这么些,通过一些第三方软件包,用Python 编写的源代码还足以以看似JIT 的办法运转,而那足以大大升高Python 代码的运作速度,针对不一样类其余代码,会有2 倍至100 倍不等的进程升高。 Python 是作者见到过的言语中,在易用性和进程上组成......余下全文>>  

列表按难度排序,常用的语言特色和技能放在眼下。

Python 在编制程序语言中是什地位?为什么比超多高级学园不教 Python?

十一分想炮轰一下,所谓「大学学习的中坚安插观念,老师教师黄金年代两张言语就能够,关键自身得去研商,看自身合意什么就去多看多练习多钻研技能够」根本就站不住脚。首先,既然是教课风姿洒脱两门语言,为啥这门语言是C实际不是python?教师如何语言,跟你怎么技术把计算机语言写好跟你要钻探,完全就是一次事。(作者并不否定重申学习要有色金属钻探所究的饱满,小编特别承认在平昔不别的方法的情形下用这种论调来自自己安慰,可是以为钻研的振作振奋最首要,学习怎么东西不重大,并不是一个令人结束酌量的好答案)从境内的微计算机科学教育来看,「计算机语言」(计算机Language)其实历来未有拿到相当高的地点,在咀嚼上就从未有过真的把计算机语言拉到三个较高的等级来看,相反的,恐怕还也可以有轻慢代码,感到语言只是文化的尾巴部分,不是上场馆有得研讨的事物。现身这种景况的缘故小编十分的小清楚,反正本身身边非常多的教员职员和工人其实都是平常跑跑算法就能够了——用自个儿用熟的C来跑,完全够用了。假设您的代码只是用来演示二个小程序的算法,实际上正是三个伪代码到能够编写翻译的代码的变迁,其实确实是未曾多大分别了。用脑筋想怎么老师在教计算机语言?基本都以教数据构造啊、算法啊之类的拉过来客串一下,那个老师再三没有面前遭受纷纭的系统的经验,也不曾对一个有表明力的语言的必要在。而计算机语言的区分,所谓的表达力,高雅,抽象的角度,思维,全体都不是足以发到paper的事物,都是实在供给将语言工具用于接受和虚幻技艺体味到的。老师实际上一无使用一门好的言语的须求,二也比少之甚少做那些研讨的。Computer语言被拆成了无尽门课,从语言、抽象和安顿的角度来调查语言本身,高校应该是未曾这种课程的。以大家高校来讲,程序设计1一贯就不是教程序设计,正是二个充水的C语言仿效带领,程序设计2亦不是教程序设计,正是二个充水的C++语言参谋顺便教你用C++的OO语法来兑现点数据结商谈算法。你确实使用计算机语言是因为你要写数据结构和算法的功课。然后呢?因为要学计组你才须求学点汇编,一些教员职员和工人可能对编制程序语言最大的咀嚼是win32写个贪吃蛇。然后等到您大三了你学「编写翻译原理」的时候是教您哪些落到实处一个编写翻译器(并不是何等安顿一门语言,用言语来构思和架空)。大学既不是专业人才教育,亦非通才教育。高校是大旨本事教育,它独有职分教会大超级多学子在他正式领域中的基本本领。那句话本对的,不过那句模糊的话,实际上却形成了屏弃三个越来越好的选择的假说。大学本来不是专业人才教育,大学是中心力量教育也从不错,可是,使用C一定是左右大旨技能的最佳选拔呢?上边扯的「python远远不够clean」,「Python 的集成性并不如 C 好」也站不住脚。python在大部气象下都比C要clean多了吧。。。大学教育何地会留意你的集成性。我们用 Python 是因为它的能源能够支持广大人解决难点,那一个轮廓作者也承认。不过,python除了类库丰盛,依然有过多好东西的。从语言上看,python远远比C更合乎教学啊。举个例子,python会让您的 1 < a < 2 是对的,不会让您栽入C的所谓的 (1<a)是二个布尔值,然后跟2比较——这种安顿真正是对的吧?人类真的就活该妥协这种设计呢?然后不要讲scanf("%d", &a卡塔尔那几个a前面要加&这种了。你不是在念书程序语言设计,你是在读书怎么躲开C的坑。。。好吧,你说学习C能够掌握底层——你确认要在程序语言设计的课程里面来上学计算机底层真的很有意义并且值得坚宁死不屈?新人固然确实要学Computer语言的话,照旧跟着MIT从python领头吧。不推荐C、不引入C++、不推荐javascr......余下全文>>  

风姿罗曼蒂克、Python介绍 从自家起来读书Python时自身就调节维护二个常常应用的...

1. 分拆

复制代码 代码如下:

>>> a, b, c = 1, 2, 3
>>> a, b, c
(1, 2, 3)
>>> a, b, c = [1, 2, 3]
>>> a, b, c
(1, 2, 3)
>>> a, b, c = (2 * i + 1 for i in range(3))
>>> a, b, c
(1, 3, 5)
>>> a, (b, c), d = [1, (2, 3), 4]
>>> a
1
>>> b
2
>>> c
3
>>> d
4

2.沟通变量分拆

复制代码 代码如下:

>>> a, b = 1, 2
>>> a, b = b, a
>>> a, b
(2, 1)

3.进展分拆 (Python 3下适用卡塔尔(قطر‎

复制代码 代码如下:

>>> a, *b, c = [1, 2, 3, 4, 5]
>>> a
1
>>> b
[2, 3, 4]
>>> c
5

4.负索引

复制代码 代码如下:

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a[-1]
10
>>> a[-3]
8

5.列表切块 (a[start:end])

复制代码 代码如下:

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a[2:8]
[2, 3, 4, 5, 6, 7]

6.选用负索引的列表切成丝

复制代码 代码如下:

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a[-4:-2]
[7, 8]

7.带步进值的列表切丝 (a[start:end:step])

复制代码 代码如下:

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a[::2]
[0, 2, 4, 6, 8, 10]
>>> a[::3]
[0, 3, 6, 9]
>>> a[2:8:2]
[2, 4, 6]

8.负步进值得列表切丝

复制代码 代码如下:

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a[::-1]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> a[::-2]
[10, 8, 6, 4, 2, 0]

9.列表切开赋值

复制代码 代码如下:

>>> a = [1, 2, 3, 4, 5]
>>> a[2:3] = [0, 0]
>>> a
[1, 2, 0, 0, 4, 5]
>>> a[1:1] = [8, 9]
>>> a
[1, 8, 9, 2, 0, 0, 4, 5]
>>> a[1:-1] = []
>>> a
[1, 5]

10.命名切成片 (slice(start, end, step卡塔尔(قطر‎卡塔尔

复制代码 代码如下:

>>> a = [0, 1, 2, 3, 4, 5]
>>> LASTTHREE = slice(-3, None)
>>> LASTTHREE
slice(-3, None, None)
>>> a[LASTTHREE]
[3, 4, 5]

11.zip打包解包列表和倍数

复制代码 代码如下:

>>> a = [1, 2, 3]
>>> b = ['a', 'b', 'c']
>>> z = zip(a, b)
>>> z
[(1, 'a'), (2, 'b'), (3, 'c')]
>>> zip(*z)
[(1, 2, 3), ('a', 'b', 'c')]

12.接受zip合併相邻的列表项

复制代码 代码如下:

>>> a = [1, 2, 3, 4, 5, 6]
>>> zip(*([iter(a)] * 2))
[(1, 2), (3, 4), (5, 6)]

>>> group_adjacent = lambda a, k: zip(*([iter(a)] * k))
>>> group_adjacent(a, 3)
[(1, 2, 3), (4, 5, 6)]
>>> group_adjacent(a, 2)
[(1, 2), (3, 4), (5, 6)]
>>> group_adjacent(a, 1)
[(1,), (2,), (3,), (4,), (5,), (6,)]

>>> zip(a[::2], a[1::2])
[(1, 2), (3, 4), (5, 6)]

>>> zip(a[::3], a[1::3], a[2::3])
[(1, 2, 3), (4, 5, 6)]

>>> group_adjacent = lambda a, k: zip(*(a[i::k] for i in range(k)))
>>> group_adjacent(a, 3)
[(1, 2, 3), (4, 5, 6)]
>>> group_adjacent(a, 2)
[(1, 2), (3, 4), (5, 6)]
>>> group_adjacent(a, 1)
[(1,), (2,), (3,), (4,), (5,), (6,)]

13.行使zip和iterators生成滑动窗口 (n -grams卡塔尔

复制代码 代码如下:

>>> from itertools import islice
>>> def n_grams(a, n):
... z = (islice(a, i, None) for i in range(n))
... return zip(*z)
...
>>> a = [1, 2, 3, 4, 5, 6]
>>> n_grams(a, 3)
[(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6)]
>>> n_grams(a, 2)
[(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]
>>> n_grams(a, 4)
[(1, 2, 3, 4), (2, 3, 4, 5), (3, 4, 5, 6)]

14.运用zip反转字典

复制代码 代码如下:

>>> m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
>>> m.items()
[('a', 1), ('c', 3), ('b', 2), ('d', 4)]
>>> zip(m.values(), m.keys())
[(1, 'a'), (3, 'c'), (2, 'b'), (4, 'd')]
>>> mi = dict(zip(m.values(), m.keys()))
>>> mi
{1: 'a', 2: 'b', 3: 'c', 4: 'd'}

15.摊平列表:

复制代码 代码如下:

>>> a = [[1, 2], [3, 4], [5, 6]]
>>> list(itertools.chain.from_iterable(a))
[1, 2, 3, 4, 5, 6]

>>> sum(a, [])
[1, 2, 3, 4, 5, 6]

>>> [x for l in a for x in l]
[1, 2, 3, 4, 5, 6]

>>> a = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
>>> [x for l1 in a for l2 in l1 for x in l2]
[1, 2, 3, 4, 5, 6, 7, 8]

>>> a = [1, 2, [3, 4], [[5, 6], [7, 8]]]
>>> flatten = lambda x: [y for l in x for y in flatten(l)] if type(x) is list else [x]
>>> flatten(a)
[1, 2, 3, 4, 5, 6, 7, 8]

注意: 根据Python的文档,itertools.chain.from_iterable是首选。

16.生成器表达式

复制代码 代码如下:

>>> g = (x ** 2 for x in xrange(10))
>>> next(g)
0
>>> next(g)
1
>>> next(g)
4
>>> next(g)
9
>>> sum(x ** 3 for x in xrange(10))
2025
>>> sum(x ** 3 for x in xrange(10) if x % 3 == 1)
408

17.迭代词典

复制代码 代码如下:

本文由十博官网网址发布于计算机网络,转载请注明出处:Python编程语言的35个与众不同之处(语言特征和使用技巧),python编程语言

上一篇:也说Javascript对象拷贝及难点 下一篇:python达成跨文件全局变量的章程,
猜你喜欢
热门排行
精彩图文