Python函数进阶与文件操作

Python函数进阶与文件操作

一、作业回顾

1、格式化输出与%百分号

以下结果中,可以正常输出“50%及格”语句是(B)

A、print(“%d%及格” % (50)) => 回答大部分结果(Python这种写法不正确)

B、print(“%d%%及格” % (50)) => 正确结果

2、字符串切片

定义一个字符串str1 = ‘abcdefg’,使用切片截取字符串str1[3::-2],求返回结果:(C)

C、‘db’

3、字典的定义

其实字典中的key可以是很多数据类型(不可变数据类型 => 整型、浮点型、字符串、元组)

my_dict = {}
my_dict[1] = 1
my_dict['1'] = 2
my_dict[1.0] = 3
print(my_dict[1] + my_dict['1'] + my_dict[1.0])

二、引用变量与可变、非可变类型

1、引用变量

在大多数编程语言中,值的传递通常可以分为两种形式“值传递与引用传递”,但是在Python中变量的传递基本上都是引用传递。

☆ 聊聊变量在内存底层的存储形式

a = 10

第一步:首先在计算机内存中创建一个数值10(占用一块内存空间)

第二步:在栈空间中声明一个变量,如a

第三步:把数值10的内存地址赋予给变量小a,形成所谓的==“引用关系”==

image-20210315100015772

☆ 如何验证Python中变量的引用关系

答:可以使用内置方法id(),其参数就是要显示的变量信息 => id(变量名称)

a = 10
print(id(a))

☆ 把一个变量赋予给另外一个变量的影响

a = 10
b = a
print(id(a))
print(id(b))

运行结果:

image-20210315100748118

说明:由以上运行结果可知,当我们把一个变量赋予给另外一个变量时,其两者指向的内存地址相同。就说明a和b指向了同一块内存空间,原理图如下:

image-20210315101115722

思考:如果在b = a以后,我们改变了变量a的值,问变量b是否会受到影响?

# a = 10
# print(id(a))a = 10
b = aa = 100
print(b)  # 10 或 100print(id(a))
print(id(b))

原理图:

image-20210315101547645

总结:不可变数据类型(数值)在赋值以后,其中一个值的改变不影响另外一个变量,因为两者指向空间地址不同。

2、Python中可变和非可变数据类型

☆ 问题1:在Python中一共有几种数据类型?

答:7种,数值(int整型、float浮点类型)、bool类型(True和False)、字符串类型(str)、元组(tuple 1,2,3)、列表(list [1, 2, 3])、字典(dict {key:value})、集合(set {1, 2})

在Python中,我们可以把7种数据类型分为两大类:可变类型 + 非可变类型

① 非可变类型

数值(int整型、float浮点类型)

bool类型(True和False)

字符串类型(str)

元组(tuple 1,2,3)

② 可变类型

列表(list [1, 2, 3])

字典(dict {key:value})

集合(set {1, 2})

☆ 问题2:如何判断一个数据类型是可变类型还是非可变类型?

在Python中,可变类型与非可变类型主要是通过这个数据类型在内存中的表现形式来进行定义的。

① 可变类型就是在内存中,其内存地址一旦固定,其值是可以发生改变的

a = [1, 2, 3]
print(id(a))# 向内存中追加新数据(对数据进行改变只能通过数据类型.方法()实现)
a.append(4)
print(id(a))

原理图:

image-20210315103357217

② 非可变类型就是在内存中,内存地址一旦固定,其值就没办法发生任何改变了

a = 10
print(id(a))a = 'hello'
print(id(a))

原理图:

image-20210315103823240

3、可变类型与非可变类型在函数中的应用

☆ 可变类型

# 定义一个函数
def func(names):print(names)# 定义一个全局变量
names = ['张三', '李四', '王五']
# 调用函数
func(names)

原理图:

image-20210315110548353

综上所述:可变类型在函数中,如果在全局或局部中对可变类型进行增删改操作,其外部和内部都会受到影响。

☆ 不可变类型

# 定义一个函数
def func(num):num += 1print(num)# 定义一个全局变量
a = 10
# 调用函数
func(a)
# 在全局作用域中打印a
print(a)

image-20210315111142925

综上所述:不可变类型在函数中,局部或全局的改变对外部和内部都没有任何影响。

三、函数递归(重点难点)

1、前言

编程思想:如何利用数学模型,来解决对应的需求问题;然后利用代码实现对应的数据模

算法:使用代码实现对应的数学模型,从而解决对应的业务问题

程序 = 算法 + 数据结构

在我们经常使用的算法中,有两种非常常用的算法:递推算法 + 递归算法,专门用于解决一些比较复杂,但是拆分后相似度又非常高的程序。

2、递推算法

递归算法:递推算法是一种简单的算法,即通过已知条件,利用特定条件得出中间推论,直至得到结果的算法。递推又分为顺推和逆推。

顺推:通过最简单的条件,然后逐步推演结果

逆推:通过结果找到规律,然后推导已知条件

递推算法案例:斐波那契数列

1 1 2 3 5 8 13 21 …

① ② ③ ④ ⑤ ⑥ …

第1位为1,第2位为1,第3位为2 = 1 + 1,第4位为3 = 2 + 1,依次类推…第n位结果为多少?

f(n) = f(n-1) + f(n-2)

提出问题:求斐波那契数列第15位的结果?

分析:f(15) = f(14) + f(13)

​ f(14) = f(13) + f(12)

​ f(13) = f(12) + f(11)

​ …

​ f(4) = f(3) + f(2) = 3 + 1

​ f(3) = f(2) + f(1) = 2

​ f(2) = 1

​ f(1) = 1

递推算法:使用while循环或for循环

# 递推算法:根据已知条件,求结果(或者根据结果求未知条件)
def recusive(n):""" 返回斐波那契数列某一位(n>=1)的结果 """if n == 1 or n == 2:return 1

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

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

相关文章

记一次修复外网无法访问vmware里面的虚拟机的网络端口的问题

发现一个奇怪的网络问题,vmware里一个程序的端口通过vmnat穿透出来,然后这个端口就能够通过局域网被其他机器访问,但是另一个网段就没法访问这个端口。使用主机上的其他程序使用开启同样的端口,另一个网段的机器却可以访问。我想不…

盘点 2023 公开的攻击面发现平台

针对可以直接购买并且明码标价的攻击面发现平台进行了对比,结果如下 测试用例: 企业(某制造有限公司)、高校(某职业学院) 测试对象: 零零信安攻击面管理平台 长亭云图极速版攻击面管理平台 …

Hash-based Message Authentication Code(HMAC)

一、引言 在现代信息安全领域,消息认证码(Message Authentication Code,简称MAC)起着至关重要的作用。Hash-based Message Authentication Code(基于哈希的MAC,简称HMAC)作为一种广泛应用的MAC…

二、类与对象(三)

17 初始化列表 17.1 初始化列表的引入 之前我们给成员进行初始化时,采用的是下面的这种方式: class Date { public:Date(int year, int month, int day)//构造函数{_year year;_month month;_day day;} private:int _year;int _month;int _day; };…

【每日一题】收集巧克力

文章目录 Tag题目来源题目解读解题思路方法一:枚举操作数 写在最后 Tag 【枚举】【数组】【2023-12-28】 题目来源 2735. 收集巧克力 题目解读 有长度为 n, 下标从 0 开始的整数数组 nums, 表示收集不同类型的巧克力的成本. nums[i] 表示收集类型 i 巧克力的成本…

多module项目的springboot配置swagger

文章目录 场景效果分析实现ConfigurationProperties 注解 场景 项目使用swagger提供接口文档功能, 下面演示下多module的springboot 项目是怎么配置 效果 分析 通过为每个module设置独立的分组,完成分组切换功能, 下面举个例子 EnableSwagger2 public class SwaggerConfig {Bea…

快速上手:Docker环境下的WordPress安装全攻略

在这篇文章中我会手把手地教你在Linux环境下使用Docker安装WordPress及相关应用。最终,你将会拥有一个安全、支持https的网站。别犹豫啦,跟着我一块儿搞起来吧! 一、登录服务器 在之前的文章中有提到如何使用ssh命令登录到我们之前在AWS申请…

嵌入式SOC之通用图像处理之OSD文字信息叠加的相关实践记录

机缘巧合 机缘巧合下, 在爱芯元智的xx开发板下进行sdk的开发.由于开发板目前我拿到是当前最新的一版(估计是样品),暂不公开开发板具体型号信息.以下简称板子 .很多优秀的芯片厂商,都会提供与开发板配套的完善的软件以及完善的技术支持(FAE),突然觉得爱芯…

亚信安慧AntDB数据库——通信运营商核心系统的全面演进

AntDB数据库源自通信运营商核心系统,经过15年的平稳运行和不断演进,成功跟随通信技术的升级步伐,逐步迈向5G时代,并且在这期间完成了8次大版本的迭代,为行业树立了技术领先的典范。其独特之处在于具备超融合架构&#…

Transformer模型中的Attention算法

参考【经典精读】万字长文解读Transformer模型和Attention机制 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/104393915图解Transformer_transformer模型训练准确率曲线图-CSDN博客https://blog.csdn.net/qq_41664845/article/details/84969266?appinstall0#commentBoxThe…

【nodejs】Express概念与使用介绍

Express Express是基于Node.js平台,从内置模块http封装出来的第三方模块,可以更方便的开发Web服务器。 中文官网: http://www.expressjs.com.cn/ 一、基本使用 // 导入express const express require(express) // 创建web服务器 const a…

18B20受到LED灯的干扰处理方法

鱼缸使用了18B20测温,采用PWM控制加热棒加热占空比的方法控制鱼缸温度,使用了最简单的温度差调整PWM宽度的方法,温度差越大PWM占空比越大,从而产生更多的加热时间,当温度接近设定值的时候,PWM逐步缩小&…