• Python入门


    Python

    Chapter1

    运算符:

    • // 整除
    • ** 次方

    字符串拼接

    • 字符串%s
    • 整数%d
    • 浮点数%f
    • eg:message = "python大数据学科,北京%s期,毕业平均工资:%s" % (class_num, avg_salary)

    数字精度控制:使用辅助符号“m.n”来控制数据的宽度和精度

    • m:控制宽度,要求是数字,设置的宽度小于数字自身则不生效
    • n:控制小数点精度,要求是数字,会进行小数的四舍五入

    字符串格式化f"{}"

    • 不理会类型
    • 不能精度控制
    • eg:print(f"我是{name}, 我现在{status}, 想要睡{hour}小时")

    input语句:获取键盘输入的数据

    • input(提示信息):用以在使用者输入内容之前显示提示信息。
    • ps:无论键盘输入什么类型的数据,获取到的都是str类型

    Chapter2

    布尔类型:

    • True:1
    • False:0

    判断语句:python是根据缩进来决定语句之间的层次关系。

    if 条件1:
        执行语句
    elif 条件2:
        执行语句
    ...
    else:
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 不要忘记判断条件后的冒号。

    for循环:

    for 临时变量 in 序列类型:
        循环满足条件时执行的代码
    
    • 1
    • 2
    • 无法定义循环条件,只能被动取出数据处理

    range

    • range(num):获得从0开始到num的数字序列,不包括num。
    • range(num1, num2):获得从num1开始到num2的数字序列,不包括num2。
    • range(num1, num2, step):获得从num1开始到num2的数字序列,不包括num2,数字之间的字长以step为准(step默认为1)。

    Chapter3

    函数的定义:

    def 函数名(传入参数):
        函数体
        return 返回值
    
    • 1
    • 2
    • 3
    • 参数可以省略,返回值可以省略,默认是None。
    • 必须先定义再使用。
    • 使用global关键字,可以在函数内部声明变量为全局变量。

    关键字参数:函数调用时通过“键=值”形式传递参数。作用:可以让函数更加清晰、容易使用,同时也清除了参数的顺序要求。ps:函数调用时,如果有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序。

    缺省参数:用于定义函数,为参数提供默认值,调用函数可不传该默认参数的值。所有位置参数必须出现在默认参数前,包括函数定义和调用。函数调用时,如果为缺省参数传值则修改默认参数值,否则使用这个默认值。

    不定长参数:用于不确定调用的时候会传递多少个参数(不传参也可以)。类型分为:

    • 位置传递:*args。传进的参数都会被args变量接收,它会根据传递参数的位置合并成一个元组tupleargs是元组类型
    • 关键字传递:**kwargs。参数是“键=值”的情况下,所有的参数被kwargs接受,最后组成字典

    函数也可以作为参数传递。

    lambda匿名函数:定义匿名函数,只能临时使用一次。语法:lambda 传入参数: 函数体(一行代码)

    • lambda是关键字,表示定义匿名函数。
    • 传入参数表示匿名函数的形式参数。
    • 函数体只能写一行代码,无法写多行代码。

    数据容器:一种可以容纳多份数据的数据类型,容纳的每一份数据称之为1个元素,每个元素可以是任意类型的数据。它分为5类:

    • 列表list
    • 元组tuple
    • 字符串str
    • 集合set
    • 字典dict

    列表list

    列表的定义:列表内的每一个数据,称之为元素

    # 定义变量
    变量名称 = [元素1, 元素2, 元素3, ...]
    # 定义空列表
    变量名称 = []
    变量名称 = list()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 以[]作为标识。
    • 列表每一个元素之间用逗号隔开。
    • 可以存储不同的数据类型,允许数据重复,支持嵌套。
    • 有序存储,列表[下标索引],从前向后从0开始,从后向前从-1开始。

    常用方法:

    • .index(元素):查找在列表中该元素的下标索引,不存在该元素就会报错。
    • 列表[下标] = 值:修改特定下标索引值。
    • .insert(下标, 元素):在指定的下标位置插入指定的位置。
    • .append(元素):将指定的元素加入到列表尾部。
    • .extend(其他数据容器):在尾部追加一批元素
    • 删除元素
      • del 列表[下标]
      • .pop(下标):可以得到删除的元素。
      • .remove(元素):删除某元素在列表中的第一个匹配项(从前向后)。
    • .clear():清空列表。
    • count(元素):统计某元素在列表中的数量。
    • len(列表):统计列表中全部的元素数量。

    元组tuple

    元组:一旦定义完成,就不可修改。当我们需要在程序内封装数据,又不希望封装的数据被篡改,使用元组就很合适。

    变量名称 = (元素, 元素, ...)
    # 定义空元组
    变量名称 = ()
    变量名称 = tuple()
    
    • 1
    • 2
    • 3
    • 4
    • 元组只有一个数据,这个数据后面要添加逗号
    • 常用方法:.index(元素).count(元素)len(元组)可以用,跟list使用一样。
    • 可以嵌套,如果数据里面有list,则可以修改list的元素。

    字符串str

    • 字符串不能修改。
    • .replace(字符串1, 字符串2):将字符串内的全部:字符串1替换成字符串2。ps:不是修改字符串本身,而是得到一个新的字符串。
    • .split(分割符字符串):按照指定的分隔符字符串,将字符串划分为多个字符串,并存入列表对象中。ps:字符串本身不变,而是得到一个列表对象。
    • .strip():去除前后空格。
    • .strip(字符串):去除前后指定字符串。

    序列的切片

    序列支持切片,切片:从一个序列中,取出一个子序列。

    语法:序列[起始下标:结束下标:步长]表示从序列中,从指定位置开始,依次取出元素,到指定位置结束,得到一个新序列。

    • 起始下标表示从何处开始,可以留空,留空表示从头开始。
    • 结束下标(不含)表示何处结束,可以留空,留空表示截取到结尾。
    • 步长表示依次取元素的间隔,默认是1。步长为负数表示反过来取,ps:起始下标和结束下标也要反向标记。

    集合set

    集合:无重复元素,无序,不支持下标索引访问。

    变量名称 = {元素, 元素, ...}
    变量名称 = set()
    
    • 1
    • 2

    常见操作:

    • .add(元素):添加元素。
    • .remove(元素):移除元素。
    • .pop():随机取出一个元素。
    • .clear():清空集合。
    • 集合1.difference(集合2):取出集合1和集合2的差集(集合1有而集合2没有)。得到的是一个新集合,集合1和集合2不变。
    • 集合1.difference_update(集合2):在集合1中,删除和集合2相同的元素。集合1被修改,集合2不变。
    • 集合1.union(集合2):将集合1和集合2合并成新集合。集合1和集合2都不变。

    字典dict

    变量名称 = {key:value, key:value, ...}
    变量名称 = {}
    变量名称 = dict()
    
    • 1
    • 2
    • 3
    • key和value可以是任意类型,key不可为字典。
    • key不能重复。

    常用操作:

    • 字典[key] = value:如果没有key就是新增键值对,如果有key就是更新value。
    • 字典.pop(key):删除指定key的数据,也可以获取这个value。
    • 字典.clear():清空字典。
    • 字典.keys():获取全部的key。

    Chapter4

    编码技术:翻译规则,记录了如何将内容翻译成二进制,以及如何将二进制翻译回可识别内容。不同的编码,将内容翻译成二进制也是不同的。要使用正确的编码,才能对文件进行正确的读写操作。

    open()

    使用open()函数,可以打开一个已经存在的文件,或者创建一个新文件。语法如下:open(name, mode, encoding)

    • name:要打开的目标文件名的字符串(可以包含文件所在的具体路径)。
    • mode:设置打开文件的模式(访问模式):只读、写入、追加等。
      • r:以只读方式打开文件,文件的指针将会放在文件的开头。
      • w:打开一个文件只用于写入。如果已存在则打开文件,并从头开始编辑,原有内容会被删除。如果不存在,就创建新文件。
      • a:打开一个文件用于追加。如果存在该文件,新的内容将会被写入到已有内容之后。如果不存在,就创建新文件写入。
    • encoding:编码格式(推荐使用utf-8)。ps:encoding的顺序不是第三位,所以不能用位置参数,用关键字参数直接指定

    只要是在同一个程序里调用下面方法,都相当于有个指针一样,会从上一次那开始读取。

    • .read(num):num表示从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取全部数据。
      • 在程序中多次调用read,下一次read会从上一次截取末尾开始截取。
    • .readlines():可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。
    • .readline():一次读取一行内容。
    • for循环读取文件行,临时变量line就记录了文件的一行数据。``for line in 文件对象:`

    关闭

    .close():关闭文件对象。

    • 如果不调用close,同时程序没有停止运行,那么这个文件就会一直被python程序占用。

    with open语法

    with open(name, mode, encoding) as f:
        f.readlines()
    
    • 1
    • 2
    • 通过在with open的语句块中对文件进行操作。
    • 可以在操作完成后自动关闭close文件,避免遗忘掉close方法。

    写 追加写

    .write():文件写入。

    .flush():内容刷新。

    • 直接调用write,内容并非真正写入文件,而是会积攒在程序的内存中,称之为缓存区。
    • 当调用flush的时候,内容才会真正写入文件,这样做是避免频繁的操作硬盘,导致频率下降(攒一堆,一次性写入磁盘)。
    • w:文件不存在就创建文件,存在就会覆盖原来的内容。a:文件不存在就创建文件,存在就会在原来的内容追加新内容。
    • close()内置了flush的功能。

    Chapter5

    异常捕获:

    try:
        可能发生错误的代码
    except(异常类型) as e:
    # 捕获全部的异常 except Exception as e:
        如果出现异常执行的代码
    else:
        没有异常执行的代码
    finally:
        都会执行的代码
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    模块就是一个python文件,里面有类、函数、变量等,我们可以导入模块使用。模块在使用前要先导入,导入的语法是:[from 模块名] import [模块 | 类 | 变量 | 函数 | *] [as 别名]

    • 可以自定义模块,就是正常在一个python文件里写函数,导入该文件即可。
    • if_main_=="_main_"表示只有当程序是直接执行的才会进入if内部,如果是被导入的则if无法进入。

    python包就是一个文件夹,里面包含了多个模块文件。

    Chapter6

    python数据和json数据相互转化:

    import json
    # 准备符合json格式的python数据
    data = [{"name":"wld", "age":20}, {"name":"xz", "age":25}]
    
    # 通过json.dumps把python数据转化成json
    data = json.dumps(data)
    # 通过json.loads把json数据转化成python
    data = json.loads(data)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 在json.dumps后面加上参数ensure_ascii=False表示不按照Ascii码值显示,即显示正常的内容。

    如果想要做出数据可视化效果图,可以借助pyecharts模块来完成。

    基本折线图

    from pyecharts.charts import Line
    from pyecharts.options import TitleOpts, LegendOpts, ToolboxOpts, VisualMapOpts
    # 创建一个折线图对象
    line = Line()
    # 添加x轴的数据
    line.add_xaxis(["中国", "日本", "韩国"])
    # 添加y轴的数据
    line.add_yaxis("GDP", [30, 20, 10])
    
    # 设置全局配置项set_global_opts来设置
    line.set_global_opts(
        title_opts=TitleOpts(title="GDP展示", pos_left="center", pos_bottom="1%"),
        legend_opts=LegendOpts(is_show=True),
        toolbox_opts=ToolboxOpts(is_show=True),
        visualmap_opts=VisualMapOpts(is_show=True)
    )
    
    # 通过render方法,将代码生成为图像
    line.render()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    地图可视化

    from pyecharts.charts import Map
    from pyecharts.options import *
    # 准备地图对象
    map = Map()
    # 准备数据
    data = [
        ("北京", 99),
        ("上海", 139),
        ("四川", 277),
        ("重庆", 439),
        ("厦门", 589)
    ]
    # 添加数据
    map.add("测试地图", data, "china")
    
    # 设置全局选项
    map.set_global_opts(
        visualmap_opts=VisualMapOpts(
            is_show=True,
            is_piecewise=True,
            pieces=[
                {"min": 1, "max": 9, "label": "1-9", "color": "#ccffff"},
                {"min": 10, "max": 199, "label": "10-199", "color": "#ff6666"},
                {"min": 200, "max": 600, "label": "200-600", "color": "#990033"}
            ]
    
        )
    )
    # 绘图
    map.render()
    
    • 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

    动态柱状图

    from pyecharts.charts import Bar
    from pyecharts.options import *
    bar = Bar()
    # 添加x轴
    bar.add_xaxis(["中国", "美国", "英国"])
    # 添加y轴 label_opts=LabelOpts(position="right"):数值标签在右侧显示
    bar.add_yaxis("GDP", [30, 20, 10], label_opts=LabelOpts(position="right"))
    #翻转xy轴
    bar.reversal_axis()
    
    bar.render("基础柱状图.html")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    基础时间线柱状图

    from pyecharts.charts import Bar, Timeline
    from pyecharts.options import *
    from pyecharts.globals import ThemeType
    
    bar1 = Bar()
    bar1.add_xaxis(["中国", "美国", "英国"])
    bar1.add_yaxis("GDP", [30, 20, 10], label_opts=LabelOpts(position="right"))
    bar1.reversal_axis()
    
    bar2 = Bar()
    bar2.add_xaxis(["中国", "美国", "英国"])
    bar2.add_yaxis("GDP", [50, 40, 30], label_opts=LabelOpts(position="right"))
    bar2.reversal_axis()
    
    bar3 = Bar()
    bar3.add_xaxis(["中国", "美国", "英国"])
    bar3.add_yaxis("GDP", [90, 80, 70], label_opts=LabelOpts(position="right"))
    bar3.reversal_axis()
    
    # 构建时间线对象 主题设置
    timeline = Timeline({"theme": ThemeType.LIGHT})
    
    # 在时间线内添加柱状图对象
    timeline.add(bar1, "点1")
    timeline.add(bar2, "点2")
    timeline.add(bar3, "点3")
    
    # 自动播放设置
    timeline.add_schema(
        play_interval=1000,
        is_timeline_show=True,
        is_auto_play=True,
        is_loop_play=True
    )
    
    # 绘图是用时间线对象绘图,而不是bar对象
    timeline.render("基本时间线柱状图.html")
    
    • 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
    • 35
    • 36
    • 37

    列表的sort方法:

    # 扩展列表的sort方法 来对列表进行自定义排序
    
    my_list = [["a", 33], ["b", 77], ["c", 11]]
    
    # 排序 基于带名函数
    # def choose_sort_key(element):
    #     return element[1]
    # my_list.sort(key=choose_sort_key, reverse=True)
    
    # 基于lambda匿名函数
    my_list.sort(key=lambda element: element[1], reverse=True)
    
    print(my_list)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    Chapter7

    在类中定义成员方法和定义函数基本一致,但是仍有区别:def 方法名(self, 形参1, 形参2, ...): 方法体。有一个关键字:self,在成员方法定义的时候必须填写

    • 它表示类对象自身的意思。
    • 当我们使用类对象调用方法,self会自动被python传入。
    • 在方法内部,想要访问类的成员变量,必须使用self。
    • 传参列表必须有,但是使用时可以忽略它。

    python类可以使用:__init__()方法,称之为构造方法。可以实现:

    • 在创建类对象(构造类)的时候,会自动执行。
    • 在创建类对象(构造类)的时候,将传入参数自动传递给_init_方法使用。

    魔术方法

    • __str__:类转换成字符串。
    • __lt__:小于符号比较方法,即可同时完成:小于符号和大于符号2种比较。
    • __le__:可用于<=、>=两种运算符上。
    • __eq__:可用于==上。
      • 直接用==是比较的内存地址,用了__eq__是基于自己写的逻辑来判断类的对象是否相等。

    定义私有成员的方式:私有成员变量(方法),名称以__开头(2个下划线)。

    继承只需要class 类名(父类1, 父类2, ...):类内容体

    • 对于同名的变量,按照优先级来,谁先被继承就用谁的。
    • 在定义函数时,如果什么都不写会报错,写pass即可。
    • 需要的话就复写父类成员,但如果想要调用父类的成员:
      • 使用成员变量:
        • 父类名.成员变量
        • super().成员变量
      • 使用成员方法:
        • 父类名.成员方法(self)
        • super().成员方法()
  • 相关阅读:
    buuctf crypto 【达芬奇密码】解题记录
    125. SAP UI5 进阶 - XML 视图里定义的 UI 控件,运行时实例化的技术细节剖析
    在 .NET MAUI 中如何更好地自定义控件
    改进YOLOv7 | 头部解耦 | 将YOLOX解耦头添加到YOLOv7 | 涨点杀器
    月薪3W,互联网“降本增效”后,这些人开始被疯抢
    go-zero&go web集成gorm实战
    微信小程序关注公众号
    【MATLAB第98期】基于MATLAB的MonteCarlo蒙特卡罗结合kriging克里金代理模型的全局敏感性分析模型(有目标函数)
    常用类面试题总结(一)
    python二级该怎么准备,考前一个月,2023年12月份
  • 原文地址:https://blog.csdn.net/triggerV/article/details/126806716