Python入门

本章介绍了Python的基础知识,包括运算符、字符串拼接、数字精度控制和格式化输出。深入讲解了input语句、布尔类型、if...else...判断、for循环和range函数。接着探讨了函数的定义、参数传递方式,如关键字参数、缺省参数和不定长参数。还详细阐述了数据容器如列表、元组、字符串、集合和字典的操作方法。最后,讲解了文件的读写操作,异常捕获机制,以及编码技术在文件操作中的应用。
部署运行你感兴趣的模型镜像

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:
  • 不要忘记判断条件后的冒号。

for循环:

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

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 返回值
  • 参数可以省略,返回值可以省略,默认是None。
  • 必须先定义再使用。
  • 使用global关键字,可以在函数内部声明变量为全局变量。

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

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

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

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

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

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

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

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

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

列表list

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

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

常用方法:

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

元组tuple

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

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

字符串str

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

序列的切片

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

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

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

集合set

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

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

常见操作:

  • .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()
  • 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()
  • 通过在with open的语句块中对文件进行操作。
  • 可以在操作完成后自动关闭close文件,避免遗忘掉close方法。

写 追加写

.write():文件写入。

.flush():内容刷新。

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

Chapter5

异常捕获:

try:
    可能发生错误的代码
except(异常类型) as e:
# 捕获全部的异常 except Exception as e:
    如果出现异常执行的代码
else:
    没有异常执行的代码
finally:
    都会执行的代码

模块就是一个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)
  • 在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()

地图可视化

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()

动态柱状图

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")

基础时间线柱状图

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")

列表的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)

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().成员方法()

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值