Python 3.7.1 学习

易混淆点总结

1. / 和//和%的区别

  • 除法(/)永远返回一个浮点数
  • 取整除法(//)
  • 只要余数(%)
    举例:
    图片.png

2. 用python计算n ** b的值,如 5 ** 2 = 5 * 5 = 25

图片.png

3. 对浮点数有完整的支持

在整数和浮点数的混合计算中,整数会被转换为浮点数计算:


图片.png

4. 分割字符串

字符串也可以被截取(检索)。类似于C,字符串的第一个字符索引为0.Python没有单独的字符类型;一个字符就是一个简单的长度为1的字符串。
  举例:

图片.png

注意:
  * 字符串的索引也可以是负数,若为负数则从右边开始计算
  * -0实际上就是0,所以-0不会导致从右边开始计算

5. 字符串取子串

索引用于获得单个字符串,切片让你获得一个子字符串
  举例:

图片.png

注意:
   * 字符串切片包含起始的字符,不包含末尾的字符。这使得 s[:i] + s[i:]永远等于s

6. 格式化字符串

1)Python-3.7.1相对于Python-3.6新增的 【Formatted string literals】

字符串文字 功能 描述
!s str() 在结果中调用str()函数
!r repr() 在结果中调用repr()函数
!a ascii() 在结果中调用ascii()函数
ord('\n') 获取'\n'的ASCII值
  1. f格式化字符串示例,如图【f格式化字符串示例】所示


    图片.png
  1. 注意事项
  • 替换字段中的字符不得与外部格式化字符串文字中使用的引号冲突,如图【替换字段中的符号】所示:


    图片.png
  • f格式表达式中不允许出现反斜杠,否则会报错,如图【反斜杠报错】所示:


    图片.png
  • 通过创建临时变量实现字符串中包含反斜杠,如图【创建临时变量包含反斜杠】所示:


    图片.png

7. For语句

注意:
在迭代过程中修改迭代序列不安全,推荐的做法是为:
如果你想要修改你迭代的序列(例如,复制选择项),你可以迭代它的复本。使用切割标识就可以很方便的做到这一点,如下代码所示:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

if __name__ == "__main__":
    words = ["red", "yellow", "green", "black", "orange"]
    for elem in words[:]:  #循环遍历整个列表的切片副本
        if len(elem) > 5:
            words.insert(0, elem)

    print(words)

结果:

图片.png

8. 特殊语句------循环中的else子句

与循环一起使用时,else 子句与 try 语句的 else 子句比与 if 语句的具有更多的共同点:try 语句的 else 子句在未出现异常时运行,循环的 else 子句在未出现 break 时运行

#!/usr/bin/env python
# -*- coding: utf-8 -*-
if __name__ == "__main__":
    for n in range(2, 10):
        for x in range(2, n):
            if n % x == 0:
                print(n, 'equals', x, '*', n//x)
                break
        else:  #注意:此else语句是属于for循环之中,不是if语句的
            # 循环没有找到一个因素,则当前n为素数
            print(n, 'is a prime number')

结果:
  

图片.png

9. 参数列表分拆

当你要传递的参数已经是一个列表,但要调用的函数却接受分开一个个的参数值。这时候你要把已有的列表拆开来。例如内建函数 range() 需要要独立的 start,stop 参数。你可以在调用函数时加一个 * 操作符来自动把参数列表拆开,如图【用*分拆list】所示:

  
图片.png

以同样的方式,可以使用 ** 操作符分拆关键字参数为字典,如下代码所示:

  #!/usr/bin/env python
# -*- coding: utf-8 -*-

if __name__ == "__main__":
    def parrot(voltage, state='a stiff', action='voom'):
        print("--This parrot wouldn't", action, end=' ')
        print("if you put", voltage, "volts through it.", end=' ')
        print("E's", state, "!")

    d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"}
    parrot(**d)

输出结果,如图【输出结果】所示:

  
图片.png

10. 关于列表的常见方法(未完全列出)

1) list.remove(x)
  删除列表中值为 x 的第一个元素。如果没有这样的元素,就会返回一个错误
  2) list.pop([i])
  从列表的指定位置删除元素,并将其返回。如果没有指定索引,a.pop() 返回最后一个元素。元素随即从列表中被删除(方法中 i 两边的方括号表示这个参数是可选的,而不是要求你输入一对方括号,你会经常在Python 库参考手册中遇到这样的标记)
  3) list.clear()
  从列表中删除所有元素。相当于 del a[:]
  4) list.index(x)
  返回列表中第一个值为 x 的元素的索引。如果没有匹配的元素就会返回一个错误。
  5) list.count(x)
  返回 x 在列表中出现的次数
  6) list.copy()
  返回列表的一个浅拷贝。等同于 a[:]

11. 列表推导式

列表推导式由包含一个表达式的括号组成,表达式后面跟随一个 for 子句,之后可以有零或多个 for 或 if 子句。结果是一个列表,由表达式依据其后面的 for 和 if 子句上下文计算而来的结果构成
  例如,如下的列表推导式结合两个列表的元素,如果元素之间不相等的话,就把俩元素按(a,b)的形式存入list中:

  
图片.png

等同于:

  
图片.png

12. zip()函数

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
  注:zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中为了减少内存,zip() 返回的是一个对象。如需展示列表,需手动 list() 转换。

  
图片.png
图片.png

13. 集合

集合是一个无序不重复元素的集。基本功能包括关系测试和消除重复元素。集合对象还支持 union(联合),intersection(交),difference(差)和 sysmmetric difference(对称差集)等数学运算。
  创建集合:大括号或 set() 函数可以用来创建集合。
  注:想要创建空集合,必须使用set()而不是{}。后者用于创建空字典。
  示例:

  
图片.png

集合的推导式语法:

  
图片.png

14. 字典

python 3.7.1 和 python 3.6.3 之间的不同处
  需求: 返回一个字典中所有关键字组成的无序列表
  在python 3.6.3中采用的方法是:对一个字典执行 list(d.keys()),如下截屏所示:
  

图片.png

在python 3.7.1中采用的方法是: 对一个字典执行 list(d)如下截屏所示:
  注:python 3.7.1 兼容python 3.6.3的方法(即用python 3.6.3的方法,在python 3.7.1中不会报错)

  
图片.png

需求: 返回一个字典中所有关键字组成的列表,并对此列表排序
  在python 3.6.3中采用的方法是:对一个字典执行 sorted(d.keys()) ,如下截屏所示:
  

图片.png

在python 3.7.1中采用的方法是: 对一个字典执行 list(d)如下截屏所示:
  注:python 3.7.1 兼容python 3.6.3的方法(即用python 3.6.3的方法,在python 3.7.1中不会报错)

  
图片.png

字典中的小技巧:
  1) dict() 构造函数可以直接从 key-value 对中创建字典
  

图片.png

2) 字典推导式可以从任意的键值表达式中创建字典

  
图片.png

3) 如果关键字都是简单的字符串,有时通过关键字参数指定 key-value 对更为方便

>>> dict(sape=4139, guido=4127, jack=4098)
{'sape': 4139, 'guido': 4127, 'jack': 4098}
>>> 

15. 循环技巧

1) 在字典中循环时,关键字和对应的值可以使用 items() 方法同时解读出来:

>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
>>> for k, v in knights.items():
...     print(k, v)
... 
gallahad the pure
robin the brave
>>> 

2) 在列表循环时,索引位置和对应值可以使用 enumerate() 函数同时得到:

>>> for i, v in enumerate(['tic', 'tac', 'toe']):
...     print(i, v)
... 
0 tic
1 tac
2 toe
>>> 

3) 同时循环两个或更多的列表,可以使用zip()整体打包:

>>> questions = ['name', 'quest', 'favorite color']
>>> answers = ['lancelot', 'the holy grail', 'blue']
>>> for q, a in zip(questions, answers):
...     print('What is your {0}?  It is {1}.'.format(q, a))
... 
What is your name?  It is lancelot.
What is your quest?  It is the holy grail.
What is your favorite color?  It is blue.
>>> 

16. 深入条件控制

比较操作符可以传递。例如a < b == c审核是否a小于b并且b等于c

>>> a,b,c = 1,2,2
>>> if a < b == c :
...     print(True)
... else:
...     print(False)
... 
True
>>> 

17. 性能度量

例如,使用元组封装和拆封来交换元素看起来要比使用传统的方法要诱人的多。timeit 证明了后者更快一些:

>>> from timeit import Timer
>>> Timer('t=a;a=b;b=t','a=1;b=2').timeit()
0.021459163981489837
>>> Timer('a,b=b,a','a=1;b=2').timeit()
0.01870661400607787
>>> 

相对于 timeit 的细粒度,profile 和 pstats 模块提供了针对更大代码块的时间度量工具。
  
参考文档:
http://www.pythondoc.com/pythontutorial3/datastructures.html
https://docs.python.org/3/tutorial/datastructures.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353