前言:Python作为当下十分火热的一门编程语言,目前广泛应用于网络爬虫、数据分析、人工智能中,除此之外,这是一门十分优美的语言,需要我们在学习中细细品味。

一.基本数据类型

数字 (Number)

  • 整数 int

  • 浮点数 float(相当于其他语言的double)

  • bool 布尔类型(True/False 说明:非零数都为真,其他类型非空为真)

  • complex 复数

进制转换与类型检测

二进制

1
0b11	该行代码表示十进制的3(用0b表示二进制)

八进制

1
0o11	该行代码表示十进制的9(用0o表示八进制)

十六进制

1
0xA		该行代码表示十进制的10(0x表示十六进制)

转换为二进制(bin方法)

1
bin(10)		例子:将十进制10转换为二进制

转换为十进制(int方法)

1
int(0xA)	例子:将十六进制A转换为十进制

转换为十六进制(hex方法)

1
hex(100)	例子:将十进制100转换为十六进制

转换为八进制(oct方法)

1
oct(0b11)	例子:将二进制11转换为八进制

使用type方法检测类型

1
2
3
4
5
6
//注意事项
type(1*1.0) 该行代码得出的结果是<class 'float'>
type(3/2) 该行代码得出的结果是<class 'float'>
type(3//2) 该行代码得出的结果是<class 'int'>

总结:单斜杠除法得出较精确结果,双斜杠除法保留整数部分

字符串 (str)

  • 双引号和单引号均可表示

  • 输入时字符串的换行(三单(双)引号)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    '''
    hello world
    Python is beautiful
    '''
    #上述代码运行结果:
    '\nhello world\nPython is beautiful\n'

    'hello\
    world'
    #上述代码运行结果:
    'helloworld'

    总结:若想换行输入而不被录入换行操作,可以用\+回车进行输入换行
  • 转义字符

    IDLE直接打印不会转义,print函数会转义

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    print('hello \n world')
    输出结果:
    hello
    world

    print('hello \\n world')
    输出结果:
    hello \n world

    print(r'hello \n world')
    输出结果:
    hello \n world

    #总结:字符串前加 r ,变为原始字符串,不会进行转义
  • 字符串的运算

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    "hello"+"world"
    结果:
    'helloworld'

    "hello"*3
    结果:
    'hellohellohello'

    #获得单个字符
    "hello world"[6]
    结果:
    'w'

    #截取字符串(注意截取末尾下标+1)
    "hello world"[0:5]
    结果:
    'hello'

    "hello world"[6:]
    结果:
    'world'

    "hello world"[-2:]
    结果:
    'ld'

    #删去字符串
    "hello world"[0:-2]
    结果:
    'hello wor'

    总结:切片 可以当做初始时光标在头部,括号里面的数字代表光标移动的次数
    括号内都是负数时,左小右大;出现左负右正为空,可以左正右负
    左边不填默认开头,右边不填默认结尾

列表 (list)

  • 示例

    1
    2
    3
    #区别于其他大部分语言,Python中组可以放置不同类型元素,例如:
    [1,2,3,4,5]
    ["hello",1,false]
  • 读取列表元素

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ["语文","数学","英语"][1]

    输出结果:
    '数学'

    ["语文","数学","英语"][-1:]

    输出结果:
    ['英语']

    注意:若使用截取的方式获取列表元素,得到的结果还是列表
  • 列表的运算

    1
    2
    3
    4
    5
    6
    7
    8
    9
    #加法
    ["123"]+["456"]
    结果:['123','456']

    #乘法
    ['hello']*3
    结果:['hello','hello','hello']

    #可用append()函数添加元素
  • 列表元素检测

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    8 in [1,3,5,8]
    结果:True

    8 not in [1,3,5,8]
    结果:False

    len(["hello",1,2])
    结果:3

    #还可以用max,min函数
  • 列表的排序

    1
    2
    3
    li = [1,-3,5,-7,9]
    li.sort(reverse=False) # [-7, -3, 1, 5, 9]
    li.sort(reverse=True) # [9, 5, 1, -3, -7]
  • 找列表不同(使用表达式)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 找列表相同元素
    l1 = [1,3,5,7]
    l2 = [2,5,6]
    [x for x in l1 if x in l2] # [5]

    # 找列表不相同元素
    l1 = [1,3,5,7]
    l2 = [2,5,6]
    l3 = [x for x in l1 if x in l2] # [5]
    [x for x in l1+l2 if x not in l3] # [1, 3, 7, 2, 6]

元组 (tuple)

  • 元素的访问

    1
    2
    (1,2,True)[2]
    结果:True
  • 元组的运算与截取规则和列表基本一样,不过多阐述

  • 与列表的区别:元组不可变,只可读

集合 (set)

  • 无序,不重复

  • 元素的访问

  • 集合的运算

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #求两个集合差集
    {1,2,3,4}-{1,2}
    结果:{3,4}

    #求交集
    {1,2,3}&{3,4,5}
    结果:{3}

    #求并集
    {1,2,3}|{3,4,5}
    结果:{1,2,3,4,5}

    #空集
    set()

    #可用add()函数添加元素

字典 (dict)

  • 键值对的访问:键不可重复

  • key:不可变类型

  • value:几乎所有类型

    1
    2
    {'q':'新月打击','w':'苍白之瀑','e':'月之降临'}['w']
    结果:'苍白之瀑'
  • 访问字典

    1
    2
    3
    4
    d = {'b':3, 'a':7, 'c': 6}
    d.keys() # 获取字典键
    d.values() # 获取字典值
    d['a'] # 7
  • 字典的排序

    ① 对键排序,返回键列表

    1
    2
    3
    d = {'b':3, 'a':7, 'c': 6}
    sorted(d.keys()) # ['a', 'b', 'c']
    sorted(d.keys(), reverse=True) # ['c', 'b', 'a']

    ② 对值排序,返回值列表

    1
    2
    3
    d = {'b':3, 'a':7, 'c': 6}
    sorted(d.values()) # [3, 6, 7]
    sorted(d.values(), reverse=True) # [7, 6, 3]

    ③ 对键或值排序,返回字典

    1
    2
    3
    4
    # 对键排序
    dict(sorted(d.items(), key = lambda asd:asd[0], reverse = False)) # {'a': 7, 'b': 3, 'c': 6}
    # 对值排序
    dict(sorted(d.items(), key = lambda a:a[1], reverse = False)) # {'b': 3, 'c': 6, 'a': 7}

数据类型总结

  • 可变类型:set(集合) list(列表) dict(字典)

  • 不可变类型:Number(数字) str(字符串) tuple(元组)

  • 关于可不可变:可用id()函数检测内存地址是否变化

    Python基本数据类型

二.变量与运算符

  • 变量赋值举例

    1
    A = [1,2,3,4,5]
  • 变量名规则

    1
    2
    3
    字母、数字、下划线
    区分大小写,注意保留关键字
    开头不允许为数字
  • 可变与不可变

    1
    2
    3
    不可变:int、str、tuple
    可变:list、set、dict
    #可用id函数显示变量地址,检验变化后是否为原来地址
  • 运算符(与C/Java等语言不同之处)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #除法(单、双斜杠区别)
    3/2 = 1.5
    3//2 = 1

    #幂运算(2的n次方为例)
    2**n

    #身份运算符 (检查id)
    is / is not

    #成员运算符
    in / not in

    #逻辑运算符
    not / and / or

    #判断两个值类型 object classinfo
    isinstance(5, int)

    #没有自增、自减运算符

    #ASCII码
    ord('a')
  • 位运算符(将数字转换为二进制数进行运算,结果再转换为十进制数)

    1
    2
    3
    4
    5
    6
    &(按位与):每位二进制数进行比较,都为1结果为1,否则为0
    |(按位或):每位二进制数进行比较,都为0结果为0,否则为1
    ^(按位异或)
    ~(按位取反)
    <<(左移动)
    >>(右移动)
  • 运算符优先级

    1
    逻辑运算符:not and or
  • 思考

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    a={1,2,3}
    b={2,1,3}
    c=(1,2,3)
    d=(2,1,3)

    a == b (true)
    a is b (false)
    c == d (false)
    c is d (false)

    注意:Python中并没有const修饰符,没有真正意义上的‘常量’,大家一般约定俗成:全大写变量当做常量使用

三.执行python文件的方法

  • 文本编辑器执行python程序

    1
    2
    3
    command/ctrl + S 打开IDLE自带文本编辑器
    终端cd到文件所在目录,随后执行以下命令
    python 文件名.py
  • VS Code执行python程序

    1
    2
    Ctrl + ~:打开/关闭终端
    或者安装Python拓展

四.分支、循环、条件、枚举

判断语句

  • if语句

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #与其他语言不同,采用缩进来替代语句块,例如:
    if true :
    print('right')
    print('right-2')

    #等同于Java/C中
    if(true){
    print('right')
    print('right-2')
    }
  • if-else语句

    1
    2
    3
    4
    5
    6
    if condition :
    ...
    elif :
    ...
    else :
    ...

循环语句

  • while语句

    1
    2
    while condition :
    ...
  • while / while else语句

  • while condition :
        ...
    else :
        ...
    
  • for / for else语句

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    a = ['a','b','c']

    #案例1
    for x in a :
    print(x)
    else :
    print('done')

    #案例2,输出0-9
    for x in range(0,10):
    print(x)

    #案例3,输出0|2|4|6|8
    for x in range(0,10,2):
    print(x,end="|")

    #案例4,切片
    b = a[0:len(a):2]
    print(b)
  • break / continue:终止循环与跳过循环

五.包、模块与类

  • 包下不同模块的区分(命名空间)

    1
    包名.模块名
  • 标注包

    1
    2
    #在包内添加一个文件,名为
    __init__.py
  • 导入包

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #方案一
    import 包名.模块名
    print(包名.模块名.变量名)

    #方案二
    import 包名.模块名 as m
    print(m.变量名)

    #方案三
    from 包名.模块名 import 指定类/变量/方法
  • 指定*域

    1
    __all__=['包名''变量名']
  • 包的初始化

    1
    2
    利用包下的__init__.py文件
    import该包,运行时会自动初始化
  • 利用init批量导入包

    1
    2
    3
    4
    5
    6
    t包下__init__.py文件:
    import 包名

    t包外若想调用
    import t
    t.包名
  • 包和模块是不会被重复导入的

  • 导入一个模块便会执行模块内代码

六.函数

  • 函数的定义

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #coding=UTF-8

    import sys
    sys.setrecursionlimit(10000) #设置最大递归次数

    def add(x,y): #def 函数名(参数列表):
    result = x+ #函数体
    return result #若没有return默认返回None

    def printCode(code):
    print(code)

    printCode(add(2,4))
  • 接收函数返回多个参数

    1
    2
    3
    4
    5
    6
    7
    8
    def damage(skill1,skill2):
    damage1=skill1*3
    damage2=skill2*2+10
    return damage1,damage2

    skill1_damage, sill2_damage = damage(2,3) #序列解包

    print(skill1_damage)
  • 序列解包与链式赋值

    1
    2
    a,b,c=1,1,1    #序列解包赋值
    a=b=c=1 #链式赋值
  • 必须参数与关键字参数

    1
    2
    3
    4
    5
    def add(x,y):            #必须参数
    return x+y

    result = add(y=1,x=2) #关键字参数,便于阅读
    print (result)
  • 默认参数(必须放在必须参数后)

    1
    2
    3
    4
    5
    def print_student_files(name,gender,age='18',college='天理'): #加入默认参数
    print('我叫'+name)
    print('我今年'+age+'岁')
    print('我是'+gender+'生')
    print('我在'+college+'上学')