函数与模块的简单使用

今日内容概要

  • 文件修改的两种方式

  • 函数

  • 模块

  • 常用模块

文件修改两种方式

补充知识点

# 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))
       

os 模块

subprocess模块

posted on   zhifwu  阅读(85)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示