Python3语法笔记(前篇)

news2024/11/24 18:48:22

文章目录

  • 前言
  • 基础杂项
  • 变量和数据
    • 变量与运算
    • 数值
    • 字符串
    • 列表(list)、元组(tuple)和range
    • 序列类型(sequence types)和切片(slicing)
    • 集合(set)和字典(dict)
    • 引用、浅拷贝、深拷贝
  • 流程控制语句
    • if / else 和 match / case
    • while 和 for in
    • 循环中的 break、continue 和 else
    • pass
  • 后记

前言

这篇文章主要用于记录Python3相关语法,方便自己查阅使用。

Python3基础使用相关内容可以参考下面文章:
https://blog.csdn.net/Naisu_kun/article/details/129986780

这篇文章主要参考自官方文档中 教程(Tutorial) 部分:
英文文档:https://docs.python.org/3/
中文文档:https://docs.python.org/zh-cn/3/

基础杂项

注释

# 这是单行注释(#号及后面内容为注释)

"""
这是多行注释
使用 """ """ 或者 ''' ''' 包围的是多行注释
多行注释根据所在的位置不同也可以成为文档注释、函数注释、多行字符串等
"""

缩进
Python不像大多数语言那样使用 { } 表示代码块,而使用缩进方式。可以使用空格或者tab缩进(推荐使用 4个空格 方式,非tab),同一代码块中同一层级代码需要使用相同的缩进格式:
在这里插入图片描述

下划线
Python中有很多下划线开头或结尾的变量或函数,这其中有的是属于语言内置内容,有些属于编码规范,常见的一些形式如下:

__xx__  # 通常这是Python内置的魔法函数(dunders)

_xx     # 通常表示仅供内部使用,相当于很多语言中的私有成员(private)
        # 需要注意的是上面的私有只是一种建议,并非强制(有的IDE可能会把它看作强制私有)
        
__xx    # 通常用来表示类的私有成员,防止被子类改写
        # 这个其实在执行中会触发name mangling规则,变成_classname__xx的形式,从而防止被子类改写
        
xx_     # 如果变量名和Python关键词冲突可以使用这个方式

此外在解释器中 _ 可以用来表示上一条表达式的结果;在表示数值时可以用来提高可读性(比如 1_000_000 )。

PEP 8
PEP 8 是官方主要推荐的Python代码编写样式指南(编码规范),具体内容可以参考下面链接:
https://peps.python.org/pep-0008/

其中大多数内容主要时为了方便阅读代码而设计的,比如缩进、空格、空行等。这里提一下该规范中推荐的单行最大长度为79个字符,当长度超出时可以用常见的 \ 符号来换行,当然该规范中推荐使用 ( ) 包围同一行的内容,而不是使用 \

print 和 input
print(*objects, sep=' ', end='\n', file=None, flush=False) 是Python3中一个内置函数,用于打印输出信息。 *objects 是需要打印的内容,可以有多个; sep 是多个内容间的分隔内容, end 是打印结尾添加的内容,默认为换行符号; file 表示打印输出到指定文件,不指定则输出到标准输出; flush 表示是否强制刷新。
在这里插入图片描述
input(prompt) 也是内置函数,用于接收用户输入信息, prompt 是可选内容,是提示信息。

变量和数据

变量与运算

Python中变量不需要任何关键词进行声明,直接使用 name = value 方式声明加赋值即可,之后就可以直接使用变量名来使用了。变量声明赋值后也可以再次使用 name = value 方式进行赋值。

编程最终是处理数据,主要就是各种运算等。Python3中常见的有下面一些运算符(优先级从高到低):

运算符描述
(expressions...), [expressions...], {key: value...}, {expressions...}绑定或加圆括号的表达式,列表显示,字典显示,集合显示
x[index], x[index:index], x(arguments...), x.attribute抽取,切片,调用,属性引用
await xawait 表达式
**乘方
+x, -x, ~x正,负,按位非 NOT
*, @, /, //, %乘,矩阵乘,除,整除,取余
+, -加和减
<<, >>移位
&按位与 AND
^按位异或 XOR
|按位或 OR
in, not in, is, is not, <, <=, >, >=, !=, ==比较运算,包括成员检测和标识号检测
not x布尔逻辑非 NOT
and布尔逻辑与 AND
or布尔逻辑或 OR
[on_true] if [expression] else [on_false]条件表达式
lambdalambda 表达式
:=赋值表达式

除了上面这些,各种 += -= *= /= ... 这种符合的赋值运算符也是支持的。

数值

数值类型是所有编程语言中最基本的数据类型,Python因为是弱类型的语言,所以一般不太用关系具体的数值类型是什么,当然硬要说的话目前Python3主要分为 int float complex
在这里插入图片描述
各个类型默认的构造方法可以用作类型转换。不同的类型有不同类型细节操作上特有的优势。

Python3中布尔类型在运算中会被视作整形来处理, True = 1 False = 0
在这里插入图片描述

字符串

Python3中字符串和其它语言差不多,只有少数一些自己特有的东西:

str1 = "Hello" # 使用 " " 或者 ' ' 包围的内容是字符串
str2 = 'Naisu\n' # 这里的 \ 是转义符
str3 = r'123\n456\n789' # 这里前面的 r 表示后面的是原始字符串,会忽略其中的转义操作
# 使用 """ """ 或者 ''' ''' 包围的是多行字符串
# 下面的 \ 用于忽略多行字符转中的该符号所在行的换行(注意其后不能有空格)
str4 = """\
Usage: thingy [OPTIONS]
     -h                        Display this usage message
     -H hostname               Hostname to connect to
"""
print(str1, str2)
print(str1 + str2) # 可以使用 + 操作来连接字符串
print(str1 * 3) # 可以使用 * 操作来倍乘
print(str3)
print(str4)

在这里插入图片描述
字符串有非常多的方法可用,可以用来进行大小写转化、查找、替换、分割、拼接等工作,详细的内容可以参考官方文档中 标准库(Standard Library)部分。

列表(list)、元组(tuple)和range

Python中的列表有点像其它语言中是数组(当然Python中也可以使用内置的 array 模块来支持真正的数组功能),但是列表中可以保存不同类型的数据,只不过通常列表中都是保存同一种类型的数据。

相比传统的数组来说 Python中的列表 操作山更加灵活:

arr1 = [0, 1, 2, 3] # 创建列表
# arr1 = list([0, 1, 2, 3]) # 也可以使用构造方法来创建,构造方法可以将其它类型转换成列表
arr2 = arr1 * 3 
arr3 = arr1 + ['A', 'B', 'C']
print(arr1, arr2, arr3)

print(arr3[0], arr3[4], arr3[6])
print(arr3[-3], arr3[-1]) # 使用负数索引获取列表元素

在这里插入图片描述

列表提供了 append extend insert remove pop clear count reverse 等一些方法。和其它语言中的数组类似,列表也经常拿来做堆栈和队列等使用,不过因为Python中列表头部插入或删除元素性能比较差,所以通常使用内置的 collections.deque 来做队列。

Python中的元组和列表很像,元组两端使用 ( ) 包围,元组的一旦创建,元组中的元素就不可修改(可以近似理解为元组是个只读的列表):
在这里插入图片描述

range 也是Python中的一个内置类型,不过通常只用它的构造方法,它的功能是生成一串数字序列:

# class range(stop)
# class range(start, stop[, step])

# range对象没法直接打印,下面转成list来打印
print(list(range(4)))        # 生成 0 1 2 3
print(list(range(3, 8)))     # 生成 3 4 5 6 7
print(list(range(0, 10, 2))) # 生成 0 2 4 6 8

print(range(4)[1]) # range对象也可以用下标取值

# range最常用的功能是用在for循环中
for value in range(4):
    print(value, end=' ')

在这里插入图片描述

序列类型(sequence types)和切片(slicing)

上面出现的字符串、列表、元组这些都属于序列类型。序列类型简单理解就是里面的元素是按照一定的顺序排列的,可以使用 [index] 来获取其中元素。字符串和元组属于不可变序列类型,创建后不可修改;列表属于可变序列类型,创建后可以修改其中内容。

序列类型一般都支持以下操作:

运算功能备注
x in sx not in s判断 s 中是否有值为 x 的项
s + ts * n n * ss 与 t 相拼接 和 s 与自身进行 n 次拼接
s[i]s[i] = x获取某项 和 给某项赋值只有可变序列能赋值
s[i:j]s[i:j] = t获取 s 从 i 到 j 的切片 和 给替换该切片段只有可变序列能替换
s[i:j:k]s[i:j:k] = t获取 s 从 i 到 j 步长为 k 的切片 和 给替换该切片段只有可变序列能替换
del s[i:j]del s[i:j:k]删除 s 中切片段可变序列
len(s)获取 s 长度
min(s)max(s)获取 s 中最小项 和 最大项
s.index(x[, i[, j]])x 在 s 中首次出现项的索引号
(索引号在 i 或其后且在 j 之前)
s.count(x)x 在 s 中出现的总次数
s.append(x)将 x 添加到序列的末尾可变序列
s.clear()从 s 中移除所有项可变序列
s.copy()创建 s 的浅拷贝可变序列
s.extend(t)s += t用 t 的内容扩展 s可变序列
s *= n使用 s 的内容重复 n 次来对其进行更新可变序列
s.insert(i, x)在由 i 给出的索引位置将 x 插入 s可变序列
s.pop()s.pop(i)提取在 i 位置上的项,并将其从 s 中移除
默认 i = -1 ,相当于移除最后一项
可变序列
s.remove(x)删除 s 中第一个 s[i] 等于 x 的项目可变序列
s.reverse()就地将列表中的元素逆序可变序列

上面表格中多次出现了切片,切片是序列类型中非常常用的一个操作。切片的功能是获取序列中的一部分内容的引用,对于可变序列的切片还可以通过切片来修改原序列。

list1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
ls1 = list1[2:4]   # 获得list1中序号 2~3 的切片
ls2 = list1[:3]    # 获得list1中序号 开头~2 的切片
ls3 = list1[6:]    # 获得list1中序号 6~结尾 的切片
ls4 = list1[-4:-1] # 获得list1中序号 -4~-1 的切片
ls5 = list1[-2:]   # 获得list1中序号 -2~结尾 的切片
ls6 = list1[2:9:3] # 获得list1中序号 2~8中步进为3 的切片
print(ls1, ls2, ls3, ls4, ls5, ls6)

在这里插入图片描述

集合(set)和字典(dict)

Python中的集合是由不重复元素组成的无序容器。基本用法包括成员检测、消除重复元素。集合对象支持合集、交集、差集、对称差分等数学运算。创建集合用 {}set() 函数。

print({2, 2, 3, 3}) # 只会输出{2, 3},重复的元素会自动忽略
s1 = {1, 2, 3, 4}
s2 = {3, 4, 5}
print(s1 | s2) # 合并两个集合
print(s1 & s2) # 取两个集合的公共元素,得到新集合
print(s1 - s2) # 取s1中s2没有的元素,得到新集合
print(s1 ^ s2) # 取s1中s2不共有的元素,得到新集合

在这里插入图片描述

注意,创建空集合只能用 set() ,不能用 {}{} 创建的是空字典。

集合有个不可变类型 frozenset

字典和集合一样,也是使用 {} ,只不过字典中保存的是键值对( ket: value ),字典中的键名是字符串,键名不会重复。字典中元素通过 dictname[key] 方式进行访问:

d = {'one': 1, 'two': 2, 'three': 3}
print(d)
print(d['two']) # 通过键名访问字典元素
d["four"] = 4 # 直接添加新元素
print(d)

在这里插入图片描述

需要注意的是集合和字典内部元素排列是无序的,使用时需要特别注意。但是从 Python 3.6 版本开始,字典中元素排列变成有序的了。

引用、浅拷贝、深拷贝

对于数值变量来说如果将一个变量赋值给另一个变量那会直接拷贝其中数据,这时候修改其中一个变量不会引起另一个变量改变:
在这里插入图片描述

列表、元组、集合、字典这种数据类型的变量往往有很多数据,而变量名可以看作是这一堆数据的起始地址,所以这些变量创建副本的时候需要特别注意引用、浅拷贝、深拷贝的问题。

通常直接通过变量名赋值得到的只是原始变量的引用而已,修改其中一个变量中的元素同时也会反映在另一个上,因为底层指向的是同一个对象:
在这里插入图片描述

有时候我们会需要这些对象的副本,而不是引用,这就需要用到浅拷贝和深拷贝了。浅拷贝操作上比较简单,常见的有下面方式:
在这里插入图片描述

浅拷贝的对象中只有数值这种简单类型下使用上一般不会有问题,但是如果对象中又包含了列表、元组、集合、字典这种类型的话就会有问题出现了:
在这里插入图片描述

可以看到如果原始对象中有可变类型的引用的话使用浅拷贝可能出现意料之外的情况了。需要特别注意。因为这个问题,所以还有一个深拷贝的概念。深拷贝简单来说就是把所有内容都生成一份副本,这些相互之间就不会有影响了。比较常用的深拷贝方式是使用 copy.deepcopy() 函数:
在这里插入图片描述

因为引用和浅深拷贝这些问题存在,所以在创建多维列表等的时候需要特别注意:

list1 = [[0] *] *# 错误的方法,因为后面的 *行 只是对前者进行多次引用

list2 = [[0] *for i in range()] # 正确的方法,当然方法有很多

同样因为这个问题,在函数使用时,如果传递的是可变类型,需要注意在函数内部修改该参数中的元素也会改变原始数据,这是引用传递;如果传递是不可变类型则没关系,这是值传递。

流程控制语句

if / else 和 match / case

if / else 是最常见的条件选择语句,用法比较简单:
在这里插入图片描述

Python没有 switch / case 语句,但后来在3.10版本中加入了 match / case 语句,功能上相当于在传统的 switch / case 上加上一点扩展:
在这里插入图片描述

match / case 语句可以部分匹配使用:
在这里插入图片描述

while 和 for in

while 是常见的循环语言,基本用法比较简单:
在这里插入图片描述

Python中的 for in 用来迭代序列类型元素:
在这里插入图片描述

配合 range() 使用可以用来当作常用的 for 循环使用:
在这里插入图片描述

for in 也可以用来遍历集合和字典:
在这里插入图片描述

循环中的 break、continue 和 else

循环语句中可以使用 break 来跳出循环,使用 continue 来跳过本次循环进入下一次循环:
在这里插入图片描述
比较特殊的是Python的循环语句中可以使用 else 来处理循环结束后执行语句(中途使用 break 跳出不算):
在这里插入图片描述

pass

大多数语言中某个分支如果不需要执行任何语句可以空着什么都不写,但是Python中空着就会报错,所以需要使用 pass 来占个位:

if True:
    pass # 这里的pass语句相当于什么都不做,但是不写pass这里会报错

后记

由于篇幅原因这里只是介绍了最基本的变量和流程控制语句相关内容,剩下的最主要用到的还有函数和类等内容,会在接下来的文章中进行记录。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/460324.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PS批量给图片加水印

一、打开PS&#xff0c;导入图片 点击菜单栏-文件-打开-载入一张需要设置文字水印的图片 二、点击菜单栏-窗口-动作&#xff0c;打开Photshop的动作组工作台窗口 先点击新建组图标新建一个组类别&#xff0c;再点击新建动作图标新建一个动作&#xff0c;新建后自动开始录制 …

DASFAA 2023|创邻周研博士分享前沿图数据库观点

4月17-20日&#xff0c;2023年第28届高级应用数据库系统国际会议&#xff08;DASFAA2023&#xff09;在天津成功举行。创邻科技CTO周研博士受邀参会&#xff0c;围绕Galaxybase国产高性能图数据库进行精彩分享。 DASFAA 2023由DASFAA指导委员会&#xff08;DASFAA Steering Co…

CVPR 2023 | 语义分割新范式:点监督遇上隐式场

密集预测(dense prediction)网络是解决诸如语义分割和图像本征分解(intrinsic decomposition)等场景理解问题的基本框架。现有工作[1-2] 通常使用像素级标注作为训练密集预测模型的监督。但是像素级别的密集标注非常昂贵&#xff0c; 对一些任务也无法给出精准的像素标注&#…

Linux-初学者系列3——虚拟光驱使用mount挂载操作

虚拟光驱使用mount挂载操作 一、mount挂载操作1、利用图形将光盘镜像文件&#xff0c;放入光驱设备中2、找到Linux光驱设备&#xff08;青色&#xff09; 1、挂载光盘和分区mount命令语法&#xff1a;示例&#xff1a;卸载&#xff08;注意事项&#xff09; 二、Linux快捷键 一…

Vue(绑定样式、条件渲染、列表渲染)

一、绑定样式 1. class绑定样式名 标签中使用 :class"xxx" xxx可以是字符串&#xff0c;对象&#xff0c;数组 字符串&#xff1a;适用于类名不确定&#xff0c;动态获取 数组&#xff1a;适用于绑定多个样式&#xff0c;个数不确定&#xff0c;字数不确定 对象&…

ProteinGAN扩展蛋白质序列空间

为了更广泛的医学应用&#xff0c;为催化任何所需的化学反应而重新设计蛋白质是蛋白质工程的重点。因此作者开发了ProteinGAN&#xff0c;这是一种基于自注意力的生成对抗网络&#xff0c;能够学习自然蛋白质序列的多样性&#xff0c;并生成功能性蛋白质序列。 来自&#xff1…

基于GEE平台的植被覆盖度(FVC)像元二分法计算

一、植被覆盖度计算方法 植被覆盖度FVC&#xff08;Fractional Vegetation Cover&#xff09;定义为单位面积内绿色植被冠层垂直投影面积所占比例。FVC是衡量地表植被状况的重要指标之一&#xff0c;也是区域生态系统环境变化的重要指示&#xff0c;对水文、生态、区域变化等都…

线程同步方式之一互斥锁

线程同步的4种方式&#xff1a;互斥锁、条件变量、读写锁、信号量 了解概念-临界资源、互斥、临界区、原子性 回想一下在信号量那部分提起过的几个概念&#xff0c;将多个执行流串行安全访问的共享资源称为临界资源&#xff0c;多个执行流中访问临界资源的代码所在的地址空间…

第4章 数据结构之“队列”

队列简介(queue) 1.一个先进先出的数据结构 2.javascript中没有这个数据结构&#xff0c;但是可以使用array实现队列的所有功能。 3.队列常用操作&#xff1a;push&#xff0c;shift&#xff0c;获取队列头部的元素&#xff1a;queue[0] const queue []// 入队&#xff1a; …

网络基础之网络传输基本流程

网络基础 此小节介绍网络基础概念 首先要明确的是 网络是层状结构&#xff01;分层->OP->解耦 网络发展&#xff1a;最早的时候&#xff0c;每台计算机之间是相互独立的。后续发展到网络互联&#xff0c;就是将多台计算机连接在一起&#xff0c;完成数据共享。 协议&…

Jmeter配置元件之csv数据文件配置

一、csv简介 csv是非常通用的一种文件格式&#xff0c;适用于批量导入数据到接口参数中&#xff0c;或者保存测试结果都可以使用csv数据文件(jmeter不仅仅支持这一种读取文件的方式)&#xff0c;csv数据一行即为数据表的一行&#xff0c;多个字段用逗号隔开。 登录接口 …

A+CLUB管理人支持计划第四期 | 香农投资

免责声明 本文内容仅对合格投资者开放&#xff01; 私募基金的合格投资者是指具备相应风险识别能力和风险承担能力&#xff0c;投资于单只私募基金的金额不低于100 万元且符合下列相关标准的单位和个人&#xff1a; &#xff08;一&#xff09;净资产不低于1000 万元的单位&…

Vue3技术7之toRaw与markRaw、customRef、provide与inject、响应式数据的判断、组合式API的优势分析

Vue3技术7 toRaw与markRawtoRawApp.vueDemo.vue markRawDemo.vue 总结 customRefApp.vue总结 provide与inject目录结构App.vueChild.vueSon.vue总结 响应式数据的判断App.vue总结 组合式API的优势配置式的API存在的问题组合式API的优势 toRaw与markRaw toRaw App.vue <te…

HDR tone mapping介绍

文章目录 HDR and tone mapping1.什么是HDR&#xff1f;2.为什么需要HDR&#xff1f;3.hdr文件格式4.tone mapping4.1 aces tone mapping4.2 Fast Bilateral Filtering for the Display of High-Dynamic-Range Images 5 参考 HDR and tone mapping 1.什么是HDR&#xff1f; 就…

nginx + springboot 实现限流

1.spring项目打成jar包后&#xff0c;运行起来 &#xff1a;例如我启动项目 ip 端口号&#xff1a;172.168.0.217:8090 2.修改nginx配置&#xff0c;增加如下配置 nginx 中有两个主要的指令可以用来配置限流&#xff1a;limit_req_zone 和 limit_req upstream myserver{serve…

面试篇:Redis

一、缓存穿透 1、缓存穿透 查询一个不存在的数据&#xff0c;mysql查询不到数据也不会直接写入缓存&#xff0c;就会导致每次请求都查数据库。即&#xff1a;大量请求根本不存在的key 2、查询流程 3、出现原因 业务层误将缓存和库中的数据删除了&#xff0c;也可能是有人恶…

3台服务器+StarVCenter,搭建“超融合云平台”-完美体验-跑100台虚拟机

3台服务器StarVCenter&#xff0c;搭建“超融合云平台”-完美体验-跑100台虚拟机 我们通常讲的“超融合&#xff08;HCI&#xff09;”是一种云平台基础架构方案&#xff0c;它无需专用的存储设备&#xff0c; 每台服务器既承担计算又存储数据&#xff0c; 只需增加服务器&…

SpringMVC-RESTful架构风格

目录 RESTful架构风格 1、RESTful概述 2、RESTful的六大原则 3、RESTful的实现 4、HiddenHttpMethodFilter RESTful风格的CRUD 1、环境搭建 2、功能需求 3、功能&#xff1a;访问首页 4、功能&#xff1a;查询所有数据 5、功能&#xff1a;删除一条数据 6、功能&…

Web服务

安装 WEB 服务&#xff1b; ~ 服务以用户 webuser 系统用户运行&#xff1b; ~ 限制 web 服务只能使用系统 500M 物理内存&#xff1b; ~ 全站点启用 TLS 访问&#xff0c;使用本机上的“CSK Global Root CA”颁 发机构颁发&#xff0c;网站证书信息如下&#xff1a; C…

财报解读:涅槃重生之后,新东方还想再造一个“文旅甄选”?

新东方逐渐走出了“微笑曲线”。 图源&#xff1a;新东方2023财年Q3财报 2023年4月19日&#xff0c;新东方披露了2023财年Q3财报&#xff08;截至2023年2月28日止&#xff09;&#xff0c;营收7.5亿美元&#xff0c;同比增长22.8%&#xff1b;归母净利润为8165万美元&#xff…