1.文件操作
1.1 一般常用的就是r+模式,编码可以是文本形式也可以是二进制形式
1.2 seek,tell,truncate都是针对是字节 而read( )则是读取的是字符
1.3 flush( )是用来及时对文件进行修改保存的,以免断电丢失
1.4文件修改有两种形式,第一是占用内存将内容全部读取出来,再去修改,第二种是占据磁盘空间利用两个文件操作
2.函数
1.内置函数
python自带的一些常用的函数,比如sorted( )排序,max( )取最大值等等
2.自定义函数
def func():
print('我是自定义函数')
A.命名空间
i.内置空间 存储python解释器自带的一些内置变量名、内置函数名、内置模块名
ii.全局空间 存储全局定义的变量、函数等名字
iii.局部空间 存储函数内部的变量、函数等名字
B.作用域链条(LEGB)
L: 局部作用域,比如局部变量在函数执行完毕就自动释放
E:相邻的局部作用域,比如嵌套函数中的内部函数中可以使用其外部函数中的变量
G:全局作用域,比如函数内部可以使用全部变量(只读),若是想修改必须要显式声明为global变量
B:内置作用域,比如解释器自带的一些变量和函数名等
C.形式参数和实际参数(形参和实参)
1.位置参数 args
2.动态位置参数(元组) *args
3.关键字参数 kwargs
4.动态关键字参数(字典) **kwargs
PS:1.传参顺序如上,先位置后关键字,先固定后动态
2.注意位置动态传入时会变成元组,如果想对传入的参数进行修改就不能使用了,因为元组是只读列表
D.匿名函数、嵌套函数、高级函数、递归函数、闭包函数、装饰器函数
1.匿名函数
# 匿名函数
# lambda匿名函数 一般节省代码量一次性使用
print(list(map(lambda x: x*x, [1, 2, 3])))
2.嵌套函数
#嵌套函数就是函数中套着一个函数
def outer():
print('我是外部函数')
def inner():
print('我是内部函数')
inner()
outer()
3.高级函数
# 高级函数的定义是什么?
# 要么是以一个函数名作为另一个函数的参数
# 要么就是将一个函数名作为返回值
# 函数名作为参数传递
def inner():
print('我是参数')
def outer(func):
func()
outer(inner) # 输出我是参数
# 函数名作为返回值
def outer():
def inner():
print('我是返回值')
return inner
inner = outer()
print(inner) # 返回的是内部函数的内存地址
inner() # 输出我是返回值
4.递归函数
# 递归函数(顺便说一下尾递归优化) 递归必须要有一个递归结束语句
# 计算阶乘 如计算15的阶乘
def func(n):
if n == 1:
return 1
return n*func(n-1)
print(func(15)) # 返回15*14*13*12*11*10*9*8*7*6*5*4*3*2*1 ==1307674368000
# 尾递归优化的原理就是:内存的释放
# 即上一次递归的结果不影响下一次递归,这样上一次递归结束就是释放内存
#
def func(n):
if n == 0:
return
func(n-1)
print(n)
func(15) # 会依次打印出1,2,3....15
5.闭包函数
# 闭包函数:就是内部函数在被返回后再去调用使用的还是外部函数的变量
n = 12
def outer():
n = 15
def inner():
print(n)
return inner
inner = outer()
inner() # 打印的是outer函数中的局部变量15。而不是12
6.装饰器函数
# 装饰器函数:其实就是在原生函数上扩展功能
# 扩展功能函数不带参数
def login(func):
def inner(arg):
__name = 'wbj'
__pwd = '123'
name = input('请输入你的用户名:>>>').strip()
pwd = input('请输入你的密码>>>').strip()
if name == __name and pwd == __pwd:
print('恭喜你验证通过')
flag = 1
if flag:
func(arg)
return inner
@login
def user(name):
print('欢迎{}进入用户系统'.format(name))
@login
def boss(name):
print('欢迎{}进入boss系统'.format(name))
user('luffy')
# 扩展功能函数带参数
def login(name):
print('我是{}'.format(name))
def outer(func):
def inner(arg):
__name = 'wbj'
__pwd = '123'
name = input('请输入你的用户名:>>>').strip()
pwd = input('请输入你的密码>>>').strip()
if name == __name and pwd == __pwd:
print('恭喜你验证通过')
flag = 1
if flag:
func(arg)
return inner
return outer
@login('老板')
def user(name):
print('欢迎{}进入用户系统'.format(name))
@login('员工')
def boss(name):
print('欢迎{}进入boss系统'.format(name))
user('luffy')
3.生成器和迭代器
A.生成器
# 两种方式的生成器创建
# 1. 表达式 最多是三元运算 两个步骤需求
# 2. 函数式 可以进行多个步骤需求
# 表达式
b = (i if i < 5 else i*i for i in range(5))
print(b) # 返回生成器b的内存地址
print(next(b)) # 取生成器中的值
# 函数式 斐波那契数列 1 1 2 3 5 8 13 21 34 55 89 144
def fib(max):
n, a, b = 0, 0, 1
while n < max:
sign = yield b
a, b = b, a+b
n = n + 1
if sign == '你好':
print('被我截断')
return 'done'
f = fib(12)
print(f) # 返回f生成器的内存地址 注意此时这个函数已经是生成器了
print(next(f))
print(f.send('你好'))
for i in f:
print(i)
# 总结生成器的使用:next,send,for循环都可以以此得到生成器的值
# next与send用途:都是唤醒程序执行,返回生成器的下一个值
# send可以发送自定义消息,next则是默认发送None消息,for循环可以遍历生成器中的每个数值
B.迭代器
from collections import Iterable
from collections import Iterator
print(isinstance([], Iterable))
print(isinstance('abc', Iterable))
print(isinstance('abc', Iterator))
# str list set dict 是可迭代的对象 但是不是生成器
# 生成器都是迭代器 即都是可迭代的对象
# 迭代器是指可迭代对象可以使用next()函数进行依次访问取值的
print(isinstance(iter('abc'), Iterator))
print(iter('abc'))
a = iter('abc')
print(next(a))
print(list('abc'))
4.模块的使用
主要用的比较多的就是logger日志模块和序列化模块(json,pickle等)
json:序列化对象一般 是基本数据类型 如str,list,dict,int/bool等
pickle:序列化对象是python的全部数据类型
json跨平台性好,基本上目前的编程语言都有这种数据格式