Python函数语法与面向对象回顾(精华)

目录

函数

语法定义

返回值

位置参数 

关键字传递

默认参数

函数参数中 / 作用 

lambda表达式

递归函数 

面向对象 

初识对象

继承 

构造函数

​编辑 多态

"私有属性"

动态

类方法和静态方法


函数

语法定义

pyhon的函数定义语法是

def 函数名(参数1,参数2,参数3...):

      #业务逻辑

      pass # pass关键字是python占位符,类似于java的todo 表示此处是待编写

      return 

返回值

如果函数没有return,python默认返回none

举例

python定义函数不需要像java语法一样在方法中定义返回值类型,可以直接返回任意类型

位置参数 

def函数传递参数时会按照定义形参时的参数顺序进行传递

举例

关键字传递

函数调用在传递参数时可以直接定义实参和形参的映射

注意如果想同时手使用关键字参数和位置参数时,关键字参数顺序一定要在位置参数后

如果关键字参数在位置参数前的话:

编辑器已经给出python语法错误提示  执行更是直接报错

所以位置参数必须在关键字参数之前,在之间也不可以 

默认参数

python函数允许定义函数时定义参数默认值,这样调用函数时如果不传入参数,则会直接传递函数的参数的默认值进行处理

默认参数不传递参数时

传递参数时覆盖默认参数值

注意默认参数在使用时,传递的默认参数要放在最后位置,此处在三个参数开头也定义为默认参数则报错

 

函数参数中 / 作用 

函数在定义参数时的 / 作用为: / 左侧的参数必须是位置参数而不能是关键字参数

lambda表达式

lambda表达式是一种简洁的匿名函数,它可以接受任意数量的参数,但只能有一个表达式。Lambda表达式的语法是:lambda arguments: expression

语法格式:

举例演示 

 

 

 

过滤列表

numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  # 输出:[4, 6, 10, 12]

递归函数 

定义:

当定义的函数自身调用自身时,可以称为递归函数,递归函数有两个重点

(1) 自身调用自己

(2)有正确的返 回值

普通循环求阶乘

递归求阶乘

 

斐波那契数列示例:

 

面向对象 

初识对象

本博主目前主力语言是java,所以这里python的面向对象主要和java进行对比

格式:

class 对象名:

     私有属性 = value

     def 方法名(self):

         pass

self的作用类似于java中的this,表示当前对象本身,且必须传递

 对象定义的方法中未传递self时

继承 

python中的对象也支持子类继承父类的成员变量或方法

但是不同于java使用extend关键字,python继承直接在类名后加括号跟上要继承的父类

class 类名(继承的类)

可以看到Cat类中没有任何的属性和方法,Cat类继承了Animal类,从而Cat的新实例可以直接使用父类Animal的方法和属性

注意这里有区别于java的继承,java是单继承,python是支持多继承的

再定义一个BigAnimal类,使得Cat继承Animal和BigAnimal类

 

 比对Cat实例的调用结果,发现当继承了两个类时,如果两个父类拥有相同的实例属性或者方法时,调用的实例会默认以继承的顺序从左至右的权重使用继承而来的属性或方法,只有当继承到的左边的类没有属性或方法时才会接着在右边按照从左至右的顺序找别的继承类的方法或属性

构造函数

python的构造函数使得我们在创建实例对象时就可以将对象个性化

__init__固定构造写法(注意前后都是双下划线)

子类继承父类时,使用super关键字调用父类的构造方法 

注意观察输出结果

 多态

python是一种动态语言,这里的多态和java的多态差异性有些大

java中的多态允许父类进行创建一个子类的实例,也就是父类new 子类,python中却不是这样,python更注重于方法或对象的行为可以有多种表现形式

在Java中,可以通过父类引用指向子类对象,并使用父类引用调用子类对象中的方法,这被称为多态。这是因为Java是一种静态类型语言,对象的行为是通过类来定义和控制的。

而在Python中,由于它是一种动态类型语言,对象的类型是在运行时确定的。Python更注重于对象的行为可以有多种表现形式,而不关心对象的具体类型。因此,在Python中,我们不需要像Java那样创建父类的实例来引用子类对象,直接使用子类的对象就可以了。这种灵活性使得Python更加注重于对象的行为和特性,而不是过于关注类型的层次结构

上代码:

调用结果:

 可以看到,调用的animal函数在调用参数的共同方法时,无需关注被调用者本身是什么对象类型,具体的方法表现形式由具体对象本身来定

"私有属性"

python在私有属性上和java也有较大的差异

在python中仅限从一个对象内部才能够访问的"私有变量"并不存在

java中在定义私有属性时直接使用private即可

但是python中要想定义"私有",就需要在属性前添加__(双下划线)

举例:

不可以访问,

如果要访问必须使用相对应的方法进行访问

set_name()设置数据,get_name()获取数据

查看自省数据

 发现有一个属性为_类名__私有属性名

所以也可以直接这样访问:

动态

由于python是动态语言,所以可以像js一样动态的为对象类型添加属性

举例:

这就是python的动态灵活性,但是这样也会消耗一定的内存空间,而java是一种静态语言,是不允许动态为对象实例添加属性的

类方法和静态方法

类方法和静态方法都可以被类直接调用,但它们之间存在一些关键区别:

  1. 定义方式:类方法是通过在方法前加@classmethod装饰符来定义的,而静态方法是通过在方法前加@staticmethod装饰符来定义的。
  2. 访问方式:类方法可以通过类名直接访问,如ClassName.class_method(),而静态方法可以通过类名直接访问,如ClassName.static_method()
  3. 继承:类方法可以被继承,而静态方法不能被继承。这意味着如果在一个类中定义了一个类方法,那么在子类中也可以通过该方法访问,而不会出现重复定义的问题。但是,如果在子类中定义了一个静态方法,那么该方法将不会被继承到子类中,需要在子类中重新定义。
  4. 调用:类方法和静态方法都可以被类或对象直接调用,但类方法需要传入一个类对象作为参数,而静态方法不需要传入任何参数。

综上所述,类方法和静态方法都可以被类直接调用,但它们之间存在定义方式、访问方式、继承方式和调用方式等方面的区别。

上代码

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot的师生共评的作业管理系统设计与实现

目录 前言 一、技术栈 二、系统功能介绍 课程管理 作业管理 作业互评 小组管理 作业管理 作业评分 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息互联网信息的飞速发展,无纸化作业变成了一种趋势,针对这个问题开发一个…

蓝桥等考Python组别十级003

第一部分:选择题 1、Python L10 (15分) 已知s Pencil,下列说法正确的是( )。 s[0]对应的字符是Ps[1]对应的字符是ns[-1]对应的字符是is[3]对应的字符是e 正确答案:A 2、Python L10 &am…

【GDB】 command 命令

GDB command 命令 语法 command 命令是一个很好用的调试命令,它配合断点使用,可以在指定的断点执行预先设置的命令 其语法为:command bread_id,这样会提示你输入你要执行的命令,以 end 结束。这个 bread_id 就是用 …

【Axure】Axure的常用功能

选择 分为相交选中和包含选中 相交选中:部分选中即是选中包含选中:全选才是选中 缩放 按住元件四角,等比例缩放 置顶和置底 所谓置于顶层就是不被后来的元件覆盖住,置于底层的意思则相反 组合、对齐、分布 组合&#xff1…

Java安全之servlet内存马分析

目录 前言 什么是中间键 了解jsp的本质 理解servlet运行机制 servlet的生命周期 Tomcat总体架构 查看Context 的源码 servlet内存马实现 参考 前言 php和jsp一句话马我想大家都知道,早先就听小伙伴说过一句话木马已经过时了,现在是内存马的天下…

Spring MVC 十:异常处理

异常是每一个应用必须要处理的问题。 Spring MVC项目,如果不做任何的异常处理的话,发生异常后,异常堆栈信息会直接抛出到页面。 比如,我们在Controller写一个异常: GetMapping(value"/hello",produces{&qu…

搭建前端框架

在终端进入web目录,然后创建vuecrud工程 创建工程并引入ElementUI和axios手把手教学>传送门:VueCLI脚手架搭建

2023.09.30使用golang1.18编译Hel10-Web/Databasetools的windows版

#Go 1.21新增的 log/slog 完美解决了以上问题,并且带来了很多其他很实用的特性。 本次编译不使用log/slog 包 su - echo $GOPATH ;echo $GOROOT; cd /tmp; busybox wget --no-check-certificate https://go.dev/dl/go1.18.linux-amd64.tar.gz;\ which tar&&am…

驱动插入中断门示例代码

驱动插入中断描述符示例代码 最近做实验,每次在应用层代码写测试代码的时候都要手动挂一个中断描述符,很不方便所以就想着写个驱动挂一个中断门比较省事 驱动测试效果如下: 下面的代码是个架子,用的时候找个驱动历程传递你要插…

搭建智能桥梁,Amazon CodeWhisperer助您轻松编程

零:前言 随着时间的推移,人工智能技术以惊人的速度向前发展,正掀起着全新的编程范式革命。不仅仅局限于代码生成,智能编程助手等创新应用也进一步提升了开发效率和代码质量,极大地推动着软件开发领域的快速繁荣。 当前…

小白继续深入学习C++

第1节 指针的基本概念 1、变量的地址: 变量是内存地址的简称,在C中,每定义一个变量,系统就会给变量分配一块内存,内存是有地址的。 C用运算符&获取变量在内存中的起始地址。 语法: &变…

如果在 Mac 上的 Safari 浏览器中无法打开网站

使用网络管理员提供的信息更改代理设置。个人建议DNS解析,设置多个例如114.114.114.114 8.8.8.8 8.8.4.4 如果打不开网站,请尝试这些建议。 在 Mac 上的 Safari 浏览器 App 中,检查页面无法打开时出现的信息。 这可能会建议解决问题的…

Chrome(谷歌浏览器)如何关闭搜索栏历史记录

目录 问题描述解决方法插件解决(亲测有效)自带设置解决步骤首先打开 地址 输入:chrome://flags关闭浏览器,重新打开Chrome 发现 已经正常 问题描述 Chrome是大家熟知的浏览器,但是搜索栏的历史记录如何自己一条条的删…

第80步 时间序列建模实战:GRNN回归建模

基于WIN10的64位系统演示 一、写在前面 这一期,我们使用Matlab进行GRNN模型的构建。 使用的数据如下: 采用《PLoS One》2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic Fever with Renal Syndrom…

(高阶) Redis 7 第16讲 预热/雪崩/击穿/穿透 缓存篇

面试题 什么是缓存预热/雪崩/击穿/穿透如何做缓存预热如何避免或减少缓存雪崩穿透和击穿的区别?穿透和击穿的解决方案出现缓存不一致时,有哪些修补方案缓存预热 理论 将需要的数据提前加载到缓存中,不需要用户使用的过程中进行数据回写。(比如秒杀活动数据等) 方案 1.…

软件设计师_操作系统基本原理_学习笔记

文章目录 2.1 操作系统概述2.2 进程2.2.1 进程状态转换图2.2.2 前趋图2.2.3 进程的同步与互斥2.2.4 PV操作2.2.5 死锁 2.3 存储管理2.3.1 分区存储管理 2.1 操作系统概述 2.2 进程 2.2.1 进程状态转换图 2.2.2 前趋图 哪些任务可以并行,哪些任务有先后关系&#xf…

设计一个简单的通讯录

目录 导读: 一、主函数 1. 打印功能菜单 2. 用枚举常量列举功能给功能赋值(0-5) 3. main主函数 二、头文件 三、通讯录各功能的实现 1. 初始化通讯录 2. 增加联系人 3. 展示所有联系人信息 4. 删除指定联系人 5. 查询指定联系人…

elasticsearch+logstash+kibana整合(ELK的使用)第一课

一、安装elasticsearch 0、创建目录,统一放到/data/service/elk 1、下载安装包 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.1.0-linux-x86_64.tar.gz2、解压 tar -xzvf elasticsearch-7.1.0-linux-x86_64.tar.gz3、新建用户和组…

FFmpeg 命令:从入门到精通 | FFmpeg 基本介绍

FFmpeg 命令:从入门到精通 | FFmpeg 基本介绍 FFmpeg 命令:从入门到精通 | FFmpeg 基本介绍FFmpeg 简介FFmpeg 基础知识复用与解复用编解码器码率和帧率 资料 FFmpeg 命令:从入门到精通 | FFmpeg 基本介绍 本系列文章要解决的问题&#xff1…

【SQL】mysql创建定时任务执行存储过程--20230928

1.先设定时区 https://blog.csdn.net/m0_46629123/article/details/133382375 输入命令show variables like “%time_zone%”;(注意分号结尾)设置时区,输入 set global time_zone “8:00”; 回车,然后退出重启(一定记得重启&am…