当前位置: 首页 > java >正文

小白自学python第三天

学习python第三天

一、函数

1、函数介绍

函数就是组织好的,可重复使用的,用以实现特定功能的代码块

现在我们现在需要统计多个字符串长度并且不考虑使用内置函数,你会怎么做?我们先用一种原始人办法看看吧:

str1 = "糖锅"
str2 = "糖锅以前爱吃糖"
str3 = "糖锅现在也很爱吃糖"count1 = 0
for i in str1:count1 += 1
print(f"\"{str1}\"的长度为:{count1}")count2 = 0
for i in str2:count2 += 1
print(f"\"{str2}\"的长度为:{count2}")count3 = 0
for i in str3:count3 += 1
print(f"\"{str3}\"的长度为:{count3}")

运行结果如下:

"糖锅"的长度为:2
"糖锅以前爱吃糖"的长度为:7
"糖锅现在也很爱吃糖"的长度为:9

虽然我们得到了预期结果,但是你是否感觉我们做了很多重复的逻辑工作,是不是太繁琐了。有这个感觉就对了,那让我们来看一下另一种实现方式吧:

str1 = "糖锅"
str2 = "糖锅以前爱吃糖"
str3 = "糖锅现在也很爱吃糖"def str_len(data):count = 0for i in data:count += 1print(f"\"{data}\"字符串的长度是:{count}")str_len(str1)
str_len(str2)
str_len(str3)

运行结果如下:

"糖锅"字符串的长度是:2
"糖锅以前爱吃糖"字符串的长度是:7
"糖锅现在也很爱吃糖"字符串的长度是:9

哎呀~我的老天奶,有没有一种效率飙升的感觉?!嘿嘿,要是需要统计的字符串数量更多时,这种感觉会更加明显,这就是使用函数的益处,接下来我会带各位更深一层的去认识函数。

2、函数的定义

函数的定义语法

def 函数名(参数):函数体return 返回值

函数调用的语法

函数名(参数)

简单示例

# 定义函数,输出一些话语
def hello():print("大家好~我是糖锅,希望大家会喜欢我的博客~")# 调用函数
hello()

示例结果

大家好~我是糖锅,希望大家会喜欢我的博客~

注意

  • 如果不需要参数,可以省略
  • 若没有返回值,那么返回值也可以省略
  • 函数必须先定义后调用

3、函数的参数

上述案例中一开始便有传入参数的情况,我们把字符串作为参数传入函数中,然后在函数内部进行字符串长度计算。还不熟悉?好吧,我们再来一个小案例熟悉一下这种情况(这次我们传入多个参数),我们来设计一个函数能够进行两数相加:

# 定义一个两数相加函数,无返回值
def add(x, y):print(f"{x} + {y} = {x + y}")add(12, 3)

示例结果

12 + 3 = 15

后续如果我们想要进行三数相加,四数相加,我们传参时只需要用逗号将参数隔开就行啦。

4、函数的返回值

函数的返回值就是程序在完成事情之后,最后会给调用者的结果。

这里我们依然举例演示,我们将3中的案例稍微修改一下,将add(x, y)函数变成有返回值的函数:

# 定义一个两数相加函数,有返回值
def add(x, y):return x + ynum1 = 12
num2 = 3
print(f"{num1} + {num2} = {add(num1, num2)}")

示例结果

12 + 3 = 15

注意:函数体在遇到return后就结束了,所以写在return后的代码不会执行

5、变量的作用域

变量的作用域就是变量的作用范围,主要分为局部变量(定义在函数体内部的变量,只在函数体中生效)和全局变量(在函数体内外都能生效)
在这里插入图片描述

大家注意,有一种特殊情况,我们可以通过global关键字将函数内定义的变量声明为全局变量。具体什么意思呢?我们可以举个栗子:

num1 = 10def demo():num1 = 100print(f"demo函数中的num1的值为:{num1}")demo()
print(f"demo函数外的num1的值为:{num1}")

你觉得最后两个输出的值一样吗?都是100?请看运行结果:

demo函数中的num1的值为:100
demo函数外的num1的值为:10

猜中这结局了吗嘿嘿,事实证明,demo函数中num1和函数外的num1没啥关系,如果我们想让它们是同一个变量,怎么搞?再看:

num1 = 10def demo():global num1num1 = 100print(f"demo函数中的num1的值为:{num1}")demo()
print(f"demo函数外的num1的值为:{num1}")

我们在demo函数中用global关键字声明num1为全局变量,此时demo函数中的num1和函数外的num1就是同一变量了。不信请看运行结果:

demo函数中的num1的值为:100
demo函数外的num1的值为:100

二、数据容器(今日先看列表)

1、列表(list)

1.1、语法

列表以[]为标识,其中的每一个数据称之为元素,并且用逗号隔开。

# 字面量
[元素1, 元素2, 元素3,...]# 定义变量
变量名称 = [元素1, 元素2, 元素3,...]# 定义空列表
变量名称 = []
变量名称 = list()

简单示例

# 定义一个列表
fruits = ["香蕉", "猕猴桃", "波罗蜜"]
print(fruits)# 列表中不一定要相同类型的元素
demo = [1, 12.03, "糖锅"]
print(demo)# 定义一个嵌套列表
demo1 = [[1, 2, 3], ["香蕉", "猕猴桃", "波罗蜜"]]
print(demo1)

示例结果

['香蕉', '猕猴桃', '波罗蜜']
[1, 12.03, '糖锅']
[[1, 2, 3], ['香蕉', '猕猴桃', '波罗蜜']]
1.2、列表的下表索引

我们在实际编程当中不是每次都把列表元素都用到,我们有时只是用到其中的一个或者几个,那么我们如何取出特定位置的数据呢?这里我们就可以使用下标索引来实现。列表中元素的下标索引从0开始,依次递增:

在这里插入图片描述

注意:我们的下标是可以反向索引的,也就是从后向前:从-1开始,依次递减(-1,-2,-3…)

在这里插入图片描述

其中语法格式为:

# 非嵌套列表
列表[下标索引]

简单示例

fruits = ["香蕉", "猕猴桃", "波罗蜜"]demo1 = [[1, 2, 3], ["香蕉", "猕猴桃", "波罗蜜"]]# 取出列表fruits中的第二个元素
print(fruits[1])
# 取出列表fruits中的倒数第一个元素
print(fruits[-1])# 取出demo1列表中的第一个列表元素中的第二个元素
print(demo1[0][1])

示例结果

猕猴桃
波罗蜜
2

注意:通过下标索引取数据时,千万千万千万不要超出下标!!!

1.3、列表的常用操作
1.3.1、查找某元素的下标

功能:查找指定元素在列表的下标,如果找不到会报错。

语法

列表.index(元素)
1.3.2、修改特定位置的元素值:

语法

列表[下标] =
1.3.3、插入元素

语法

# 在指定的下标位置,插入指定元素
列表.insert(下标, 元素)
1.3.4、追加元素

功能:将指定元素,追加到列表的尾部

语法

# 追加单个元素
列表.append(元素)#追加一批元素
列表.extend(其他数据容器)
1.3.5、删除元素

语法

# 方法一
del 列表[下标]# 方法二
列表.pop(下标)# 方法三:从前到后去搜索该元素,然后删除该元素在列表中的第一个匹配项
列表.remove(元素)
1.3.6、清空列表

语法

列表.clear()
1.3.7、统计列表中某元素的数量

语法

列表.count()
1.3.8、统计列表中元素的数量

语法

len(列表)

综上

简单示例

foods = ["炸洋芋", "蒸饵丝", "过桥米线", "烧饵块", "炸洋芋", "炸洋芋"]# 查询某元素的下标
index = foods.index("过桥米线")
print(f"\"{foods[index]}\"元素的下标为:{index}")# 修改下标为2的元素的值
foods[2] = "木瓜凉水"
print(f"此时下标为2的元素的值为:\"{foods[2]}\"")# 在指定位置插入元素
foods.insert(3, "过桥米线")
print(f"插入元素后的列表为:{foods}")# 在列表尾部追加单个元素
foods.append("鲜花饼")
print(f"追加元素后的列表为:{foods}")# 在列表尾部追加一批元素
food = ["子弟薯片"]
foods.extend(food)
print(f"追加元素后的列表为:{foods}")# 删除指定下标的元素
# 方法一
del foods[2]
print(f"第一次删除元素后的列表为:{foods}")# 方法二:删除并取出元素
ele = foods.pop(2)
print(f"第二次删除元素后的列表为:{foods}, 被删除的元素是:\"{ele}\"")# 方法三:
foods.remove("炸洋芋")
print(f"第三次删除元素后的列表为:{foods}")# 统计列表中有几个"炸洋芋"
count1 = foods.count("炸洋芋")
print(f"此时列表中的”炸洋芋“个数是:{count1}个")# 统计列表中此时有几个元素
print(f"此时列表中的元素个数为:{len(foods)}个")# 清空列表
foods.clear()
print(f"列表被清空了,此时列表为:{foods}")

示例结果

"过桥米线"元素的下标为:2
此时下标为2的元素的值为:"木瓜凉水"
插入元素后的列表为:['炸洋芋', '蒸饵丝', '木瓜凉水', '过桥米线', '烧饵块', '炸洋芋', '炸洋芋']
追加元素后的列表为:['炸洋芋', '蒸饵丝', '木瓜凉水', '过桥米线', '烧饵块', '炸洋芋', '炸洋芋', '鲜花饼']
追加元素后的列表为:['炸洋芋', '蒸饵丝', '木瓜凉水', '过桥米线', '烧饵块', '炸洋芋', '炸洋芋', '鲜花饼', '子弟薯片']
第一次删除元素后的列表为:['炸洋芋', '蒸饵丝', '过桥米线', '烧饵块', '炸洋芋', '炸洋芋', '鲜花饼', '子弟薯片']
第二次删除元素后的列表为:['炸洋芋', '蒸饵丝', '烧饵块', '炸洋芋', '炸洋芋', '鲜花饼', '子弟薯片'], 被删除的元素是:"过桥米线"
第三次删除元素后的列表为:['蒸饵丝', '烧饵块', '炸洋芋', '炸洋芋', '鲜花饼', '子弟薯片']
此时列表中的”炸洋芋“个数是:2个
此时列表中的元素个数为:6个
列表被清空了,此时列表为:[]
1.4、列表的遍历

我们直接上示例演示吧

先看一下使用while循环

nums = [1, 2, 0, 3, 0, 1]def list_while():"""用while循环遍历列表的演示函数:return: None"""# 定义一个变量来记录下标index = 0while index < len(nums):# 通过下标index遍历列表print(f"列表的第{index + 1}个元素为:{nums[index]}")# 记得将下标加一index += 1list_while()

示例结果

列表的第1个元素为:1
列表的第2个元素为:2
列表的第3个元素为:0
列表的第4个元素为:3
列表的第5个元素为:0
列表的第6个元素为:1

使用for循环

nums = [1, 2, 0, 3, 0, 1]def list_for():"""用for循环遍历列表的演示函数:return: None"""for i in nums:print(f"列表中的元素为:{i}")list_for()

示例结果

列表中的元素为:1
列表中的元素为:2
列表中的元素为:0
列表中的元素为:3
列表中的元素为:0
列表中的元素为:1

注意:两种方式都可以实现列表遍历,其中while循环适用于任何循环场景,for循环适用于遍历容器的场景或者简单固定的循环场景。

今日就先到这里啦~ 各位看官,咱们改日再会~

http://www.xdnf.cn/news/2258.html

相关文章:

  • 当高级辅助驾驶遇上“安全驾校”:NVIDIA如何用技术给无人驾驶赋能?
  • Python类和对象四(十三)
  • 2025雅思口语工具Top10:AI软件真实测评
  • 在springboot项目中,如何进行excel表格的导入导出功能?
  • JavaScript基础-算数运算符
  • (四) 实战Trae 编译调试C++项目(以minidocx为例)
  • Winform(2.多线程)
  • C19-while循环及for循环等价引入
  • CANFD技术在实时运动控制系统中的应用:协议解析、性能测试与未来发展趋势
  • (23)VTK C++开发示例 --- 读取所有的PolyData类型示例
  • 网络管理知识点
  • Java----内部类 以及 调用关系
  • Pygame终极项目:从零开发一个完整2D游戏
  • C++之map
  • ngrok 内网穿透技术系统性文档
  • 初始网络流(最小割)
  • 【C语言练习】005. 编写表达式并确定其值
  • leetcode刷题日记——环形链表
  • 新增Webhook通知功能,文档目录树展示性能优化,zyplayer-doc 2.5.1 发布啦!
  • Linux基础篇、第4章_03系统磁盘高级管理LVM 逻辑卷管理器
  • 【头脑风暴】加权平均
  • 模型 递弱代偿
  • [计算机科学#2]:从继电器到晶体管的电子计算机发展史(庞然大物的进化)
  • 视觉大模型专栏导航
  • C++泛型编程(一):模板详解
  • 可视化大屏开发前提了解
  • ssm驾校预约管理系统的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
  • dl学习笔记(13):从强化学习到PPO
  • cf | Median Splits
  • Dubbo(78)Dubbo的集群容错机制是如何实现的?