前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

Python爬虫、数据分析、网站开发等案例教程视频免费在线观看

https://space.bilibili.com/523606542

和其他编程语言相比,什么才是Python独一无二的特色呢?很多程序员会说,缩进。的确,缩进是Python语言的标志性特点,但这只是外在的、形式上的。从语言特性层面讲,Python的特点是什么呢?我尝试着在知乎上搜索了一下,最具代表性的答案分别是语法简洁、简单易学、代码高效、功能强大等四项。仔细品味这四项,我还是觉得,这是Python语言表现出来的使用效果或用户感受,仍然不是语言特性层面的特色。

换个说法,究竟是Python的哪些语言特性使得人们普遍认为Python具有语法简洁、简单易学、代码高效、功能强大的特点呢?我个人认为,这要归功于列表(list)、字典(dict)、元组(tuple)和集合(set)这“四大金刚”。尽管整型(int)、浮点型(float)和字符串(str)也很重要,但这三种对象相对于其他编程语言来说,差异并不像“四大金刚”那样明显。可以毫不夸张地说,列表、字典、元组和集合代表了Python语言的核心和基础,同时也是Python的精髓所在。学会使用列表、字典、元组和集合,就意味着掌握了Python这门编程语言。

如果认可这个观点,那么,Python的精髓就从列表、字典、元组和集合等“四大金刚”,演变成由方括号、花括号和圆括号组成的“括号族”。

1. 方括号

方括号几乎是所有编程语言的第一符号。这里的第一,并不是指使用频率,而是指这个符号展现出的编程语言的内涵和创造力。事实上,就符号的使用频率而言,方括号也可能排在首位——只是我的直觉,并没有统计数据支持。

1.1 创建列表

对于初学者来说,创建列表最常用的方法就是用一对方括号。

>>> a = []

>>> a

[]

>>> b = [3.14, False, 'x', None]

>>> b

[3.14, False, 'x', None]

即便是老鸟,也会大量使用方括号创建列表,尤其是使用推导式创建列表的情况下。

>>> c = [i**2 for i in range(5)]

>>> c

[0, 1, 4, 9, 16]

但我一直觉得,方括号就像口语或俚语,太过随便。我更喜欢使用严谨的list()来创建列表。使用list()创建列表,是list类的实例化的标准方法,可以体会list类的构造函数如何适应不同类型的参数。

>>> a = list()

>>> a

[]

>>> b = list((3.14

, False, 'x', None))

>>> b

[3.14, False, 'x', None]

>>> c = list({1,2,3})

>>> c

[1, 2, 3]

>>> d = list({'x':1,'y':2,'z':3})

>>> d

['x', 'y', 'z']

>>> e = list(range(5))

>>> e

[0, 1, 2, 3, 4]

>>> f = list('*'*i for i in range(5))

>>> f

['', '*', '**', '***', '****']

1.2 列表的索引

方括号可以创建列表,但方括号并不等同于列表,因为方括号还用来索引。

>>> [3.14, False, 'x', None][2]

'x'

>>> [3.14, False, 'x', None][-2]

'x'

>>> [3.14, False, 'x', None][1:]

[False, 'x', None]

>>> [3.14, False, 'x', None][:-1]

[3.14, False, 'x']

>>> [3.14, False, 'x', None][::2]

[3.14, 'x']

>>> [3.14, False, 'x', None][::-1]

[None, 'x', False, 3.14]

列表的索引非常灵活,尤其是引入了负数索引,用-1表示最后一个元素或逆序,实属喜大普奔。上面的操作,属于常用索引方式,如果能读懂下面的代码,说明你已经具备了足够深的功力。

>>> a = [3.14, False, 'x', None]

>>> a[2:2] = [1,2,3]

>>> a

[3.14, False, 1, 2, 3, 'x', None]

1.3 列表的方法

对于列表对象的方法如果能信手拈来,那就是Python高手了。

>>> a = [3.14, False, 'x', None]

>>> a.index('x')

2

>>> a.append([1,2,3])

>>> a

[3.14, False, 'x', None, [1, 2, 3]]

>>> a[-1].insert(1, 'ok')

>>> a

[3.14, False, 'x', None, [1, 'ok', 2, 3]]

>>> a.remove(False)

>>> a

[3.14, 'x', None, [1, 'ok', 2, 3]]

>>> a.pop(1)

'x'

>>> a

[3.14, None, [1, 'ok', 2, 3]]

>>> a.pop()

[1, 'ok', 2, 3]

>>> a

[3.14, None]

2. 花括号

花括号代表字典对象,大多数初学者都这样认为。然而,这是错误的,至少是片面的。下面的代码中,a和b都是用花括号创造出来的对象,却一个是字典,一个是集合。

>>> a = {}

>>> a

{}

>>> b = {'x','y','z'}

>>> b

{'y', 'z', 'x'}

>>> type(a)

>>> type(b)

原来,Python用花括号表示字典和集合两种对象:花括号内是空的,或者是键值对的,表示字典;花括号内是无重复元素的,表示集合。为了不引起误会,我习惯用dict()来生成字典,用set()来生成集合。

>>> dict()

{}

>>> dict({'x':1, 'y':2, 'z':3})

{'x': 1, 'y': 2, 'z': 3}

>>> dict((('x',1), ('y',2), ('z',3)))

{'x': 1, 'y': 2, 'z': 3}

>>> dict.fromkeys('xyz')

{'x': None, 'y': None, 'z': None}

>>> dict.fromkeys('abc', 0)

{'a': 0, 'b': 0, 'c': 0}

>>> set((3,4,5))

{3, 4, 5}

>>> set({'x':1, 'y':2, 'z':3})

{'y', 'z', 'x'}

>>> set([3,3,4,4,5,5])

{3, 4, 5}

编码实践中,虽然在某些情况下集合是无可替代的,但集合的使用频率是“四大金刚”中最低的,我们这里不展开讨论,只说说字典的使用技巧。

2.1 判断一个键是否存在于字典中

Py2时代,dict对象曾经有has_key()的方法,用来判断是否包含某个键。py3舍弃了这个方法,判断一个键是否存在于字典中,只能使用in这样的方法了。

>>> a = dict({'x':1, 'y':2, 'z':3})

>>> 'x' in a

True

>>> 'v' in a

False

2.2 向字典中添加一个新键或更新键值

很多人喜欢用对字典的一个键赋值的方法,实现向字典中添加一个新键或更新键值。

>>> a = dict()

>>> a['name'] = 'xufive'

>>> a

{'name': 'xufive'}

我不推荐这样的方式,使用update()才更有仪式感,还可以一次添加或修改多个键。

>>> a = dict()

>>> a.update({'name':'xufive', 'gender':'男'})

>>> a

{'name': 'xufive', 'gender': '男'}

2.3 从字典中获取一个键值

a['age']是最常用的方式,但是也还会遇到键不存在的异常。下面的方法值得推荐。

>>> a.get('age', 18)

18

2.4 获取字典的全部键、全部值、全部键值对

dict类提供了keys()、values()和items()等三个方法分别返回字典的全部键、全部值和全部键值对。需要注意的是,返回结果并非列表,而是迭代器。如果你需要列表形式的返回结果,请使用list()转换。

>>> a = dict()

>>> a.update({'name':'xufive', 'gender':'男'})

>>> list(a.keys())

['name', 'gender']

>>> list(a.values())

['xufive', '男']

>>> list(a.items())

[('name', 'xufive'), ('gender', '男')]

2.5 遍历字典

遍历字典的时候,很多同学或写成遍历字典的keys()。其实,不需要这么麻烦,可以像下面这样直接遍历。

>>> a = dict([('name', 'xufive'), ('gender', '男')])

>>> for

key in a:

print(key, a[key])

name xufive

gender 男

3. 圆括号

圆括号代表元组对象,这么说应该没有问题吧?的确,听起来没有问题,但在元组的使用上,我相信每个初学者都会跌进同一个深坑至少一次。

3.1 必入之浅坑

元组不用于列表的最显著的特点,就是无法更新元素的值。忘记或者忽略这一点,就会入坑。

>>> a = (3, 4)

>>> a[0] = 5

Traceback (most recent call last):

File "", line 1, in

a[0] = 5

TypeError: 'tuple' object does not support item assignment

3.2 必入之深坑

使用了多年Python之后,我曾经写出的最糟糕的bug,就是下面这一段代码。

>>> import threading

>>> def do_something(name):

print('My name is %s.'%name)

>>> th = threading.Thread(target=do_something, args=('xufive'))

>>> th.start()

Exception in thread Thread-1:

Traceback (most recent call last):

File "C:\Users\xufive\AppData\Local\Programs\Python\Python37\lib\threading.py", line 926, in _bootstrap_inner

self.run()

File "C:\Users\xufive\AppData\Local\Programs\Python\Python37\lib\threading.py", line 870, in run

self._target(*self._args, **self._kwargs)

TypeError: do_something() takes 1 positional argument but 6 were given

我分明只提供了1个参数,却提示说给出了6个参数,为什么呢?原来,元组初始化时,如果只有单个参数,则必须在单个参数之后增加一个逗号(,),否则,初始化结果仅返回原参数。

>>> a = (5)

>>> a

5

>>> type(a)

'int'>

>>> b = ('xyz')

>>> b

'xyz'

>>> type(b)

>>> a, b = (5,), ('xyz',)

>>> a, b

((5,), ('xyz',))

>>> type(a), type(b)

('tuple'>, 'tuple'>)

3.3 单星号解包元组

格式化输出字符串时,C语言风格是我的最爱。当有多个%需要匹配时,下面也许是最自然而然的写法。

>>> args = (95,99,100)

>>> '%s:语文%d分,数学%d分,英语%d分'%('天元浪子', args[0], args[1], args[2])

'天元浪子:语文95分,数学99分,英语100分'

正确固然正确,但不够精彩。满分写法应该是这样的。

>>> args = (95,99,100)

>>> '%s:语文%d分,数学%d分,英语%d分'%('天元浪子', *args)

'天元浪子:语文95分,数学99分,英语100分'

3.4 为什么要使用元组?

既然元组的元素不可改变,那为什么还要使用元组呢?使用列表代替元组不是更方便吗?诚然,在多数情况下,可以使用列表代替元组,但下面的例子却可以证明,列表无法代替元组。

>>> s = {1,'x',(3,4,5)}

>>> s

{1, (3, 4, 5), 'x'}

>>> s = {1,'x',[3,4,5]}

Traceback (most recent call last):

File "", line 1, in

s = {1,'x',[3,4,5]}

TypeError: unhashable type: 'list'

我们可以将元组加到集合中,但列表不行,因为列表是不可哈希(unhashable)的。理解这一点并不困难:列表元素可以被动态改变,所以没有一个固定不变的哈希值——这与集合要求的元素唯一性冲突;而元组的元素被禁止更新,其哈希值在整个生命周期都不会变化,因此可以成为集合的元素。

显然,元组和列表有着完全不同的存储方式。因为不用考虑更新问题,元组的速度性能要远优于列表。优先使用元组,应该成为Python程序员遵循的一条基本原则。

作者:天元浪子

来源:Python作业辅导员

python的精髓_你知道Python的精髓是什么吗?是方括号、花括号和圆括号相关推荐

  1. python中花括号_震惊Python的精髓居然是方括号花括号和圆括号

    https://m.toutiaocdn.com/i6862197987209118219/?app=news_article&timestamp=1597845881&use_new ...

  2. Python精髓之括号家族:方括号、花括号和圆括号,你真的会用吗?

    Python独一无二的特色除了缩进还有哪些特色呢?大多数的回答一定是 语法简洁.简单易学.代码高效.功能强大四项.那究竟是Python的哪些语言特性使得人们普遍认为Python具有这些特点呢?其实很大 ...

  3. 用了十几年才想明白:Python的精髓居然是方括号、花括号和圆括号!

    文章目录 1. 方括号 1.1 创建列表 1.2 列表的索引 1.3 列表的方法 2. 花括号 2.1 判断一个键是否存在于字典中 2.2 向字典中添加一个新键或更新键值 2.3 从字典中获取一个键值 ...

  4. Python方括号、花括号和圆括号的用法总结

    参考资料: Python精髓之括号家族:方括号.花括号和圆括号的用法总结 1. 方括号 方括号几乎是所有编程语言的第一符号.这里的第一,并不是指使用频率,而是指这个符号展现出的编程语言的内涵和创造力. ...

  5. python len函数_知识清单Python必备的69个函数,你掌握了吗?

    本文纲要 Python 作为一门高级编程语言,为我们提供了许多方便易用的内置函数,节省了不少开发应用的时间.目前,Python 3.7 共有 69 个内置函数,一些是我们耳熟能详的函数,另一些却不是很 ...

  6. python优化网站_[练习] 用PYTHON来优化网站中的图片

    我到公司以来,第一次加班,哇,加一晚上加一上午,现在还没下班的迹象,555,困. 对于网站中的一些关键的页面,多重缓存.静态化.程序代码优化--之外,为了提高用户打开页面的速度,图片是必须要优化的. ...

  7. python递归函数例题_递归案例python

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 而对应的中文翻译 "递归" 却表达了两个意思:"递 ...

  8. 网易图灵学院python公开课_图灵学院 Python全系列教程全栈工程师 python视频教程下载...

    大家怎么说? 老师很好,我认为,若想学好python,应该多练.多想.多看.学习资料不能仅限于老师给定的这些内容,这些毕竟是入门资料 老师讲的真不错,对于我们这种小白来说 也比较容易懂,虽然有些时候自 ...

  9. python列表拆包_详解python 拆包可迭代数据如tuple, list

    详解python 拆包可迭代数据如tuple, list 拆包是指将一个结构中的数据拆分为多个单独变量中. 以元组为例: >>> a = ('windows', 10, 25.1, ...

  10. load python txt文件_详解Python中numpy.loadtxt()读取txt文件

    为了方便使用和记忆,有时候我们会把 numpy.loadtxt() 缩写成np.loadtxt() ,本篇文章主要讲解用它来读取txt文件. 读取txt文件我们通常使用 numpy 中的 loadtx ...

最新文章

  1. Codeforces Round #476 (Div. 2) A. Paper Airplanes
  2. ESP32 OTA升级框架
  3. Mybatis自学日志03(LOG4J,注解)
  4. (30)FPGA原语设计(单端时钟转差分时钟)
  5. 关于windows server与SQL server用户数的解释 (转)
  6. VB.net小技巧——VB中调用matlab
  7. 2021年1月29日 B站学习资料汇总
  8. 计算机打印中 进纸盘2,纸盘纸张设置
  9. 什么是MRAM(不挥发性磁性随机存储器)
  10. python自动输入饥荒控制台代码
  11. apache基金会开源项目简介
  12. 属于计算机与网络技术在医学中应用的是,计算机网络技术在医学论文写作与投稿中的应用...
  13. IOS点击事件延迟300ms踩坑
  14. 大法将致:将Windows Server 2016打造成个人办公系统,WIN2016打造成超级WIN10,WIN2016优化设置
  15. jdk1.8新特性:stream流 报错:stream has already been operated upon or closed
  16. URL伪静态。SEO中理解伪静态
  17. ARDUINO传感器专题介绍(2)
  18. 隆云通露点温度传感器
  19. commons-email邮件工具类的基本使用
  20. 数据结构 实验六 图基本操作的编程实现

热门文章

  1. 5.29 狡猾的商人(把后天的写了,老师不会打我吧)
  2. 20155202 《Java程序设计》实验二(面向对象程序设计)实验报告
  3. Int.Parse()、Convert.toInt32()和(int)区别
  4. 【事件驱动】【数码管识别】一(数码管检测(矩形检测函数解读))
  5. 基于VS2015的C#的GDAl环境配置
  6. python的标准库——turtle
  7. JS学习总结(12)——Math对象/时间对象
  8. 如何使用WindowsPerformanceToolKit对程序进行分析
  9. 和opengl的关系_从零开始的图形学学习(零):一切的开始 —— 自建OpenGL开发框架...
  10. Flutter实战之Image和FadeInImage