上节课作业

import os
#1.创建一个python.txt文件,文件内的内容为->文件名.后缀
with open('python.txt','w')as f:
    f.write('python.txt')
​
#2.将第一题的文件名进行更换
os.rename('python.txt','python_New.txt')
​
#3.读取内容进行大小写更换
with open('python_New.txt','r+')as f:  # 这里使用r+参数,可以使用写和读的功能
    data = f.read().swapcase()  # 将里面的内容互换大小写后保存在data变量中
    f.seek(0)  # 将光标放在最前面
    f.write(data)  # 覆盖前面的内容
    f.seek(0)   # 重新编写后再将光标放在最前面
    print(f.read())  # 读取现在文件里的内容

自定义函数

"""
函数
内置函数    python自带的函数直接调用即可  print() range() len()
自定义函数:无参函数、有参函数
    无参函数:没有定义参数的函数
    有参函数:定义了参数的函数,调用时需要输入实参
"""
​
"""
定义方法
def 函数名(形参):
    函数体代码块
    return "想要返回的值"
    
调用方法
函数名(实参)
​
形参:代表函数被调用时的接收的具体参数,没有实际值
实参:调用时输入的具体值的参数
"""
​
str1 = 'today is a good day'
# print(len(str1))  # 查看字符串的长度
​
# 使用自定义函数,实现查看字符串长度
def get_len(result):
    count = 0
    for i in result:
        count += 1
    return count
​
​
print(get_len(str1))
print(get_len)  # 单独打印函数名可以查看在内存中的十六进制内容输出形式的位置
# 函数的内容可以用变量接收,并且变量名能和函数名一样使用
func = get_len
print(func(str1))
​
# 必备参数:函数定义与调用时,里面的参数必须一致
def get_area(length,width):
    area = length * width
    return area
get_area(3, 4)
​
# 默认参数,函数定义参数时可以给参数一个默认值
def get_salary(hour,hourly_wage = 20):
    salary = hour * hourly_wage
    return salary
​
​
print(get_salary(10))
​
# 不定长参数  *args  **kwargs
def note(*args, **kwargs):
    print(args)  # 接收没有元素名的值,以元组形式保存
    print(kwargs)  # 接收有元素名的值,以键值对形式保存
​
note('今天感觉良好', '今天运气真好,捡到10块钱', pocket=10,luckly=1000)
​
"""
函数的作用域: 全局变量 和 局部变量
函数内部可以访问外部的变量,但是不能直接修改
"""
​
# 全局变量
num = 10
def get_data():
    global num  # 对全局变量使用global进行声明之后即可修改
    num += 1  # 无法直接修改全局变量的值
    print(num)
​
get_data()
​
# 局部变量:嵌套函数内的变量
def func1():
    data = 1
    def func2():
        nonlocal data  # 对局部变量使用nonlocal进行声明之后即可修改
        data += 1  # 无法直接修改局部变量的值
        print(data)
    func2()
func1()
​
# 函数的闭包:将嵌套函数的内部函数的函数名作为外部函数的返回值
"""
闭包在Python中的作用主要包括保护数据、实现装饰器(面向对象后的课程)、以及避免程序重复计算,提高程序的执行效率
"""
def test1():
    def test2():
        return '这是内部函数输出的值'
    return test2
​
x = test1()
print(x())  # 调用时无需再调用内部函数名,同时保护代码不被外部程序访问和修改
​
​
# 递归函数和匿名函数
# 递归函数:创造函数,以计算数字的阶乘
def count(n):
    if n <= 1:
        return 1
    else:
        return n * count(n-1)
​
​
print(count(5))
​
# 匿名函数:无需使用def关键字定义函数,使用lambda将函数写成一行,用变量接收,并且变量作为函数名
​
compute = lambda x,y:x**y
print(compute(3, 2))
​
li = ['1','3','2','10','7','5']
li.sort(key=lambda x:int(x))  # 字符串类型无法进行排序时,使用匿名函数对内容进行操作
print(li)

文件操作

"""
文件操作
使用open()函数对文件进行操作
open(文件路径,访问模式)
​
文件路径
    绝对路径:文件路径的全路径,从磁盘开始至文件的位置
    相对路径:文件路径的部分路径,文件位置之间的内容大多可以用两个英文句号代替: ..
访问模式
r 只读(read)  r+(先清空文件内容后,进行写入和读取的操作)
w 只写(write) w+(先清空文件内容后,进行写入和读取的操作)
a 追加(append)
b 二进制文件操作  rb 对二进制文件进行读取    wb 对二进制文件进行写入
对文件使用的功能
read()  读取
write()  写入
writelines() 写入多行内容,用中括号包裹,逗号分隔,每一个内容前添加转义字符\n
flush() 刷新当前文件的状态
close() 关闭文件
tell() 查看文件内光标目前的位置
seek() 修改光标的位置   seek(0) 将光标放到文字之前  seek(0,2) 将光标放到文字最后
"""
# 文件的写入
file = open('test01.txt', 'w')
file.write('hello python')
file.writelines(['\n第一行内容', '\n第二行内容'])
file.close()
​
# w+ 对于文件内容进行一个重写,清空文件内容后进行操作
file1 = open('test01.txt', 'w+')
file1.write('这是w+模式重写后的内容')
file1.seek(0)
print(file1.read())
file1.close()
​
# 文件的读取
file2 = open('test01.txt', 'r')
print(file2.read())
file2.close()
​
# r+ 无法创建不存在的文件
file = open(r'D:\softData\PycharmProjects\ChengQuEdu\day09阶段复习2\test01.txt', 'r+')
file.seek(0, 2)  # 可以将光标放在最后进行内容添加,否则指针默认在最前面,编写的内容会对原有内容进行一个覆盖
file.write('\n这是使用r+模式编写的内容')
print(file.tell())
file.seek(0)  # 将光标内容移至文字前面
print(file.read())
file.close()
​
# 文件内容的追加
file = open('test01.txt', 'a')
file.write('\n这是追加后的内容')
file.close()
​
# 二进制文件的写入和读取
# 写入
file = open('binary_file.txt', 'wb')
file.write(b'this is a binary data')
file.close()
​
# 读取
file = open('binary_file.txt', 'rb')
print(file.read())
file.close()
​
"""
上下文管理器
with open
相比使用变量进行文件操作,上下文管理器会自动关闭文件,同时格式会更规范
"""
with open('with_open_file.txt','w') as f:
    f.write('这是上下文管理器写入的内容')
​

IO流

"""
文件io流
可以在内存中创建临时文件以放置内容,不会占用本地空间
    导入io包即可使用方法:import io
使用方法
StringIO  生成字符串临时文件
BytesIO   生成二进制临时文件
​
getvalue()  获取临时文件里保存的所有内容
"""
import io
str_file = io.StringIO()
print(str_file.write('这是写入字符串临时文件中的内容'))  # 使用打印将会输出内容长度
print(str_file.getvalue())  # 获取文件中的所有内容
​
binary_file = io.BytesIO()
print(binary_file.write(b'this is binary data'))  # 操作二进制临时文件时需要在字符串前面加b,代表是二进制数据
print(binary_file.getvalue())

文件目录操作

"""
文件目录操作:
对于文件的目录和文件夹进行的一些操作
​
导入 os 包进行文件夹操作
import os
​
"""
​
import os
​
print(os.getcwd())  # 获取当前文件夹的文件路径:绝对路径
# chdir 改变当前的所在的路径
os.chdir(r'D:\softData\PycharmProjects\ChengQuEdu\作业')
print(os.getcwd())
​
# listdir 得到当前文件夹下所有的文件
print(os.listdir())
​
# mkdir 创建文件夹
os.mkdir('folder')
# rename 重命名文件/文件夹
os.rename('folder', 'rename_folder')
os.rename('test1.txt', 'test0.txt')
​
# remove 文件夹
os.rmdir(r'D:\softData\PycharmProjects\ChengQuEdu\day08-文件\rename_folder')  # 删除此文件夹
​
# 判断文件夹在当前目录是否存在,如不存在则创建,如存在则不进行任何操作
file = 'image'
if not os.path.exists(file):
    os.mkdir(file)

如何配置环境变量:上节课有很多的同学在安装第三方库时,出现了很多不一样的问题,这里教大家手动配置一下python解释器,以提前排除环境变量的问题

  • where python 可以查看是否配置好了python的路径

pip超时报错问题1

# pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple
​
# 因为是外网下载,很容易超时,后面接上国内源的下载镜像就行

pip超时报错问题2

# 因为pip本身也是一个库,有可能是pip库的版本太低,所以需要进行更新
python.exe -m pip install --upgrade pip

包的创建和导入

# 导入包
import module1
import module2
​
# 调用包中的函数功能
print(module1.func1())
print(module2.func1())
​
# 只导入包中的一个函数,并且可以使用as关键字给这一个函数取别名
from module1 import func2 as f2
​
print(f2())
# 自定义模块方法
import sys
# sys.path.append 只是临时将内容添加到pycharm识别的路径中,仅在当次运行时生效
# 内容更正:通常导入是一个文件夹,单独导入文件可能读取不到
sys.path.append(r'D:\softData\PycharmProjects\cls18\09 python文件目录操作、模块和包的创建与使用')
import test1
​
print(test1.func1())

module1

print('包1中被导入的运行结果')

def func1():
    return '这是包1中函数1的运行结果'

def func2():
    return '这是包1中函数2的运行结果'

module2

print('包2中被导入的运行结果')

def func1():
    return '这是包2中函数的的运行结果'

主方法main方法