Python基本知识点整合

注:以下内容大多来自菜鸟教程

目录

一、基本介绍

1、特性

1.1 基本说明

1.2 优缺点

2、种类

二、基础语法

1、中文编码

2、书写规范

2.1 标识符

2.2 代码块

2.3 空行

2.4 多行语句

2.5 字符串

2.6 注释

3、运算符

3.1 分类

3.2 优先级

4、语句

4.1 输入输出

4.2 删除引用

三、条件(代码组)

四、循环

1、循环类型

2、控制语句

五、变量

1、基本说明:

2、多个变量赋值

3、基本数据类型

3.1 Numbers(数字)

3.2 String(字符串)

3.3 List(列表)

3.4 Tuple(元组)

3.5 Dictionary(字典)

4、可变和不可变

六、数学

1、math/cmath模块

2、Random

七、函数

1、定义

2、语法

3、参数

4、日期和时间

八、模块和包

1、模块

2、包

九、文件I/O

1、打印到屏幕

2、读取键盘输入

3、打开和关闭文件

十、Json

1、序列化的两个模块

2、四个功能

十一、多线程

1、说明

2、种类

3、举例

快捷键和简写

、Exception

、差别

is和==的差别

2和3的差别


 

一、基本介绍

1、特性

1.1 基本说明

  • 解释型语言

  • 脚本式语言

  • 交互式语言:不需要创建脚本文件,通过Python解释器的交互模式编写

  • 面向对象

1.2 优缺点

  • 优点

    1. 优美、清晰、简单

    2. 高级语言

    3. 开发效率高

    4. 可移植、可嵌入、可拓展性

    5. 广泛的标准库

    6. 互动模式

    7. GUI编程

  • 缺点

    1. 运行速度慢

    2. 代码不能加密

    3. 线程不能利用多CPU

2、种类

  • 开发种类:解释型

  • 所含类型:

    • Cpython:基于C语言开发

    • Ipython

    • Jpython

    • PyPy:目前执行最快

     

二、基础语法

说明:以下皆为Python2语法

1、中文编码

Python2默认为ASCII编码,输入中文必须在文件开头加入

  • # coding=utf-8

    注: = 两边不要空格

  • # -*- coding: UTF-8 -*-

2、书写规范

2.1 标识符

  • 单下划线开头:不能直接访问的类属性

    • 需要通过类提供的接口进行访问

    • 不能用 from XXX import * 导入

    • 如: _foo

  • 双下划线开头:类的私有成员

    • 如:__foo

  • 双下划线开头和结尾:Python里特殊方法专用的标识

    • 如:__init__() 代表类的构造函数

2.2 代码块

  • 不使用 {} 控制类、函数及其他逻辑判断

  • 使用缩进来写模块

  • 所有代码块语句必须包含相同的缩进空白数量

2.3 空行

  • 函数或类的方法之间用空行分隔,表示一段新代码的开始

  • 类和函数入口用空行分隔,突出函数入口的开始

    注:非语法要求,分隔作用,便于日后维护或重构

2.4 多行语句

  • 同一行可以显示多条语句,用 ; 分隔

  • 使用 \ 将一行语句分为多行显示

  • 语句中包含 {}[]()括号则不需要使用多行连接符

2.5 字符串

  • 单引号:word = 'word'

  • 双引号:sentence = "这是一个句子"

  • 三引号:

    • '''可以由多行组成'''
    • """常用于文档字符串,在文件的特定地点被当作注释"""

2.6 注释

  • 单行注释:可以用在语句或表达式行末

    # 这是单行注释
  • 多行注释:

    '''
    这是多行注释
    '''
    """
    另一种形式的多行注释
    """

3、运算符

3.1 分类

  • 算术运算符

    1. x**y :xy

    2. x//y :返回商的整数部分

  • 比较运算符

  • 赋值运算符

  • 位运算符

    a = 60(0011 1100),b = 13(0000 1101)

    运算符 描述 实例
    & 按位与 (a & b) 输出结果12(0000 1100)
    | 按位或 (a | b) 输出结果 61(0011 1101)
    ^ 按位异或运算符 (a ^ b) 输出结果 49(0011 0001)
    ~ 按位取反:~x 类似于 -x-1 (~a ) 输出结果 -61(1100 0011),补码形式。
    << 左移:高位丢弃,低位补0。 a << 2 输出结果 240 ,二进制解释: 1111 0000
    >> 右移:高位丢弃,低位补0。 a >> 2 输出结果 15 ,二进制解释: 0000 1111
  • 逻辑运算符

    结果为True/False

    1. and:与

    2. or:或

    3. not:非

  • 成员运算符

    指定序列中是否包含某值

    1. in

    2. not in

  • 身份运算符

    两个标识符是不是引自同一对象

    1. is

    2. is not

3.2 优先级

算术 > 位 > 比较 > 赋值 > 身份 > 成员 > 逻辑

运算符 描述
** 指数 (最高优先级)
~ + - 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)
* / % // 乘,除,取模和取整除
+ - 加法减法
>> << 右移,左移运算符
& 位 'AND'
^ | 位运算符
<= < > >= 比较运算符
<> == != 等于运算符
= %= /= //= -= += *= **= 赋值运算符
is is not 身份运算符
in not in 成员运算符
not and or 逻辑运算符

4、语句

4.1 输入输出

  • 输入

  1. input()

  2. raw_input():用户从控制台输入

  • 输出

    • x,y换行输出

      print x
      print y
    • x,y不换行输出

      print x,y
      print x,
      print y,

4.2 删除引用

del

 

三、条件(代码组)

  • 0或null为false

  • 格式:

    if expression : 
        suite
    elif expression :
        suite
    else : 
        suite

四、循环

1、循环类型

  • While循环

    while 判断条件:
        执行语句(为True时)……
    while 判断条件:
        执行语句(为True时)……
    else:
        执行语句(为False时)……
  • For循环

    1. 语法(遍历)

      for iterating_var in sequence:
          statements(s)
  • 嵌套循环

    注:无限循环可以用Ctrl+C来中断

2、控制语句

  • Break语句:

    1. 跳出整个循环

  • Continue语句:

    1. 跳出当前循环

    2. 存在是为了删除满足循环条件下的某些不需要的成分

  • Pass语句

    1. 空语句

    2. 一般用于占位置,是为了保持程序结构的完整性

五、变量

1、基本说明:

  1. 变量赋值不需要类型声明

  2. 变量在使用前必须要赋值

  3. = 用来给变量赋值

2、多个变量赋值

  1. # 创建一个整型对象,三个变量被分配到相同内存空间
    a = b = c = 1
  2. # 创建多个对象并赋值
    a, b, c = 1, 2, "join"

3、基本数据类型

3.1 Numbers(数字)

  • 基本说明:

    1. 不可改变(改变数值时分配新对象)

      若变量重新赋值后又被赋回原值,仍为原对象

      id:X1 —> X2 —> X1

      值:Y1 —> Y2 —> Y1

    • 类型:

      1. int(有符号整型)

      2. long(长整型)

        • 可以代表八进制和十六进制

        • 后加L

        • Python3不存在

      3. float(浮点型)

      4. complex(复数)

        • 由实数和虚数构成

        • 可由 ​ 或 complex(a,b) 表示,其中a,b都是浮点型

        • 后加J

3.2 String(字符串)

  • 取值顺序

    1. 从左到右索引默认0开始的,最大范围是字符串长度少1

    2. 从右到左索引默认-1开始的,最大范围是字符串开头

      注:元素通过偏移来存取

  • 取值格式:[头下标:尾下标:步长]

  • 取值说明:

    1. 获取的子字符串包含头下标的字符,但不包含尾下标的字符。

    2. 两种取值顺序都是原序输出

    3. 不支持单字符类型,单字符在Python中也作为字符串使用

    str = 'Hello World!'
     
    print str           # 输出完整字符串
    print str[0]        # 输出字符串中的第一个字符
    print str[2:]       # 输出从第三个字符开始的字符串
    print str[2:5]      # 输出字符串中第三个至第六个之间的字符串
    print str[0: :2]    # 输出结果:HloWrd
    print str[0:5:2]    # 输出结果:Hlo
    print str * 2       # 输出字符串两次
    print str + "TEST"  # 输出连接的字符串
  • 转义字符

    注:在需要在字符中使用特殊字符时,python用反斜杠()转义字符

    复杂的字符串可以通过三引号进行复制

    转义字符 描述
    (在行尾时) 续行符
    \ 反斜杠符号
    ' 单引号
    " 双引号
    \a 响铃
    \b 退格(Backspace)
    \e 转义
    \000
    \n 换行
    \v 纵向制表符
    \t 横向制表符
    \r 回车
    \f 换页
    \oyy 八进制数,yy代表的字符,例如:\o12代表换行
    \xyy 十六进制数,yy代表的字符,例如:\x0a代表换行
    \other 其它的字符以普通格式输出
  • 字符串运算符

    操作符 描述 实例
    + 连接 >>>a + b 'HelloPython'
    * 重复输出 >>>a * 2 'HelloHello'
    [] 通过索引获取字符串中字符 >>>a[1] 'e'
    [ : ] 截取字符串中的一部分 >>>a[1:4] 'ell'
    in 成员运算符 - 如果字符串中包含给定的字符返回 True >>>"H" in a True
    not in 成员运算符 - 不包含给定的字符返回 True >>>"M" not in a True
    r/R 原始字符串:按照字面的意思使用,没有转义特殊字符。 >>>print r'\n' \n
    % 格式字符串 请看下一章节
  • 字符串格式化

    • 格式化符号

      符 号 描述
      %c 格式化字符及其ASCII码
      %s 格式化字符串
      %d 格式化整数
      %u 格式化无符号整型
      %o 格式化无符号八进制数
      %x 格式化无符号十六进制数
      %X 格式化无符号十六进制数(大写)
      %f 格式化浮点数字,可指定小数点后的精度
      %e 用科学计数法格式化浮点数
      %E 作用同%e,用科学计数法格式化浮点数
      %g %f和%e的简写
      %G %F 和 %E 的简写
      %p 用十六进制数格式化变量的地址
    • 格式化操作符辅助指令

      符号 功能
      * 定义宽度或者小数点精度
      - 用做左对齐
      + 在正数前面显示加号( + )
      在正数前面显示空格
      # 在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X')
      0 显示的数字前面填充'0'而不是默认的空格
      % '%%'输出一个单一的'%'
      (var) 映射变量(字典参数)
      m.n. m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)

      Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。

  • Unicode字符串

    • 格式:u"Hello WOrld"

  • 内建函数

    注:链式

    方法 描述
    string.capitalize() 把字符串的第一个字符大写
    string.center(width) 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串
    string.count(str, beg=0, end=len(string)) 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
    string.decode(encoding='UTF-8', errors='strict') 以 encoding 指定的编码格式解码 string,如果出错默认报一个 ValueError 的 异 常 , 除非 errors 指 定 的 是 'ignore' 或 者'replace'
    string.encode(encoding='UTF-8', errors='strict') 以 encoding 指定的编码格式编码 string,如果出错默认报一个ValueError 的异常,除非 errors 指定的是'ignore'或者'replace'
    string.endswith(obj, beg=0, end=len(string)) 检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.
    string.expandtabs(tabsize=8) 把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8。
    string.find(str, beg=0, end=len(string)) 检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1
    string.format() 格式化字符串
    string.index(str, beg=0, end=len(string)) 跟find()方法一样,只不过如果str不在 string中会报一个异常.
    string.isalnum() 如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False
    string.isalpha() 如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False
    string.isdecimal() 如果 string 只包含十进制数字则返回 True 否则返回 False.
    string.isdigit() 如果 string 只包含数字则返回 True 否则返回 False.
    string.islower() 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False
    string.isnumeric() 如果 string 中只包含数字字符,则返回 True,否则返回 False
    string.isspace() 如果 string 中只包含空格,则返回 True,否则返回 False.
    string.istitle() 如果 string 是标题化的(见 title())则返回 True,否则返回 False
    string.isupper() 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False
    string.join(seq) 以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
    string.ljust(width) 返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串
    string.lower() 转换 string 中所有大写字符为小写.
    string.lstrip() 截掉 string 左边的空格
    string.maketrans(intab, outtab]) maketrans() 方法用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。
    max(str) 返回字符串 str 中最大的字母。
    min(str) 返回字符串 str 中最小的字母。
    string.partition(str) 有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把 字 符 串 string 分 成 一 个 3 元 素 的 元 组 (string_pre_str,str,string_post_str),如果 string 中不包含str 则 string_pre_str == string.
    string.replace(str1, str2, num=string.count(str1)) 把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次.
    string.rfind(str, beg=0,end=len(string) ) 类似于 find()函数,不过是从右边开始查找.
    string.rindex( str, beg=0,end=len(string)) 类似于 index(),不过是从右边开始.
    string.rjust(width) 返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串
    string.rpartition(str) 类似于 partition()函数,不过是从右边开始查找
    string.rstrip() 删除 string 字符串末尾的空格.
    string.split(str="", num=string.count(str)) 以 str 为分隔符切片 string,如果 num 有指定值,则仅分隔 num+ 个子字符串
    [string.splitlines(keepends]) 按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
    string.startswith(obj, beg=0,end=len(string)) 检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查.
    string.strip([obj]) 在 string 上执行 lstrip()和 rstrip()
    string.swapcase() 翻转 string 中的大小写
    string.title() 返回"标题化"的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())
    string.translate(str, del="") 根据 str 给出的表(包含 256 个字符)转换 string 的字符,要过滤掉的字符放到 del 参数中
    string.upper() 转换 string 中的小写字母为大写
    string.zfill(width) 返回长度为 width 的字符串,原字符串 string 右对齐,前面填充0

3.3 List(列表)

使用最频繁的复合数据类型

  • 取值同String,用 [] 标识

  • 特点

    1. 有序的对象集合

    2. 可重复

    3. 允许更新(即重新赋值)

  • 函数

    序号 函数
    1 cmp(list1, list2) 比较两个列表的元素
    2 len(list) 列表元素个数
    3 max(list) 返回列表元素最大值
    4 min(list) 返回列表元素最小值
    5 list(seq) 将元组转换为列表
  • 方法

    序号 方法
    1 list.append(obj) 在列表末尾添加新的对象
    2 list.count(obj) 统计某个元素在列表中出现的次数
    3 list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
    4 list.index(obj) 从列表中找出某个值第一个匹配项的索引位置
    5 list.insert(index, obj) 将对象插入列表
    6 [list.pop(index=-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
    7 list.remove(obj) 移除列表中某个值的第一个匹配项
    8 list.reverse() 反向列表中元素
    9 list.sort(cmp=None, key=None, reverse=False) 对原列表进行排序
  • 删除:

    语法:del list[index]

     

3.4 Tuple(元组)

类似列表

  • 取值同String,用 () 标识

  • 特点

    1. 可重复

    2. 不允许更新,相当于只读列表,不能二次赋值

  •  

3.5 Dictionary(字典)

除列表外最灵活的内置数据类型

  • 由索引(key)和值(value)组成,用 {} 表示

    注:元素通过键来存取

  • 特点

    1. 无序的对象集合

    2. 不可重复

  • 根据声明顺序添加

    import collections
    ​
    # 根据声明顺序添加
    dic = collections.OrderedDict() 
    # dic = dict()
    dic['a'] = 1
    dic['b'] = 2
    dic['c'] = 3
    print("dic is:", dic.items())
    ​
    import json
    ​
    jsons = json.dumps(dic)
    print("jsons:", jsons)

     

  • 内置方法

    序号 函数及描述
    1 dict.clear() 删除字典内所有元素
    2 dict.copy() 返回一个字典的浅复制
    3 [dict.fromkeys(seq, val]) 创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
    4 dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值
    5 dict.has_key(key) 如果键在字典dict里返回true,否则返回false
    6 dict.items() 以列表返回可遍历的(键, 值) 元组数组
    7 dict.keys() 以列表返回一个字典所有的键
    8 dict.setdefault(key, default=None) 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
    9 dict.update(dict2) 把字典dict2的键/值对更新到dict里
    10 dict.values() 以列表返回字典中的所有值
    11 [pop(key,default]) 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
    12 popitem() 随机返回并删除字典中的一对键和值。

4、可变和不可变

  • 对象

    • 不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a

    • 可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。

  • 参数传递

    • 不可变类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。

    • 可变类型:类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响

  • 赋值传递时的引用和拷贝

    • import copy
      a = copy.deepcopy(b)    # 深拷贝
      a = copy.copy(b)        # 浅拷贝

      注:参考自CSDN:原文地址

    •  

六、数学

1、math/cmath模块

  1. 基本说明:数学运算常用函数基本都在math/cmath模块中

  • math:浮点数的数学运算

  • cmath:复数运算

  1. 使用方式:

    1. 导入包:import math

    2. 查看包中的内容:dir(math)

  2. 常用函数

    函数 返回值 ( 描述 )
    abs(x) 绝对值,如abs(-10) 返回 10
    ceil(x) 上入整数,如math.ceil(4.1) 返回 5
    cmp(x, y) 如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1
    exp(x) e的x次幂(ex),如math.exp(1) 返回2.718281828459045
    fabs(x) 绝对值,如math.fabs(-10) 返回10.0
    floor(x) 下舍整数,如math.floor(4.9)返回 4
    log(x) 如math.log(math.e)返回1.0,math.log(100,10)返回2.0
    log10(x) 以10为基数的x的对数,如math.log10(100)返回 2.0
    max(x1, x2,...) 最大值,参数可以为序列。
    min(x1, x2,...) 最小值,参数可以为序列。
    modf(x) 返回x的整数与小数,整数部分以浮点型表示。
    pow(x, y) x**y 运算后的值。
    [round(x ,n]) 四舍五入值,如给出n,则代表舍入到小数点后的位数。
    sqrt(x) 返回数字x的平方根
  3. 随机数函数

    函数 描述
    choice(seq) 从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。
    randrange ([start,] stop [,step]) 从指定范围内,按指定基数递增的集合中获取一个随机数,基数默认值为 1
    random() 随机生成下一个实数,它在[0,1)范围内。
    [seed(x]) 改变随机数生成器的种子seed。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed。
    shuffle(lst) 将序列的所有元素随机排序
    uniform(x, y) 随机生成下一个实数,它在[x,y]范围内。
  4. 三角函数

    函数 描述
    acos(x) 返回x的反余弦弧度值。
    asin(x) 返回x的反正弦弧度值。
    atan(x) 返回x的反正切弧度值。
    atan2(y, x) 返回给定的 X 及 Y 坐标值的反正切值。
    cos(x) 返回x的弧度的余弦值。
    hypot(x, y) 返回欧几里德范数 sqrt(xx + yy)。
    sin(x) 返回的x弧度的正弦值。
    tan(x) 返回x弧度的正切值。
    degrees(x) 将弧度转换为角度,如degrees(math.pi/2) , 返回90.0
    radians(x) 将角度转换为弧度
  5. 数学常量

    1. pi

    2. e

2、Random

  1. 使用方式:

    导入包:import random

  2. 基本语法

    • random.random() :生成一个 0-1 之间的随机浮点数;

    • random.uniform(a, b) :生成[a,b]之间的浮点数;

    • random.randint(a, b) :生成[a,b]之间的整数;

    • random.randrange(a, b, step) :在指定的集合[a,b)中,以 step 为基数随机取一个数;

    • random.choice(sequence) :从特定序列中随机取一个元素,这里的序列可以是字符串,列表,元组等。

七、函数

1、定义

  • 以def开头,后接函数标识名和圆括号()

  • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数

  • 函数的第一行可以选择性的使用文档字符串,用于存放函数说明

  • 函数内容以 : 起始,并且缩进

  • return[表达式]结束函数,选择性的返回一个值给调用方,不带表达式的返回值相当于返回none

2、语法

def function_name( parameters ):
    "函数_文档字符串"
    function_suite
    return [expression]

3、参数

  • 类型

    1. 必备参数

      • 必须以正确的顺序传入参数

      • 调用时数量必须和声明时一样

    2. 关键字参数

      • 用来确定传入的参数值

      • 允许函数调用时参数的顺序与声明时不一致( Python 解释器能够用参数名匹配参数值)

    3. 默认参数

      • 如果没有传入,则被认为是默认值

    4. 不定长参数

      • 基本语法

        def function_name([formal_args,] *var_args_tuple):
            funcrion_suite
            return [expression]

        注:加了星号(*)的变量名会存放所有未命名的变量参数

    5. 匿名参数

      • 说明:

        1. lambda只是一个表达式,函数体比def简单很多。

        2. lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。

        3. lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。

        4. 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

      • 语法:

        lambda [arg1 [,arg2,……argn]]:expression
  • Return语句

  • 变量作用域

    • 全局变量:函数内

    • 局部变量:函数外

4、日期和时间

待整理(菜鸟教程)

  • 格式化

    1. time

    2. calendar

  • 时间元组

  • 常用函数

    • globals():返回全局和局部命名空间的名字

    • locals():返回所有能在函数访问的名字

    • keys():上两函数返回类型都是字典,名字们可以通过此函数摘取

    • reload():重新执行模块顶层的部分代码

 

八、模块和包

1、模块

  1. 基本说明

    • 就是一个Python文件,以.py结尾

    • 能定义函数、类和变量,也包含可执行的代码

  2. 引入模块

    • import语句:

      引入方式:import 模块名

      引用方式:模块名.函数名

    • from……import语句

      引入方式:from 函数名 import 模块名

      引用方式:函数名

  3. 搜索路径

    • 搜索顺序:

      1. 当前目录

      2. SHell变量PYTHONPATH下的每个目录

      3. 查看默认路径(Unix一般为/usr/local/lib/python)

    • 存储位置:

      模块搜索路径存储在 system 模块的 sys.path 变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录

  4. 命名空间和作用域

    • 如果要给函数内的全局变量赋值,必须使用 global 全局变量语句。

    • Python 会智能地猜测一个变量是局部的还是全局的,它假设任何在函数内赋值的变量都是局部的。

2、包

  • 基本说明:

    1. 分层次的文件目录结构,定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境

    2. 该文件夹下必须存在 init.py 文件, 该文件的内容可以为空

 

九、文件I/O

1、打印到屏幕

2、读取键盘输入

3、打开和关闭文件

 

 

十、Json

1、序列化的两个模块

  • Json:字符串和python数据类型间进行转换

  • Pickle:python特有的类型和python的数据类型间进行转换

2、四个功能

  • dumps : 把数据类型转换成字符串

  • dump : 把数据类型转换成字符串并存储在文件中

  • loads : 把字符串转换成数据类型

  • load : 把文件打开从字符串转换成数据类型

     

 

十一、多线程

1、说明

  1. 互斥量:本质上来说是一把锁

  1. 条件变量:利用线程间共享的全局变量进行同步的一种机制,线程在改变条件状态前必须首先锁住互斥量,主要包括两个动作

    • 一个线程等待"条件变量的条件成立"而挂起

    • 另一个线程使“条件成立”

  1. 更适用于I/O密集型程序

  1. 锁(同步)

    • 用在不希望被多个线程同时执行的函数或代码块

    • 包括修改数据库,更新文件或产生竞态条件的类似情况

  2.  

2、种类

  • Thread

  • threading

    1. 两种锁:

      • thraeding.Lock
      • threading.RLock # 可以重入锁(在一个线程内重复Lock不会发生死锁
    2. 三个函数

      • threading.Lock()        # 分配一个互斥锁
      • threading.acquire([blocking=1]) # 上锁
      • threading.release()     # 解锁

         

  • Queue

    1. 方法

      q.qsize()       # 返回队列的大小  
      q.empty()       # 如果队列为空,返回True,反之False  
      q.full()        # 如果队列满了,返回True,反之False 
      q.full          # 与 maxsize 大小对应  
      q.get([block[, timeout]])   # 获取队列,timeout等待时间  
      q.get_nowait()  # 相当q.get(False) 
      q.put(item)     # 写入队列,timeout等待时间  
      q.put_nowait(item)  # 相当q.put(item, False) 
      q.task_done()   # 在完成一项工作之后,q.task_done() 函数向任务已经完成的队列发送一个信号 
      q.join()        # 实际上意味着等到队列为空,再执行别的操作

      注:方法归纳摘自CSDN:原文地址

  • Multiprocessing

    注:参考自CSDN:multiprocessing Process join run(待整理)、multiprocessing(待整理)

    1. 说明:

    2. 作用:支持子进程、通信和共享数据,提供了Process、Queue、Pipe、Lock等组件

3、举例

  • 自定义多线程

  • 自定义锁

  • 生产者消费者模型

 

 

快捷键和简写

  • 运行当前项目:Ctrl+Shift+F10

  • 格式化:Ctrl+Alt+L

  • 重命名(变量批量/文件等):Shift+F6

  • 模块简写:

    import multiprocessing as mp
    pool = mp.Pool(processes = 2)   # 定义一个Pool,CPU核=2
  •  

 

、Exception

  1. IndentationError: unindent does not match any outer indentation level:使用的缩进方式不一致(如有的是Tab,有的是空格)

  2. AttributeError: 'str' object has no attribute 'capitalise':用法错误,当前没有该函数/属性

 

、差别

is和==的差别

is判断是否为同一个对象

==判断值是否相等

2和3的差别

  • 代码

    1. Python2:代码混乱,重复代码较多,冗余

    2. Python3:代码崇尚优美、清晰、简单

  • Print

    1. Python2:语句

    2. Python3:函数

  • Input

    1. Python2:raw_input()接收字符串,input接收数字

    2. Python3:input接收的全是字符串

  • 编码方式

    1. Python2:ASCII码(若想使用中文:#*coding:utf-8*

    2. Python3:UTF-8,支持中文

  • 不等运算符

    1. Python2:!= 或 ><

    2. Python3:!=

  • 创建迭代计数器

    1. Python2:xrange

    2. Python3:range

  • Repr

    1. Python2:可以是语句

    2. Python3:只允许使用repr()函数

  • 整型

    1. Python2:存在Long型

    2. Python3:全部为int型

  • 修改语法

    1. Python2:字典的keys、values、items以及map、filter、reduce返回的都是一个列表

    2. Python3:字典的keys、values、items以及map、filter、reduce返回一个可迭代对象

  • 新增语法

    1. Python2:print和exec语句,无nolocal等方法

    2. Python3:print和exac改为函数,新增nolocal等方法

  • 继承

    1. Python2:默认经典类(新式类需要object)

    2. Python3:只有新式类

你可能感兴趣的:(Python)