Python3语法笔记(后篇)

news2025/1/18 2:02:49

文章目录

  • 前言
  • 函数
    • 输入参数
    • 返回值
    • 装饰器(decorator)
    • Lambda表达式(匿名函数)
    • 文档和注解
    • 类和实例
    • 特殊方法
    • 继承
    • 枚举类
  • 错误和异常
  • 后记

前言

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

Python3语法笔记(前篇):
https://blog.csdn.net/Naisu_kun/article/details/130056943

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

函数

Python中使用 def 来定义函数,和大部分语言一样,函数可以有输入参数和返回内容:

def func1(): # 没有输入参数和返回的函数
    pass # 一些语句

def func2(arg1, arg2): # 有输入参数和返回的函数,多个输入参数之间使用 , 分隔
    pass # 一些语句
    return 233

输入参数

函数的输入参数可以有默认值( 默认参数 ),有默认值的参数必须放在后面:
在这里插入图片描述

调用函数时也可以使用输入参数名称来设置特定参数值( 关键字参数 ):
在这里插入图片描述

前面两个例子中可以看到函数使用时输入参数可以使用函数定义时的顺序输入,也可以使用关键字方式,Python中也可以使用符号来强制规定使用顺序或者关键字:

def func(arg1, /, arg2=22, *, arg3=33):
# / 前的参数使用时只能用顺序
# * 后的参数使用时只能用关键字

函数输入参数中最后可以使用可变参数,在调用时可以传入任意个数参数:
在这里插入图片描述

在调用函数时可以直接解包传入的列表、元组或字典等元素,分散成一个个独立的位置参数:
在这里插入图片描述
在这里插入图片描述

输入参数使用时需要注意值传递和引用传递的问题:

  • 值传递: 参数类型为不可变类型(字符串、数字、元组),函数内部修改传入的参数 不会 影响原始数据;
  • 引用(地址)传递: 参数类型为可变类型(列表,字典),函数内部修改传入的参数 影响原始数据;

在这里插入图片描述

另外默认参数使用可变类型时也需要特别注意:
在这里插入图片描述

传入参数也可以是函数,就是通常所说的回调函数,这个也非常常用,甚至算是必不可少的功能。

返回值

Python中每个函数中都有 return 语句,即使你没写也会有一个默认的 return None
在这里插入图片描述

return 通常只能返回一个对象,如果想要返回多个对象可以把需要返回的东西都封装到一个列表、元组等元素中。Python中也提供了进一步的简化:
在这里插入图片描述

return 也可以返回函数,常用的场景是函数内部定义函数,然后返回该函数。这个经常来拿做 闭包 使用:
在这里插入图片描述

装饰器(decorator)

装饰器是一个语法糖,可以在不改变原有函数的情况下增加函数功能:
在这里插入图片描述

装饰器也是可以带入参数的:
在这里插入图片描述

一个函数也可以使用多个装饰器:
在这里插入图片描述

需要注意的是一个函数如果用上了装饰器,那么会丢失原本的 __name____doc__ 等属性,这个可以使用语言内置的 @wraps() 装饰器来处理:
在这里插入图片描述

Lambda表达式(匿名函数)

使用 lambda 关键词可以临时性的定义一个函数:
在这里插入图片描述

文档和注解

定义函数时函数名的下面可以使用多行字符串方式编写函数文档:
在这里插入图片描述

Python是弱类型的,函数中输入输出内容也如此,不过可以使用 注解 来提示说明相关参数的类型:
在这里插入图片描述
需要注意的是 注解 只是提示性内容,解释器运行代码时并不会强制检查。

类和实例

类和对象是面向对象的语言中比较常用的功能。简单来说类就是对一个对象的抽象,其中包含了对象具有的一些属性(变量)和方法(函数)。下面是Python中类的最基本使用例子:
在这里插入图片描述

需要注意的是在类中如果不是像上面那样在构造函数中使用 self.xxx 方式声明的变量,而是直接和方法同级声明的普通变量,这将成为类变量,这在有些时候会产生意料之外的问题:
在这里插入图片描述

前面使用中实例的属性是可以在使用是获取和修改的,在实际使用时通常会有对实例属性的获取和修改进行特定处理的需求,比如下面的一些例子:
在这里插入图片描述
在这里插入图片描述

特殊方法

前面出现过 __init__(self[, ...]) 这个方法,其实这种 __xx__ 形式的方法是Python中的自带的特殊的方法,这些方法通常会在特定操作的时候被调用,比如 __init__ 就会在实例被创建的时候调用,下面是一些演示:
在这里插入图片描述

更多的这类方法可以查看 Python语言参考手册数据模型 章节的 特殊方法名称

继承

面向对象语言中涉及到类,往往还会有继承的概念,一个类(子类)可以继承自一个或多个类(父类)。子类可以直接拥有父类的属性和方法,子类也可以有自己的属性和方法,子类还可以重写(Override)父类的方法:

class P1:
    def __init__(self):
        print('P1构造方法')

    def fun1(self):
        print('P1 func1')


class P2:
    def __init__(self):
        print('P2构造方法')

    def fun2(self):
        print('P2 func2')


class Child(P1, P2):  # Child类继承 P1 P2 两个类
    def __init__(self):
        super().__init__()  # super()相当于第一个父类(P1)
        P2.__init__(self)  # 调用 P2 类的构造方法
        print('Child构造方法')

    def fun1(self):  # 重写P1类中的fun1方法
        super().fun1()  # 调用P1类中的fun1方法
        print('Child func1')


child = Child()
child.fun1()
child.fun2()

在这里插入图片描述

枚举类

Python中没有枚举类型,可以使用枚举类来代替:

from enum import Enum, unique

@unique  # 该装饰器用来检查内部不会有重复的值
class Color(Enum):
    red = 1
    green = 2
    blue = 3

print(Color.green) # 枚举类型直接通过 类名.属性 来访问
print(Color.green.name) # 访问属性名称
print(Color.green.value) # 访问属性值

# Color.green.value = 233 # 枚举类型的值无法修改

在这里插入图片描述

错误和异常

Python中的异常处理和大多数语言也很相似:

try:
    pass # 执行可能会出现异常的操作
except Exception: # 出现异常时分支,Exception为异常类型,可以使用元组包含多个异常类型,或者什么都不写来捕获所有异常
    pass
else: # 如果存在try和except,并且try正常执行后进入的分支
    pass
finally: # 不管是否出现异常,在这整个代码块结束前进入的分支
    pass

各种异常类型可以在 Python标准库内置异常 章节中查看。

Python中可以使用 raise 关键词来抛出异常。另外也可以使用 assert 关键词来测试表达式真假,如果为假则抛出 AssertionError 异常。

后记

这里只是粗略记录了一些Python的语法。Python作为脚本语言来说语法足够简单与灵活,可以算得上是比较不错的语言了(除了缩进和私有化)。

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

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

相关文章

rsync之include、exclude使用

rsync之include、exclude使用 注意:exclude可单独使用,include必须和exclude配合使用 环境: 服务端: 在做同步之前必须要知道的含义: --exclude* 排除所有文件,包括目录,因为在linux一切皆…

自动拣货仓库亮灯方案

方案目标概叙: 系统在美团平台下单后,骑手会收到取货码,凭借取货码到指定的智能仓库去取货,仓库标签系统调取相应订单信息,执行亮灯指令(屏幕显示订单信息及拣货数量,并亮灯)&#…

window server dos命令集合

1、 删除任务管理器服务里的服务项,用管理员运行cmd, 再运行:sc delete ServiceName ServiceName从服务属性里查。

爬虫为什么需要ip

爬虫需要使用爬虫ip主要是为了解决以下问题: 1、反爬虫机制:许多网站会设置反爬虫机制来防止爬虫程序的访问,例如限制IP地址的访问频率、检测访问来源等。使用爬虫ip可以绕过这些限制,使得爬虫程序更难被检测到。 2、访问限制&a…

Figma快速转换为Sketch文件格式的方法

由于Sketch允许第三方插件,例如应用程序集成和数据提供,许多设计和开发人员喜欢将Figma文件导入Sketch,并将其转换为Sketch格式。 但是令人头痛的是,Figma只支持Sketch文件的导入,而不支持Sketch文件的导出。这篇文章…

vue项目引入字体样式

1、先下载好需要的字体样式,下载好的应该是个.ttf文件 2、在asset中创建fonts文件夹,将字体样式文件放进去,然后再到里面创建font.css文件 3、font.css文件里面进行引用 font-face {/* 重命名字体名 */font-family: HeFengShuDaoZhaoHe;/*…

无惧黑暗强光,纯视觉导航也能全天候作业

对于一台激光导航扫地机器人而言,全天候作业并非难事,那么纯视觉导航扫地机器人能做到吗? 无论对于人,还是机器人,光线环境的变化对“眼睛”的影响都是致命的。由于视觉传感器对于光线十分敏感,在家庭场景…

TDA4VM/VH 芯片 NAVSS0

请从官网下载 TD4VM 技术参考手册,地址如下: TDA4VM 技术参考手册地址 概述 (NAVSS0 的介绍在 TRM 的第10.2章节) NAVSS0 可以看作 MAIN 域的一个复杂外设域,实现如下功能: UDMASS: DMA 管理子系统;MODSS&#xf…

【GPT】你需要了解的 ChatGPT的技术原理- Transformer架构及NLP技术演进

目录 概述 The Concept of Transformers and Training A Transformers ModelTransformers 的概念和训练 Transformers 模型

2023年第二十届五一数学建模竞赛赛题浅析

我们带来五一赛题的一个c题解析这个的目的,就是为了帮助大家更好的选题,简单的看一下这个几个题目就可以。然后我们题目给出的这个文件夹就是包括三个赛题,还有我们各个赛题的论文规范模板,这三个我们论文写作的时候才会用到。主要…

【某区护网】从外网打点到拿下集团域控

目录 web打点 反弹shell与权限维持 主机信息收集与反向代理 攻击域控 最后 前端时间刚结束了攻防演练活动,其中一项成果为拿下某集团域控制器权限,直接控制域内主机5000多台。以下为攻击过程的粗略记录,整体来说还是比较容易。 web打点…

常见HTTP攻击赏析(3)

基于OpenAPI的APIcat开源日志监控软件已经开发一段时间了,在自己的网站上抓到了一些HTTP的攻击,没事,我们就汇总给大家做个赏析,也当是个提醒。 这是一篇系列文章,数据反馈,看的人还是不少的,感…

Java知识学习13(AQS详解)

1、AQS介绍? AQS 的全称为 AbstractQueuedSynchronizer ,翻译过来的意思就是抽象队列同步器。这个类在 java.util.concurrent.locks 包下面。 AQS 就是一个抽象类,主要用来构建锁和同步器。 public abstract class AbstractQueuedSynchron…

Java学习17(IO模型详解)

1、何为IO? I/O(Input/Outpu) 即输入/输出 。 从计算机结构的角度来解读一下 I/O。 根据冯.诺依曼结构,计算机结构分为 5 大部分:运算器、控制器、存储器、输入设备、输出设备。 输入设备(比如键盘&am…

规模增长背后抖音如何构建直播体验优化

随着抖音直播用户持续增加,生态日渐丰富,在经历亿万规模化增长的过程之中,体验优化是必须要面对的问题,如何建立不同阶段的优化体系?如何抓住过程中的优化重点?另外面对业务增长诉求,面对新技术…

计算机网络学习08(TCP三次握手和四次挥手)

1、建立连接—TCP上次握手 建立一个 TCP 连接需要“三次握手”,缺一不可 : 一次握手: 客户端发送带有 SYN(SEQx) 标志的数据包 -> 服务端,然后客户端进入 SYN_SEND 状态,等待服务器的确认;二…

《PyTorch 深度学习实践》第13讲 循环神经网络(高级篇)

文章目录 1 这一讲任务2 相关解释3 代码 该专栏内容为对该视频的学习记录:【《PyTorch深度学习实践》完结合集】 专栏的全部代码、数据集和课件全放在个人GitHub了,欢迎自取。 1 这一讲任务 根据名字中的字符来预测其是哪个语言地区:如&quo…

03_线程间通信

面试题:两个线程打印 两个线程,一个线程打印1-52,另一个打印字母A-Z打印顺序为12A34B...5152Z,要求用线程间通信 public class Demo01 {public static void main(String[] args) {ShareData05 shareData05 new ShareData05();new…

DFIG控制11: 磁链定向矢量控制和仿真

DFIG控制11: 磁链定向矢量控制和仿真,主要是看下怎么根据DFIG模型来做矢量控制。 磁链定向和模型简化 原模型 dq同步坐标系下的模型:DFIG控制10: 双馈发电机的动态模型_Fantasy237的博客 电压方程: { u s d R s i…

AIhelp智能问答

前言 2023年,科技圈里,持续爆火的科技应用,毫无疑问是生成式AI,chatGPT了的,之所以令人惊叹,正是因为它的强大 可以这么认为,chatGPT能够解决很多问题,尤其是问答,问题答案的搜索,远比百度,google要精准,方便得多 如何提出高质量的问题,写好一个promot提示词,尤为重要,提出问题…