函数与模块的简单使用
今日内容概要
-
文件修改的两种方式
-
函数
-
模块
-
常用模块
文件修改两种方式
补充知识点
# 1.硬盘空间是无法修改的,硬盘中的数据的更新都是用新的内容覆盖旧内容
# 2.内存中的数据是可以修改的
# 文件对应的是硬盘空间,硬盘不能修改对应着文件本质也不能修改, 那我们看到文件的内容可以修改,是如何实现的呢? 大致的思路是将硬盘中文件内容读入内存,然后在内存中修改完毕后再覆盖回硬盘 具体的实现方式分为两种:
方式一:
# 思路: 将文件内容一次性全部读入内存,然后在内存中修改完毕后在覆盖写回原文件
# 优点: 在文件修改过程中同一份数据只有一份
# 缺点: 文件过大时会占用过大的内存,有可能会错误
with open('ab.txt', mode='rt', encoding='utf8') as f:
data = f.read()
with open('ab.txt', mode='wt', encoding='utf8') as f:
f.write(data.replace('zzz','ccc'))
方式二:
# 思路: 以读的模式打开原文件,以写的模式打开一个临时文件,一行行读取原文件内容,修改完后写入临时文件...,删除原文件,将临时文件重命名原文件
# 优点: 不会占用过多的内存
# 缺点: 在文件修改过程中同一份数据存了两份
import os
with open('ab.txt', mode='rt', encoding='utf8') as read_f,\
open('.ab.txt.swp', mode='wt', encoding) as write_f:
for line in read_f:
write_f.write(line.replace('ccc','zzz'))
os.remove('ab.txt')
oa.rename('.ab.txt.swp','ab.txt')
函数
什么是函数
# 函数就是盛放功能的容器
定义函数
# 函数的使用必须遵守先定义,后调用的原则。函数的定义就相当于事先将函数体代码保存起来,然后将内存地址赋值给函数名,函数名就是这段代码的引用。
def 函数名(参数1,参数2...):
"""文档描述"""
函数体
return 值
# 说明:
# 1. def: 定义函数的关键字;
# 2.函数名:函数名指向函数内存地址,是对函数体代码的引用。函数的命名应该反映出函数的功能;
# 3.括号:括号内定义参数,参数是可有可无的,且无需指定参数的类型;
# 4.冒号:括号后要加冒号,然后在下一行开始缩进编写函数体的代码;
# 5."""文档描述""": 描述函数功能,参数介绍等信息的文档,非必要,但是建议加上,从而增强函数的可读性;
# 6.函数体:由语句和表达式组成;
# 7.return 值:定义函数的返回值,return是可有可无的。
### 函数定义阶段只检测语法不执行代码,只有在调用函数时才会执行函数体代码
函数的参数:形参与实参
# 函数的参数分为形式参数和实际参数,简称形参和实参
形参
# 形参即在定义函数时,括号内声明的参数。形参本质就是一个变量名,用来接收外部传来的值
def res(a,b):
res = a+b
return
实参
# 实参即在调用函数时,括号内传入的值,值可以是常量、变量、表达式或者三者的组合
res(2,3)
函数返回值
# return是一个函数结束的标志,函数内可以有多个return,但只执行一次函数就结束了,并把return后定义的值作为本次调用的结果返回
函数的调用
# 按照在程序出现的形式和位置,可以将函数的调用形式分为三种:
# 1. 语句形式:
foo()
# 2. 表达式形式:
m = my_min(1, 2) # 将函数调用的返回值赋值给m
n = 10*my_min(1, 2) # 将调用函数的返回值✖10的结果赋值给n
# 3. 函数调用作为参数的形式:
# my_min(2,3) # 作为函数my_min的第二个参数,实现了取1,2,3中较小赋值给m
m = my_min(1, my_min(2, 3))
模块
模块定义
1.什么是模块
模块一系列功能的集合体
模块分为四种通用的类别
1 使用python编写的.py文件
2 已被编译为共享库或DLL的C或C++扩展
3 把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)
4 使用C编写并链接到python解释器的内置模块
模块来源
模块有三种来源:
1 python自带的模块/库
内置模块
标准库
2 第三方的库
3 自定义库
如何使用模块
import (关键字) XXX 你需要导入的模块
from ... import
常用模块
time模块
# 时间戳
import time
time.time() 距1970元年的时间秒数
# 格式化的字符
print(time.strftime('%Y-%m-%d %H:%M:%S'))
# 结构化时间
obj = time.localtime() # 以当地的时区打印时间,全部
obj2 = time.gmtime() # utc
random模块
import random
print(random.random()) # 产生随机数
print(random.randint(1,3)) # 产生1-3之间随机整数
print(random.randrange(1,3)) # 生成从1到3之间的随机整数
print(random.choice([11,"aaa",333])) # 从序列中随机选取一个元素
print(random.sample([11,"aaa",333,444],2)) # 列表的指定长度的随机数,但是不会改变列表本身的排序:
print(random.uniform(1, 3)) # 产生1到3之间的随机浮点数
# 验证码小程序
import random # 导入随机数模块
def make_code(size) # 定义一个函数用来封装验证码程序 函数里面的参数为验证码的长度
res = '' # 定义一个空变量接受验证码
for i in range(size): # 定义一个循环,获取随机出现的字母或者数字,size为循环的次数即验证码的长度
num = str(random.radint(0,9)) # 获取0-9之间的数字
s = chr(random.randint(65,90)) # 将ASCii 字母对应的数字进行转换
res += radom.choice([num, s]) # 将字母和数字拼接起来
return res # 函数返回值
print(make_code(6))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端