标签:生成式 扩展 用户输入 register none 关键字 tip 知识点 x86
字符串的内置方法
strip
split
replase
format
upper
lower
# 如果想查看更多的字符串方法,可以再pycharm中通过字符类型后面加‘.‘的方式查看
str.自动调试可以调用的内置方法
列表的内置方法
append
insert
extend
sort
len
字典的内置方法
d[‘key‘]=‘value‘
可变类型与不可变类型
就看内存地址是否可变
元组与集合
元祖你可以看做不可改变元素的列表
集只有在去重和做关系运算的时候可能会用到
字符编码
计算机中记录了人类的字符与01码的对应关系,作为一个参考标准
ASCII 第一个编码表
GBK 中国的编码表
unicode 万国码
utf8 存储使用编码
文件操作
with open(文件路劲,模式,编码)as 变量名:
代码模块
绝对路劲与相对路径
绝对路劲
相当于坐标信息,任何情况下都可以根据绝对路劲获取位置信息
相对路劲
获取位置信息需要有一个参考信息
字符的转义
斜杠与一些字符具有特殊含义
\n换行
\t制表符
用r‘\n\‘t
作业讲解
l = [‘jason‘, ‘tony‘, ‘jerry‘, ‘tom‘, ‘kevin‘]
l = [‘jason‘, ‘tony‘, ‘jerry‘, ‘tom‘, ‘kevin‘]
# 1.for循环
# # 先定义一个空列表用来存储即将产生的新数据
# new_l = []
# # for循环l里面的每一个元素然后操作产生新数据
# for name in l:
# # 转大写并存入列表中
# new_l.append(name.upper())
# print(new_l)
# 2.列表生成式
# new_ll = [name + ‘NB‘ for name in l]
# print(new_ll)
#####################################################
# 扩展练习
l1 = [11, 22, 33, 44, 55, 66, 77, 88, 99]
# 需求:筛选出大于33的元素
# 1.for循环
# new_l1 = []
# # for循环获取l1里面的每一个元素
# for i in l1:
# # 判断元素是否大于33
# if i > 33:
# # 如果大于33则添加到新列表中
# new_l1.append(i)
# print(new_l1)
# 2.列表生成式
new_l2 = [i for i in l1 if i > 33]
print(new_l2)
#####################################################
r
只读模式,只能读取内容,不能写入
w
只写模式,只能写入内容,不能读取
a
只追加模式,只能写入内容,并且不会删除原文件内容
1.文件路劲不存在,r模式会直接报错
with open(r‘b.txt‘,‘r‘,encoding=‘utf8‘) as f:
pass
# pass补全语法结构但是本身没有任何含义
# 报错 [Errno 2] No such file or directory: ‘b.txt‘
2.文件路劲存在:打开改文件只支持读内容,不能写入
with open(r‘b.txt‘,‘r‘,encoding=‘utf8‘) as f:
print( f.read())
# 可以读取
f.write(‘你好啊‘)
# 不能写入 not writable
1.文件路劲不存在:自动创建文件
with open(r‘bb.txt‘, ‘w‘, encoding=‘utf8‘) as f:
pass
2.文件路劲存在,格式化后开始写入内容
with open(r‘bb.txt‘,‘w‘, encoding=‘utf8‘) as f:
f.write(‘jasonNB‘)
# 不支持读 not readable 只支持写
‘‘‘
会先清空内容,再写入内容
虽然w模式打开存在的文件会清空内容,
但是工作中我们主要是去创建新文件写入内容
‘‘‘
1.文件路劲不存在,会自动创建文件
with open(r‘c.txt‘, ‘a‘, encoding=‘utf8‘) as f:
pass
2.文件存在,不会清空内容,在文件末位追加新的内容
with open(r‘c.txt‘, ‘a‘, encoding=‘utf8‘) as f:
print(f.read)
‘‘‘
可以写入,内容添加至末位,换行要使用\n
不可以读 not readable
‘‘‘
t
文本模式(文件默认就是t模式)
rt
with open(r‘b.txt‘,‘rt‘,encoding=‘utf8‘) as f:
wt
with open(r‘b.txt‘,‘wt‘,encoding=‘utf8‘) as f:
at
with open(r‘b.txt‘,‘at‘,encoding=‘utf8‘) as f:
1.该模式只能操作文本文件
2.读写都是以字符串为单位
3.都需要加encoding参数确认编码
b
二进制模式
rb
open(r‘b.txt‘,‘rt‘)
wb
open(r‘b.txt‘,‘wt‘)
ab
open(r‘b.txt‘,‘at‘)
1.该模式可以操作任意类型的文件
2.读写都是以bytes为单位
3.一定不能加encoding参数
针对二进制模式 rb wb ab 与rt wt at一样
with open(r‘a.txt‘, ‘rb‘) as f:
res = f.read()
print(type(res)) # <class ‘bytes‘>
res1 = res.decode(‘utf8‘)
print(type(res1)) # <class ‘str‘>
with open(r‘b.txt‘, ‘wb‘) as f:
f.write(‘大宝贝‘.encode(‘utf8‘))
# 包含中文需要使用关键字encode
f.write(b‘hello world‘)
# 如果是纯英文 只需要在最前面加一个b即可
# 利用b模式完成文件的拷贝功能
# 先利用rb读取图片数据
with open(r‘111.jpg‘,‘rb‘) as f:
data = f.read()
# 在利用wb写入到新文件
with open(r‘D:\333.jpg‘,‘wb‘) as f:
f.write(data)
################################################
# 中文按照编码表翻译成数字之后的结果
res = b‘\xe5\x86\x8d\xe5\x9d\x9a\xe6\x8c\x81\xe5\x9b\x9b\xe5\xa4\xa9,\xe5\xb0\xb1\xe5\x8f\x88\xe5\x8f\xaf\xe4\xbb\xa5\xe6\x94\xbe\xe4\xb8\x89\xe5\xa4\xa9\xe5\x81\x87\xe4\xba\x86!‘
# 按照指定的编码翻译成人类的字符 >>>:解码 decode
print(res.decode(‘utf8‘))
# 按照指定的编码将人类的字符翻译成数字 >>>:编码 encode
res1 = ‘再坚持四天,就又可以放三天假了!‘
print(res1.encode(‘utf8‘))
#################################################
# with open(r‘a.txt‘,‘r‘,encoding=‘utf8‘) as f:
# # print(f.read()) # 一次性将文件内容全部读取出来
# # print(f.readable()) # 判断文件是否可读
# # print(f.readlinwie()) # 一次只读文件一行内容
# # print(f.readlines()) # 结果是列表 一个个的元素就是一行行内容
#
# # print(f.read()) # 文件内是有一个光标的移动概念
# # print(f.read())
# # print(f.read())
#
# # 试想如果文件特别大,直接全部读取出来会产生内存溢出(爆满)
# ‘‘‘我们在读取文件内容的时候一般都是采用下列的方式一行行读取‘‘‘
# for line in f: # 确保内存中同一时间只会出现一行文件内容
# print(line)
with open(r‘b.txt‘,‘w‘,encoding=‘utf8‘) as f:
# print(f.write()) # 写内容
# print(f.writable()) # 判断文件是否可写
# print(f.writelines([‘jason\n‘,‘tony\n‘]))
f.flush() # 立刻将文件内容由内存保存到硬盘 相当于ctrl+s
# 方式1(当文件过大的时候可能会造成内存溢出)
# 先以rt模式读取文件内容
# with open(r‘c.txt‘, ‘r‘, encoding=‘utf8‘) as f:
# data = f.read()
# # 再以wt模式写入文件内容
# with open(r‘c.txt‘, ‘w‘, encoding=‘utf8‘) as f:
# f.write(data.replace(‘jason‘, ‘tony‘))
# 方式2:
# 先创建一个新的文件,循环读取老文件内容修改并写入新文件
# 之后将老文件删除,将新文件名修改为老文件名
import os
with open(r‘c.txt‘, ‘r‘, encoding=‘utf8‘) as read_f, open(r‘c.backend.txt‘, ‘w‘, encoding=‘utf8‘) as write_f:
for line in read_f:
write_f.write(line.replace(‘tony‘, ‘BigBaby‘))
# 删除c.txt
os.remove(r‘c.txt‘)
# 将c.backend.txt重命名为c.txt
os.rename(r‘c.backend.txt‘, r‘c.txt‘)
函数就是工具,我们提前准备好工具后就可以反复使用
在我们写代码的时候也是如此,有时候需要反复放入执行某一段代码,并且在不同的地方,反复执行,提前准备一个工具加以辅助,这个辅助工具就是函数
# 准备工具
def auth_login():
username = input(‘username>>>:‘).strip()
password = input(‘password>>>:‘).strip()
if username == ‘jason‘ and password == ‘123‘:
print(‘登陆成功‘)
else:
print(‘密码或用户错误,请重新输入‘)
# 使用工具
auth_login()
固定句式
def 函数名(参数1,参数2,。。。)
‘‘‘函数的注释‘‘‘
函数体代码
return 函数的返回值
1.def(必须的)
是定义函数的关键字
2.函数名(必须的)
遵循变量名的命名规范
3.参数(可选的)
在使用函数的时候还可以给函数内部传入外界数据
4.函数的注释(可选的)
用来解释函数的具体功能及参数含义(类似于说明书)
5.函数体代码(必须的)
其实就是函数真正的业务逻辑
6.return(可选的)
执行完函数之后,还可以给调用函数的人返回一些数据
###############################
1.函数必须先定义之后才能使用
auth_login()
# 不能在函数定义之前使用
# 需要先准备工具(先定义)
def auth_login():
username = input(‘username>>>:‘)
password = input(‘password>>>:‘)
if username == ‘jason‘ and password == ‘123‘:
print(‘登录成功‘)
else:
print(‘登录失败‘)
# 使用工具(后使用)
auth_login() # 使用函数的过程我们称之为"函数的调用"
2.函数在定义阶段只识别语法不执行函数体代码,只有在调用函数的时候才会执行
def index():
sdasd
print(‘from index‘)
###############################
1.不写return默认返回None
def index():
print(‘from index‘)
res = index()
2.写了return,后面跟上面就返回什么
def index():
print(‘from index‘)
return 123
res = index()
3.如果是多个元素会自动组织成元组返回
def index():
print(‘from index‘)
return 123,11,22,33
res = index()
# 函数体代码遇到return就会自动结束整个函数的运行(类似于break)
###########################################
我们在定义函数的时候括号内写的变量名称之为函数的形式参数
简称为"形参"
我们在调用函数的时候括号内写的真实数据称之为函数的实际参数
简称为"实参"
形参类似于变量名,实参类似于变量的值,在调用函数的时候会将实参赋值给形参
函数运行结束自动解除关系
def index(x, y): # x,y形参
"""
将1赋值给了形参x
将2赋值给了形参y
x = 1
y = 2
"""
if x > y:
print(x)
else:
print(y)
index(1,2) # 1,2实参
###########################################
既直接在对应的位置输入参数
针对位置参数,有几个就传几个,多了不行少了也不行
传值的时候就是按照前后顺序给形参赋值
使用‘=‘指名道姓的给对应的形参传值
def index(x, y):
print(x, y)
index(y=1, x=2)
# 1 2
# 全部按照关键字参数
index(1, y=2)
# 1 2
# 位置参数 关键字参数
index(x=1,2)
# SyntaxError:positional argument follows keyword argument
# 关键字参数必须写在位置参数的后面
index(11, x=2)
# TypeError: index() got multiple values for argument ‘x‘
# 一个形参只能赋值一次
在函数的定义阶段就已经给形参赋值,称之为默认参数
1.用户不传该参数就用默认的
2.用户传了就用传了的
def register(name, age, gender=‘male‘):
print(‘%s:%s:%s‘ % (name, age, gender))
register(‘jason‘, 18)
register(‘tony‘, 32)
register(‘jerry‘, 44)
register(‘lili‘, 18, ‘female‘)
需求1:函数无论接收多少个位置参数都可以正常执行
def index(a, *x):
print(x)
# *在形参中会接收多余的位置参数并组织成元组的形式赋值给*后面的变量名
index(1) # ()
index(1, 2) # (2,)
index(1, 2, 3, 4) # (2, 3, 4)
需求2:函数无论接收多少个关键字参数都可以正常执行
def index(b, **y):
print(y)
# **在形参中会接收多余的关键字参数并组织成字典的形式赋值给**后面的变量名,但是必须对b赋值
index(b=1) # {}
index(b=1, a=2, z=3) # {‘a‘: 2, ‘z‘: 3}
# 如何定义一个函数无论接收多少位置参数和关键字参数都可以运行???
def index(*x, **y):
print(x, y)
index() # () {}
index(1, 2, 3) # (1, 2, 3) {}
index(x=1, y=2, z=3) # () {‘x‘: 1, ‘y‘: 2, ‘z‘: 3}
index(1, 2, 3, x=1, y=2, z=3) # (1, 2, 3) {‘x‘: 1, ‘y‘: 2, ‘z‘: 3}
"""
在形参中书写在*和**后面的变量名可以自定义
但是我们会墨守成规的使用下列的命名方式
*args
**kwargs
def func(*args, **kwargs):
pass
"""
1.今日笔记抄写(最好是用自己的话整理知识点)
2.循环获取用户输入存入文件并且每一次都换行
3.将拷贝数据的概念封装成函数,文件路径由用户自己编写
利用文件操作和函数完成用户的注册和登录功能(思考题)
1.注册功能封装成函数
用户输入用户名和密码之后直接存入文件中
2.登录功能封装成函数
获取用户数据然后利用文件操作读取文件数据比对
"""
先完成主要逻辑
之后再考虑封装
"""
标签:生成式 扩展 用户输入 register none 关键字 tip 知识点 x86
原文地址:https://www.cnblogs.com/kailun-aixuexi/p/14271372.html