《Python 可以这样学》

如何学习Python

  • 一定要动手编写和调试书上的代码,踏踏实实把基础掌握好再有针对性地学习自己需要的扩展库,切忌只看不练。
  • 多看,多想,多交流。
  • 理解的越多,需要记忆的就越少。
  • 切不可把全部精力放在 Python 语言本身的学习上,而是要把主要精力放到自己的专业和知识学习上,最终再用 Python 把自己的思想或算法准确地表达出来。

Python 基础

Python 是一种什么样的语言

  • 当较新的 Python 版本推出之后,不要急于赶时髦,看到别人用高版本的 Python 也不用自卑,而是应该在确定自己必须使用的扩展库也推出了与之匹配的新版本之后再一起进行更新。

Python 开发环境

  • 一般来说,建议在运算符两侧和逗号后面加一个空格,在不同功能的代码块之间增加一个空行。
  • 交互模式一般用来实现一些简单的业务逻辑,或者验证某些功能。
  • Python 文件扩展名为.py,GUI 程序可以保存为.pyw
  • 为提高代码运行速度,同时也对 Python 源代码进行保密,可以在命令提示符环境中使用python -OO -m py_compile file.py将 Python 程序file.py伪编译成为.pyc文件。
  • 命令提示符cls清屏。

变量、运算符与表达式

  • 标准库是 Python 默认安装的,但需要导入后才能使用其中的对象。扩展库则需要手动安装,然后导入之后才能使用其中的对象。

  • 不需要事先声明变量名及其类型,并且变量的类型是可以随时发生改变的。

  • Python 字符串对象提供了一个方法isidentifier()可以用来判断指定字符串是否可以作为变量名、函数名、类名等标识符。

  • Python 内置对象

    1. 数字
    2. 字符串
    3. 列表
    4. 字典
    5. 元组
    6. 文件 f = open(file.txt)
    7. 集合 set('abc'),{'a', 'b', 'c'}
    8. 布尔型 True,False
    9. None
    10. 编程单元 函数(def),类(class)
  • 可以通过内置函数help()查看某个函数的使用帮助。

  • 可以导入 sys 模块后使用print(sys.builtin_moudle_names)查看 Python 所有内置模块名称。

  • 可以使用help('moudles')查看本机所有可用模块的名称。

  • Python 常用内置函数

    • 进制转换

      • bin() 二进制
      • oct() 八进制
      • int() 十进制
      • hex() 十六进制
    • Unicode

      • ord() 字符串转为 Unicode
      • chr() Unicode 转为字符串
    • 变量类型转换

      • bool()
      • float()
      • int()
      • str()
    • 计算

      • abs() 返回绝对值或复数的模
      • max()
      • min()
      • sum()
    • 其他

      • help() 查看指定方法的使用帮助

      • dir()
        
  查看对象的所有成员

  - `dir(math)` 查看模块中可用对象
  - `dir('')` 查看字符串类型成员
  - `dir(3+4j)` 查看复数类型成员

- `type(3)` 查看类型

- `isinstance(3, init)` 判断类型

- `import this` Python 之禅
  • Python 运算符

    • + 加法,列表、元组、字符串合并
    • - 减法,集合差集
    • * 乘法,序列重复
    • / 真除法
    • // 整商
    • - 相反数
    • % 余数,字符串格式化
    • **
    • < <= > >= 大小比较,集合的包含关系比较
    • == != 相等、不等比较
    • or and not 或,与,非
    • in not in 成员测试
    • & | ^ 集合的交集、并集、对称差集
    • @ 矩阵相乘
  • print(value, ..., sep='', end='\n', file=sys.stout, flush=False)
    
    • sep 指定数据之间的分隔符,默认为空格。
    • file 参数用于指定输出位置,默认为标准控制台,也可以重定向输出到文件。

模块的安装和使用

  • 常用 pip 命令
    • pip install Package 安装模块
    • pip list 列出已安装的所有模块
    • pip install -upgrade Package 升级模块
    • pip uninstall Package 卸载模块
  • pip 可执行程序在 Python 安装目录的 Scripts 文件夹下。

Python 序列

列表与列表推导式

  • 可以用list()函数将元组、range 对象、字符串、字典、集合或其他类型的可迭代对象类型的数据转换为列表。需要注意的是,把字典转换为列表时默认是将字典的“键”转换为列表,如果想把字典的元素转换为列表,需要使用字典对象的items()方法明确说明。

    >>> list({'a':3, 'b':9, 'c':78})
    ['a', 'b', 'c']
    
    >>> list({'a':3, 'b':9, 'c':78}.items())
    [('a', 3), ('b', 9), ('c', 78)]
    
  • 工厂函数:list()tuple()set()dict()

  • 可以使用del将对象删除,适用于所有的 Python 对象。也可以用del命令删除可变序列中的部分元素。

    >>> a = [1, 2, 3]
    >>> del a[0]
    >>> a
    [2, 3]
    
  • 常用的列表对象方法

    • list.list.append(x) 将元素 x 添加至列表 list 尾部

    • list.extend(L) 将列表 L 中的所有元素添加至列表 list 尾部

    • list.insert() 在列表指定位置插入元素

    • list.remove() 删除在列表中首次出现的元素

    • list.pop(x) 删除并返回下标为 x 的元素,x 默认为-1

    • list.clear() 删除列表中的所有元素

    • list.index(x) 返回列表中第一个值为 x 的元素的下标

    • list.count() 返回指定元素在列表中出现的次数

    • list.reverse() 倒序

    • list.sort(key=None, reverse=False)
      
排序

- `sort()`和`reverse()`是对列表进行原地排序。如果不想丢掉原来的顺序可以用内置函数`sorted()`和 `reversed()`。
  • list.copy() 浅复制

  • 成员测试运算符in也可以测试列表中是否存在某个元素。

  • zip()函数用于将多个列表中元素重新组合为元组并返回包含这些元组的 zip 对象。

    >>> x = list(range(5))
    >>> x
    [0, 1, 2, 3, 4]
    >>> list(zip(x, [0]*5))
    [(0, 0), (1, 0), (2, 0), (3, 0), (4, 0)]
    
  • enumerate()函数返回包含若干下标和值的迭代对象。

    >>> list(enumerate(x))
    [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
    
  • map()可以将一个函数依次作用到一个序列上,并返回一个 map 对象作为结果。

    >>> def add5(v):
    ...     return v+5
    ...
    >>> add5(1)
    6
    >>> list(map(add5, range(5)))
    [5, 6, 7, 8, 9]
    >>>
    
  • filter()将一个单参数函数作用到一个序列上,返回该序列中使得该函数返回值为 True 的那些元素组成的 filter 对象,如果指定函数为 None,则返回序列中等价于 True 的元素。

  • [表达式 for 变量 in 序列或迭代对象] 列表推导式在逻辑上相当于一个循环,只是形式更加简洁。

    >>> [x*x for x in range(10)]
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    
  • 切片返回的是列表元素的浅复制,与列表对象的直接辅助并不一样。

元组与生成器推导式

  • 元组是不可变序列。

  • 生成器推导式的结果是一个生成器对象,不是列表,也不是元组。可以根据需要将其转化为元组或列表,也可以使用生成器对象的

    __next__()
    

    方法或者内置函数

    next()
    

    进行遍历,或者直接将其作为迭代器对象来使用。当所有元素访问结束以后,如果需要访重新问其中的元素,必须重新创建该生成器对象。

    >>> g = (i*i for i in range(10))
    
    # 返回的是生成器对象
    >>> g
    <generator object <genexpr> at 0x00000158DCB9A620>
    
    # 转为元组
    >>> tuple(g)
    (0, 1, 4, 9, 16, 25, 36, 49, 64, 81)
    
    # 生成器对象已遍历结束,没有元素了
    >>> list(g)
    []
    
    # 重新生成
    >>> g = (i*i for i in range(10))
    >>> g.__next__()
    0
    >>> next(g)
    1
    

字典

  • 字典中的键不允许重复,值可以重复。

  • dict() 可以通过已有数据创建字典。

    >>> keys = ['a', 'b', 'c']
    >>> values = [1, 2, 3]
    >>> dictionary = dict(zip(keys, values))
    >>> dictionary
    {'a': 1, 'b': 2, 'c': 3}
    
  • dict() 可以根据给定的“键:值”来创建字典。

    >>> dict(name='Cat', age=5)
    {'name': 'Cat', 'age': 5}
    
  • dict() 可以给定键,创建值为空的字典。

    >>> dict.fromkeys(['name', 'age'])
    {'name': None, 'age': None}
    
  • dict.update() 将 B 字典的键值对都添加到 A 字典,如果有键重复会用 B 字典的值覆盖。

  • dict.get() 返回字典里指定键的值,如果键不存在返回指定值。

  • dict.setdefault() 返回指定键对应的值,不过不存在就添加一个键并设置对应值。

  • 内置函数globals()locals()分别返回包含当前作用域内所有全局变量和局部变量的名称及值的字典。

  • 其他对象方法参考 list。

集合

  • 同一个集合内每一个元素都是唯一的,不允许重复。
  • set() 将可迭代对象转为集合,如果有重复值则只保留一个。
  • 集合只能包含数字、字符串、元组等不可变类型(或者说可哈希)的数据。
  • set.add() 添加新元素,如果已存在则忽略。
  • set.update() 合并集合。
  • set.pop() 随机删除并返回一个元素。
  • set.remove() 删除指定元素,如果不存在则报错。
  • set.discard() 删除指定元素,如果不存在则忽略。
  • 其他对象方法参考 list。

序列解包

  • 可以使用序列解包功能对多个变量同时赋值。

    x, y, z = 1, 2, 3
    
  • 很方便地同时遍历多个序列

    keys = ['a', 'b', 'c']
    values = [1, 2, 3]
    for k, v in zip(keys, values):
        print(k, v)
    
  • 其他

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

推荐阅读更多精彩内容