Python基础知识点梳理

2023-11-20

本文简要梳理了Python基础知识的大体框架。


一、变量和赋值

变量是编程语言中能存储数据的抽象概念,它可以存储各种数据。变量名只能由字母、数字、下划线组成,需要注意的是:

  • 不能以数字开头;
  • 不能包含空格;
  • 区分大小写,变量A和变量a是不同的。

赋值语句用于将数据赋值给变量。Python支持多种格式的赋值语句:

  • 简单赋值用于为一个变量赋值。
  • 序列赋值可以一次性为多个变量赋值。
  • 多目标赋值指用连续的多个等号将同一个数据赋值给多个变量。
  • 增强赋值指将运算符与赋值相结合的赋值语句。

代码如下(示例):

# 简单赋值
num = 100 

# 序列赋值
x, y = 1, 2                     # 1, 2
(x2, y2) = 10, 20               # 10, 20
[x3, y3] = 'ab'                 # a, b
((x4, y4), z4) = 'ab', 'cd'     # a, b, cd
x5, *y5 = 'abcd'                # a, ['b', 'c', 'd']
*x6, y6 = [1, 2, 3, 'abc']      # [1, 2, 3], abc

# 多目标赋值
a = b = c = 10      # 将10 分别赋值给变量 a、b、c

# 增强赋值 
i = 10
i += 10  # 20

二、分支和循环

1.分支结构

Python中用 if 语句实现分支结构。

代码如下(示例):

# 分支结构 

# 输入一个成绩,判断它的优良中差等级
score = int(input('请输入一个成绩:'))
if score < 60:
    print('差')
elif score < 70:
    print('中')
elif score < 80:
    print('良')
else:
    print('优')

    
# 输入两个数,输出最大的值
num1 = int(input('请输入第1个数值:'))
num2 = int(input('请输入第2个数值:'))
maxNum = num1 if num1 > num2 else num2
print(maxNum)

2.循环结构

Python中循环语句有两种格式:

  • while语句
  • for语句

循环中的break和contiune

  • break:结束当前循环。
  • continue:结束当前循环进入下一个循环。

代码如下(示例):

##while语句
# 使用 while 计算1+2+...+100的结果
result = 0
i = 1
while i <= 100:
    result += i
    i += 1
    print(f'结果为:{result}')
else:  # 不管while条件是否满足,都会执行,可以省略
    print('执行完毕')


##for语句
# 循环输出1..10之间的所有偶数,如果数值等于6就跳过
for i in range(2, 11, 2):
    if i == 6:
        # break
        continue
    print(i, end='\t')
else:
    print("循环执行完毕!")

三、数据结构

Python中有两类数据类型:

  • 简单数据类型:数字和字符串。
  • 组合数据类型:
    • 集合(set) 是Python 2.4引入的一种类型,集合常量用大括号表示,例如,{1,2,3}。集合中的元素具有唯一、无序和不可改变等特点,集合支持数学理论中的各种集合运算。
    • 列表和元组都属于序列,序列支持索引、分片和合并等操作。字符串属于特殊的不可变序列。
    • 元组可以看作是不可变的列表,它的使用与字符串类似。元组常量用圆括号表示,例如:(1,2)('a','b','c'),也可以使用tuple()方法来创建元组对象。
    • 字典是一种无序的映射集合,包含一系列的键:值对。字典常量用大括号表示,例如,{'name':'John','age':25,'sex':'male'},也可以使用dict()函数来创建。
##集合数据结构示例
# 重复值的集合声明
set1 = {1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4}
print(len(set1))  # 求长度:计算集合中元素的个数  4 
print('a' in set1)  # 判断包含:判断集合是否包括数据  True

# Python3.0引入的集合解析构造方法
set2 = {item for item in [1, 2, 3, 4]}
# 集合对象支持求长度、判断包含、求差集、并集、交集、对称差和比较等运算
print(set1 - set2)  # 求差集:用属于set1但不属于set2的元素创建新集合  {2, 'bc'}
print(set1 | set2)  # 求并集:用set1、set2两个集合中的所有元素创建新集合  {1, 2, 5, 'a', 'bc'}
print(set1 & set2)  # 求交集:用同时属于set1和set2的元素创建新集合  {1, 'a'}


##列表数据结构示例
# 列表切片操作
list1 = list(range(10)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list1[2:5])      # [2, 3, 4]
print(list1[2:])       # [2, 3, 4, 5, 6, 7, 8, 9]
print(list1[:5])       # [0, 1, 2, 3, 4]
print(list1[3:10:2])   # [3, 5, 7, 9]
print(list1[10:3:-2])  # [9, 7, 5]

# 列表常用方法
list2 = [1, 3, 3, 7, 5]
list2.append(5)  # 追加
list2.remove(7)  # 移除指定元素
list2.pop(0)  # 按索引位置删除
list2.sort()  # 升序排序
list2.reverse()  # 反转

# 列表解析(推导式): 列表解析与循环的概念紧密相关,使用列表解析来for代替循环操作。列表解析的基本结构:表达式 for 变量 in 可迭代对象 if 表达式
print([x + 10 for x in range(10) if x % 2 == 0])  # 带条件的列表解析, 用if筛选偶数  [10, 12, 14, 16, 18] 
print([x + y for x in (10, 20) if x > 10 for y in (1, 2, 3) if y % 2 == 1])  # 重解析嵌套, 分别使用if执行筛选 [21, 23]



##元组数据结构示例
# 创建元组
print((2,))  # 包含一个对象的元组,不能缺少逗号  (2,)
print(tuple('abcde'))  # 参数为可迭代对象  ('a', 'b', 'c', 'd', 'e')
print(tuple(item * 2 for item in range(5)))  # 使用解析结构创建元组  (0, 2, 4, 6, 8)

# 元组常用方法
print(len((1, 2, 3, 4, 5)))  # 求长度
print((1, 2) * 3)   # 重复
print(t3.count(1))  # 统计指定值出现的次数,如果不包含指定值时,返回0
print(t3.index(2))  # 查找指定范围内元素所在的索引

# 索引和分片
t2 = tuple(range(10))  # (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
print(t2[1])           # 1
print(t2[-1])          # 9
print(t2[2:5])         # (2, 3, 4)
print(t2[1:7:2])       # (1, 3, 5)



##字典数据结构示例
# 创建字典
dict1 = {'name': 'John', 'age': 25, 'sex': 'male'}  # 字典常量
dict2 = {'book': {'Python编程': 100, 'C++入门': 99}}  # 嵌套字典
dict3 = dict(name='Tom', age=25)  # 使用赋值格式的“键:值”对创建字典 {'name': 'Tom', 'age': 25}

# 字典常用方法
dict1['name'] = 'tom'  # 通过索引修改映射值
dict1.update(name='jim')  # update()方法用于为字典添加键值对,若字典已存在同名的键,则该键的映射值被覆盖
print(dict1['name'])  # 根据key获取value
print(dict1.get('name', 'default'))  # 返回键 key映射的值, 如果键key不存在,返回默认值
print(dict1.pop('name', 'default'))  # 从字典中删除键值对,并返回被删除的映射值。若键不存在,则返回default
print(dict1.items())  # 返回键值对视图,视图对象支持迭代操作
print(dict1.keys())   # 返回字典中所有键的视图
print(dict1.values())  # 返回字典中全部值的视图


四、函数

函数是完成特定任务的语句集合,调用函数会执行其它包含的语句。函数的返回值通常是函数的计算结果,调用函数是使用的参数不同,可获得不同的返回值。Python利用函数实现代码复用

在函数定义的参数表里面的参数称为形式参数,简称形参。调用函数时,参数表中提供的参数称为实际参数,简称实参。Python的函数参数非常灵活,可以根据需求去选择参数个数,但是需要注意的是即使没有参数,括号也不可省略。

  • 参数赋值传递:调用函数时会按参数的先后顺序,依次将实参传递给形参。Python允许以形参赋值的方式,将实参传递给指定形参。
  • 默认值的可选参数:在定义函数时,可以为参数设置默认值。调用函数时,如果未提供实参,则形参取默认值使用。注意,带默认值的参数为可选参数,在定义函数时,应放在参数表的末尾。
  • 接受任意个数的参数: 在定义函数时,可接受任意个数的参数,如果在参数名前面使用一个星号*,表示形参是一个元组,如果是两个星号**,表示形参是一个字典

代码如下(示例):

##函数定义
def function(num1, num2, other=-1, *args, **kwargs):
    print(num1, num2, other, args, kwargs)  # 1 2 3 (4, 5) {'name': 'Tom', 'age': 18}

#函数调用
function(1, 2, 3, 4, 5, name='Tom', age=18)

lambda函数(匿名函数)

lambda函数也称表达式函数,用于定义匿名函数,可将lambda函数赋值给变量,通过变量调用函数。lambda表达式基于数学中的 λ演算 得名,它主要的作用就是简化函数代码,与def不同,lambda只能用一行表示。

lambda函数定义的基本语法为:lambda 参数表:表达式

五、面向对象

面向对象(Object Oriented)是软件开发方法,是一种程序设计规范,是一种对现实世界理解和抽象的方法。在面向对象编程思想中,一切事物皆对象,通过面向对象的方式,将现实世界的事物抽象成对象。

用来描述具有相同属性和方法的对象的集合。Python的类使用class语句来定义,类通常包含一系列的赋值语句和函数定义,用来描述某一类事物。赋值语句定义类的属性,函数定义类的方法

代码如下(示例):

##定义类
class ClassName:
    """定义类的语法"""
    class_property = 0  # 没有使用self,并且写在方法外,这是类属性,它是共享的

    def __init__(self, prop_val):  # 初始化方法,即构造方法
        temporary_val = -1  # 写在方法里,但是没有self,这是一个局部变量
        self.instance_property = prop_val  # 有self,这里创建了一个实例属性,只需要赋值就可以创建
        ClassName.class_property += 1  # 操作类属性需要写类名

    def instance_method(self, prop_val):
        """
        实例方法,与前面的学习过的函数几乎一样,区别在于第一个参数必须是 self,隐式传入,实例自己
        :param prop_val:
        :return:
        """
        print(prop_val)
        pass

    @staticmethod  # 静态方法,类名调用
    def static_method():
        pass

    @classmethod  # 类方法,类名调用
    def class_method(cls):
        pass

1、封装

封装(Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。要访问该类的代码和数据,必须通过严格的接口控制。封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。

封装的优点:

  • 良好的封装能够减少耦合。
  • 类内部的结构可以自由修改。
  • 可以对成员变量进行更精确的控制。
  • 隐藏信息,实现细节。

2、继承

继承可实现新类获取现有类的属性和方法。新类称作子类或派生类被继承的类称作父类、基类或超类。在子类中可以定义新的属性和方法,从而完成对父类的扩展。

class Person:

    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex

    def show_info(self):
        print(f"name: {self.name}, age:{self.age}, sex:{self.sex}")


class Student(Person):  # 这里加了一个括号表明父类是 Person
    def __init__(self, name, age, sex, stu_id):
        super().__init__(name, age, sex)  # super 就是父类,调用父类的 初始化方法初始化参数
        self.stu_id = stu_id  # 子类特性

    def show_info(self):  # 重写父类方法
        print(f"name: {self.name}, age:{self.age}, sex:{self.sex}, stu_id:{self.stu_id}")


stu = Student("Tom", 18, "male", 10010)
stu.show_info()

六、模块和包

模块是一个包含变量、函数或类的程序文件,模块中也可包含其他的各种Python语句。大型系统往往将系统功能划分为模块来实现,或者将常用功能集中在一个或多个模块文件中,然后在顶层的主模块文件或其他文件中导入并使用模块。Python也提供了大量内置模块,并可集成各种扩展模块

以模块方式组织代码能够方便地管理和维护,但是随着项目复杂度进一步升级,需要将项目不同功能代码放入把不同的文件夹中,这些文件夹可以相互引用,这就是的概念。

Python模块的导入方式:

  • 采用import 模块名的方式,导入模块中的所有函数,调用的时候需要通过模块名.函数的形式调用。也可以在模块名后面使用as关键字给模块重命名,这种方式主要用来避免模块之间函数名冲突。
  • 采用from 模块名 import 函数名的方式,导入模块中指定的函数,调用的时候,函数名前不需要加上模块名。也可以把函数名换成*号,导入所有函数。
  • 采用from 模块名 import *的方式,导入模块所有函数。

Python包从本质上来说就是一个文件夹,与一般的文件夹不同之处在于包中必须包含一个名为__init__.py的文件。__init__.py文件可以是一个空文件,仅用于表示该文件夹是一个包。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python基础知识点梳理 的相关文章

  • 从 Django 调用 Postgres SQL 存储过程

    我正在开发一个带有 Postgresql 数据库的 Django 项目 我编写了一个可以在 Postgres 上完美运行的存储过程 现在我想从 Django 1 5 调用该存储过程 我已经编写了代码 但它提示错误 CREATE FUNCTI
  • 上传时的 Google Drive API——这些额外的空行从何而来?

    总结一下该程序 我从我的 Google 云端硬盘下载一个文件 然后在本地计算机中打开并读取一个文件 file a txt 然后在我的计算机中打开另一个文件 file b txt 处于附加模式 并且在使用这个新的 file b 更新我的 Go
  • 检测到通过 ChromeDriver 启动的 Chrome 浏览器

    我正在尝试在 python 中使用 selenium chromedriver 来访问 www mouser co uk 网站 然而 从第一次拍摄开始 它就被检测为机器人 有人对此有解释吗 此后我使用的代码 options Options
  • 将 transaction.commit_manually() 升级到 Django > 1.6

    我继承了为 Django 1 4 编写的应用程序的一些代码 我们需要更新代码库以使用 Django 1 7 并最终更新到 1 8 作为下一个长期支持版本 在一些地方它使用旧风格 transaction commit manually and
  • 如何使用 colorchecker 在 opencv 中进行颜色校准?

    我有数码相机获取的色彩检查器图像 我如何使用它来使用 opencv 校准图像 按照以下颜色检查器图像操作 您是想问如何进行颜色校准或如何使用 OpenCV 进行校准 为了进行颜色校准 您可以使用校准板的最后一行 灰色调 以下是您应该逐步进行
  • NumPy linalg.eig

    我有这个烦人的问题 但我还没有弄清楚 我有一个矩阵 我想找到特征向量 所以我写 val vec np linalg eig mymatrix 然后我得到了 vec 我的问题是 当我小组中的其他人对相同的矩阵 mymatrix 做同样的事情时
  • 在 python 3 中使用子进程

    我使用 subprocess 模块在 python 3 中运行 shell 命令 这是我的代码 import subprocess filename somename py in practical i m using a real fil
  • 从 Python 下载/安装 Windows 更新

    我正在编写一个脚本来自动安装 Windows 更新 我可以将其部署在多台计算机上 这样我就不必担心手动更新它们 我想用 Python 编写这个 但找不到任何关于如何完成此操作的信息 我需要知道如何搜索更新 下载更新并从 python 脚本安
  • Pyqt-如何因另一个组合框数据而更改组合框数据?

    我有一个表 有 4 列 这 4 列中的两列是关于功能的 一个是特征 另一个是子特征 在每一列中 所有单元格都有组合框 我可以在这些单元格中打开txt 我想 当我选择电影院作为功能时 我只想看到子功能组合框中的电影名称 而不是我的 数据 中的
  • 更改 x 轴比例

    我使用 Matlab 创建了这个图 使用 matplotlib x 轴绘制大数字 例如 100000 200000 300000 我想要 1 2 3 和 10 5 之类的值来指示它实际上是 100000 200000 300000 有没有一
  • Pandas:如何将数据框插入 Clickhouse

    我正在尝试将 Pandas 数据框插入 Clickhouse 这是我的代码 import pandas import sqlalchemy as sa uri clickhouse default localhost default ch
  • Alembic:如何迁移模型中的自定义类型?

    My User模型是 class User UserMixin db Model tablename users noinspection PyShadowingBuiltins uuid Column uuid GUID default
  • 对使用 importlib.util 导入的对象进行酸洗

    我在使用Python的pickle时遇到了一个问题 我需要通过将文件路径提供给 importlib util 来加载一些 Python 模块 如下所示 import importlib util spec importlib util sp
  • 在 Spyder 的变量资源管理器中查看局部变量

    我是 python 新手 正在使用 Spyder 的 IDE 我欣赏它的一项功能是它的变量资源管理器 然而 根据一些研究 我发现它只显示全局变量 我找到的解决方法是使用检查模块 import inspect local vars def m
  • 使用 pybtex 将 bibtex 转换为格式化的 HTML 参考书目,例如哈佛风格

    我正在使用 Django 并将 bibtex 存储在我的模型中 并且希望能够以格式化 HTML 字符串的形式向我的视图传递引用 使其看起来像哈佛引用样式 使用中描述的方法Pybtex 无法识别 bibtex 条目 https stackov
  • 使用 NLP 进行地址分割

    我目前正在开发一个项目 该项目应识别地址的每个部分 例如来自 str Jack London 121 Corvallis ARAD ap 1603 973130 输出应如下所示 street name Jack London no 121
  • Flask 应用程序的测试覆盖率不起作用

    您好 想在终端的 Flask 应用程序中测试 删除路由 我可以看到测试已经过去 它说 test user delete test app LayoutTestCase ok 但是当我打开封面时 它仍然是红色的 这意味着没有覆盖它 请有人向我
  • falcon,AttributeError:“API”对象没有属性“create”

    我正在尝试测试我的猎鹰路线 但测试总是失败 而且看起来我把所有事情都做对了 my app py import falcon from resources static import StaticResource api falcon API
  • 操作错误:(sqlite3.OperationalError) SQL 变量太多,同时将 SQL 与数据帧一起使用

    我有一个熊猫数据框 如下所示 activity User Id 0 VIEWED MOVIE 158d292ec18a49 1 VIEWED MOVIE 158d292ec18a49 2 VIEWED MOVIE 158d292ec18a4
  • python 中的 after() 与 update()

    我是 python 新手 开始使用 tkinter 作为画布 到目前为止 我使用 update 来更新我的画布 但还有一个 after 方法 谁能给我解释一下这个函数 请举个例子 两者之间有什么区别 root after integer c

随机推荐

  • 【Neo4j】第 3 章:使用 Pure Cypher 为您的业务赋能

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • A Gentle Introduction to Graph Neural Networks(一篇GNN的博客)

    图神经网络 读A Gentle Introduction to Graph Neural Networks笔记 1 直观上的理解 layer后面的标号代表是第几层 要注意每一层都是由比它更深的层相互影响的 比如layer2他可能只有laye
  • 关于专栏基于WordPress的手把手建站教程

    如何建立一个自己的个人博客 建站需要什么基础知识 建站的过程是什么 其实建站真的很容易 WordPress已经很成熟了 基本不需要什么基础知识 如何建站这也是我写的比较用心的一个教程 因此准备写一个手把手教你建站系列教程 本教程基于系统Ub
  • mac 和华为手机互传文件

    参考博客 华为手机传输文件到Mac电脑上 简书 应用场景 1 把资料从手机上的数据备份到电脑上或反向操作 2 需要把资料传给朋友的时候 有两种方式 第一种是通过数据线 传输速度快 但是需要安装软件和使用数据线 具体流程如下 1 先准备一个双
  • 异常检测主要方法总结

    最近对预测及异常检测进行了一些研究和学习 把所学东西做一个汇总整理 欢迎交流拍砖 侵权删 目录 一 时间序列概念 二 时间序列异常检测 三 时序类型 四 异常类型 4 1 点异常 4 2 上下文异常 4 3 集合异常 五 重要概念 5 1
  • 人脸识别趟坑历程

    1 人脸识别概述 人脸识别 是基于人的脸部特征信息进行身份识别的一种生物识别技术 用摄像机或摄像头采集含有人脸的图像或视频流 并自动在图像中检测和跟踪人脸 进而对检测到的人脸进行脸部的一系列相关技术 其中技术包括图像采集 特征定位 身份的确
  • jmeter3.3调用数据库写存储过程注意点

    1 数据库配置页面 2 创建存储过程要保证库里没有同名 本来这句drop语句放在创建存储过程里面的 发现会导致不会执行存储过程 一定要分开写 query type选择 update statement 3 创建存储过程 variable n
  • 5-6)视图与索引

    文章目录 视图 一 视图概述 1 视图的定义 2 视图的分类 3 视图的优缺 二 创建视图 使用T SQL 语句创建视图 创建视图注意的问题 三 使用视图 视图 视图是一种虚拟的数据表 Virtual table 来源于数据表和其他数据 一
  • 实验一:交换机的配置与管理-计算机网络

    交换机的配置与管理 技术原理 交换机的管理方式基本分为两种 带内管理和带外管理 通过交换机的Console端口管理交换机属于带外管理 这种管理方式不占用交换机的网络端口 第一次配置交换机必须利用Console端口进行配置 交换机的命令行操作
  • Python爬虫学习之数据提取(XPath)

    Python爬虫学习之数据提取XPath 概述 常用规则 运算符及介绍 准备工作 实例 文本获取 属性获取 属性值匹配 属性多值匹配 多属性匹配 按序选择 概述 XPath的全称是XML Path Language 即XML路径语言 用来在
  • url参数加密_百度逆推link?url=xxx加密算法“反推技术秒收"

    熟悉百度的站长都知道 凡是被百度搜索引擎收录的网站链接 都会生成一个以baidu开头的多参数跳转链接 而所谓 百度反推技术 的原理就是把百度生成的这个链接地址换成自己想要被收录的页面链接就可以了 然后再进行百度快照的投诉 就可以达到秒来蜘蛛
  • SQL:exec sp_executesql 用法

    這種是無效的過程 declare sql nvarchar 500 where nvarchar 500 i nvarchar 64 p nvarchar 50 id int set id 5 set sql select p AreaCo
  • 机器学习系列(8):人脸识别基本原理及Python实现

    众所周知 人脸识别和人脸验证已经得到大量应用 那么它们之间有什么异同呢 又是如何实现的呢 这里是机器学习系列第八篇 带你揭开它们神秘的面纱 若图片挂了 可移步 https mp weixin qq com s biz MzU4NTY1NDM
  • STC仿真失败

    原因就是购买的下载工具不适合在烧写STC8H3K64S仿真固件后再将该下载工具作为USB转串口工具连接PC与目标板 推测是接入仿真时会重启目标板 不打算细究 换一个普通串口就好了
  • VS编译.cu文件源文件无法打开matrix.h和mex.h问题

    配置好cu和VS相关库文件后CUDA程序仍然报错 无法打开matrix h和mex h 解决办法 1 这两个头文件是matlab中的 可能无法直接在VS中调用 可以通过添加外部依赖项的方法将matlab中的头文件的文件路径添加进来 VS中按
  • 机器学习:聚类算法API初步使用

    学习目标 知道聚类算法API的使用 1 api介绍 sklearn cluster KMeans n clusters 8 参数 n clusters 开始的聚类中心数量 整型 缺省值 8 生成的聚类数 即产生的质心 centroids 数
  • SQL批量处理+JDBC操作大数据及工具类的封装

    SQL批量处理 JDBC操作大数据及工具类的封装 一 批处理 批量处理sql语句 在jdbc的url中添加rewriteBatchedStatements true参数 可以提高批处理执行效率 在我们进行大批量数据操作的时候 需要采用批处理
  • 不使用80,443,端口,域名还需要备案吗?域名没有备案应该怎么选服务器。

    在互联网日益发达的今天 越来越多的个人 企业 公司涌入其中 在服务器 域名 大量供需的情况下身为一个小白应该要注意什么呢 首先要明确你所需要的服务器是国内大陆服务器 如 杭州 扬州 镇江 宁波等 还是海外服务器 如 香港 美国 日本 韩国等
  • uniapp写h5如何封装一个图片上传预览并且有进度条的组件

    开发背景 首先项目是用uniapp写的h5项目 要求能上传 预览 和进度条展示 还要求总览的时候用缩略图 点开预览要原图 不得不吐槽一下 开发环境 uniapp 阿里云存储 先看截图效果 好了直接上代码 photo picker vue
  • Python基础知识点梳理

    本文简要梳理了Python基础知识的大体框架 目录 一 变量和赋值 二 分支和循环 1 分支结构 2 循环结构 三 数据结构 四 函数 lambda函数 匿名函数 五 面向对象 1 封装 2 继承 六 模块和包 一 变量和赋值 变量是编程语