python函数
2019-07-20 15:08:11 0 举报
AI智能生成
python文件操作及函数(一)
作者其他创作
大纲/内容
函数基础
定义
def func( )
def 关键字 -- 定义
func 函数名 -- 和变量定义规则一样
() 必须要写格式
: 声明语句结束
func 函数名 -- 和变量定义规则一样
() 必须要写格式
: 声明语句结束
def my_len()
函数体
函数体
函数的返回值
关键字 return
返回
def func( ):
print(123)
ruturn 456
print(123)
ruturn 456
有return
返回 return后的值
没return
返回 None
位置传参
def func(a):
print(a)
func(1)
print(a)
func(1)
a -- 形参
1 -- 实参
1 -- 实参
形参
函数定义的时候叫做形参
# 位置参数
# 默认参数
# 混合参数
# 位置参数
# 默认参数
# 混合参数
实参
函数调用的时候叫做实参
# 位置参数
# 关键字参数
# 混合参数
# 位置参数
# 关键字参数
# 混合参数
传参
将实参传递给形参的过程叫做传参
位置参数
def func(a,b):
pass
pass
默认参数
def func(a,b=1):
pass
pass
关键字参数
def func(b,c,a=3 ):
print(a,b,c)
func(a=5,b=3,c=2)
print(a,b,c)
func(a=5,b=3,c=2)
混合参数
def func(a,b,c)
print(a,b,c)
func(1,2,c=5)
print(a,b,c)
func(1,2,c=5)
函数的动态参数
*args
接收动态的位置参数
万能的(接受任意多个)的位置参数
在函数定义的时候叫做聚合
在函数中叫做打散
**args
接收动态的关键字参数
输出的是字典
万能传参
def func(*agrs,**kwargs):
print(agrs,kwargs)
func(1,2,3,4,5,6,7,8,a=1,b=2,c=3)
print(agrs,kwargs)
func(1,2,3,4,5,6,7,8,a=1,b=2,c=3)
函数的注释
name.__doc__
查看函数注释
name.__name__
查看函数命名
名称空间
命名空间分类
内置空间
print( ),len( ),input( )
全局空间
当前py文件需要开辟的空间存放在全局空间
局部空间
函数中开辟的空间就是局部空间
加载顺序
内置空间 - 全局空间 - 局部空间
取值空间
局部空间 - 全局空间 - 内置空间(找不到就报错)
作用域
内置空间 + 全局空间
局部空间
函数的嵌套
def func():
a = 1
def foo():
b = 2
print(b)
print(a)
def f1():
print(b)
return f1()
return foo()
print(func()) # 2 1 2 None
a = 1
def foo():
b = 2
print(b)
print(a)
def f1():
print(b)
return f1()
return foo()
print(func()) # 2 1 2 None
函数的互相引用
def func():
a = 1
foo()
print(a)
def foo():
b = 2
print(b)
func() # 2 1
a = 1
foo()
print(a)
def foo():
b = 2
print(b)
func() # 2 1
global
声明修改的是全局变量的值
nonlocal
在外层的函数中,修改局部空间的变量值.完全不涉及全局变量
只修改离它最近的一层,最近的一层没有变量继续向上找,直到找到最外层函数
文件操作
文件基础
创建一个文件"asdf"
f = open("asdf",mode="r",encoding="utf-8")
open( )
# 打开
file
# 文件的位置(路径)
mode
# 操作文件的模式
encoding
# 文件编码方式
f
# 文件句柄
文件的打开和关闭
f = open("asdf",mode="r",encoding="utf-8")
print(f.read())
f.close()
print(f.read())
f.close()
with open("asdf","r",encoding="utf-8")as f :
文件的操作模式
r rb r+
w wb w+
a ab a+
文件具体操作
f = open("文件的路径(文件放的位置)",mode="操作文件的模式",encoding="文件的编码")
f 是文件句柄
文件详解
路径
绝对路径
例如: f = open("F:\s24\day08\asdf","r",encoding="utf-8")
print(f.read())
print(f.read())
相对路径
例如: f = open("../day03/asdf","r",encoding="utf-8")
print(f.read()) # / 返回上一层
print(f.read()) # / 返回上一层
路径转义
所有 \ 前加 \ ,使用\\ 进行转义
路径引号前加 r
文件操作的模式
r w a
r
读文本
read( )
全部读取
read(3)
看文件的前三个字符
readline( )
读取一行(自带换行符)
readlins( )
一行一行读取存放在列表
w
清空,写
步骤
1.先清空文件
2.写入文件
a
追加
在源文件的基础上进行添加
rb wb ab
rb
读字节
wb
清空,写
ab
追加
r+ w+ a+
r+
读写
错误的方式是写读
应先读后写
应先读后写
w+
清空写,读
清空文件 写入
读取内容(默认为空)
a+
追加写,读
先写后读
注意点
(a,ab,a+)将光标移动到某个位置进行,写入的时候还是在文件的末尾
在r+模式下. 如果读取了内容. 不论读取内容多少. 光标显示的是多少.
再写入 或者操作文件的时候都是在结尾进行的操作.
再写入 或者操作文件的时候都是在结尾进行的操作.
其他操作
光标
tell( ) 查看光标位置
返回的是字节数
seek( ) 移动光标
seek(0,0) 移动到文件头部
seek(0,1) 当前位置
seek(0,2) 移动到文件末尾
seek(3) 按照字节进行移动(具体移动参照编码集)
文件修改
创建一个新文件
将文件中的内容替换
替换后的内容写入新文件
改变文件名
with as
with open("文件路径","操作模式",编码")as f:
操作文件
操作文件
优点
可以同时打开多个文件
能够自动关闭文件
函数名的第一类对象及使用
函数名可以当做值被赋值
def func():
print(1)
print(func)
a = func
a() # <function func at 0x000001A24F8E9B70> 1
print(1)
print(func)
a = func
a() # <function func at 0x000001A24F8E9B70> 1
函数名可以当做元素存放在容器中
def func():
print(1)
lst = [func,func,func]
for i in lst:
i() # 1 1 1
print(1)
lst = [func,func,func]
for i in lst:
i() # 1 1 1
函数名可以当做另一个函数的参数
def func(f):
f()
def foo():
print(123)
func(foo) # 123
f()
def foo():
print(123)
func(foo) # 123
函数名可以当做返回值
def func():
def foo():
print(123)
return foo
a = func()
a() # 123
def foo():
print(123)
return foo
a = func()
a() # 123
格式化f""
f""格式化的作用
填充字符串
填充变量
填充计算公式
填充表达式
填充大括号
迭代器
可迭代对象
list,dict,str,set,tuple
可迭代对象 使用灵活
查看是否可迭代
方法一
list.__iter__()
方法二
查看源码
方法三
print(dir( ))
优点及缺点
优点
使用灵活
可以直接查看值
缺点
消耗内存
迭代器
文件句柄"f"是个迭代器
f = open("xxxx","w")
f.__iter__()
f.__next__()
f.__iter__()
f.__next__()
将可迭代对象转换成迭代器
lst = [1,2,3,4,6]
new_list = lst.__iter__()
new_list.__iter__()
new_list.__next__()
new_list = lst.__iter__()
new_list.__iter__()
new_list.__next__()
for循环的本质
s = "12345"
new_s = s.__iter__()
while True:
try:
print(new_s.__next__())
except StopIteration:
break
new_s = s.__iter__()
while True:
try:
print(new_s.__next__())
except StopIteration:
break
递归
定义
自己调用自己
有明确的终止条件
递与归
递
一直执行直到碰到结束条件
归
从结束条件开始往回退
生成器
生成器与迭代器的区别
迭代器是python中内置的一种节省空间的工具
生成器的本质就是一个迭代器
迭代器是python自带的
生成器是程序员自己写的
定义
基于函数,函数中存在yield就是一个生成器
函数名 + ( )就是产生一个生成器
def func():
if 3>2:
yield "你好"
if 4>2:
yield "我好"
yield "大家好"
g = func()
print(g.__next__())
print(g.__next__())
print(g.__next__())
if 3>2:
yield "你好"
if 4>2:
yield "我好"
yield "大家好"
g = func()
print(g.__next__())
print(g.__next__())
print(g.__next__())
优点及注意事项
节省空间 -- 惰性机制
不能逆行
一次性
一个next对应一个yield
yield 能够进行返回内容,还能够返回多次
yield能够临时停止循环
yield 能够记录执行的位置
不能逆行
一次性
一个next对应一个yield
yield 能够进行返回内容,还能够返回多次
yield能够临时停止循环
yield 能够记录执行的位置
输出方式
def foo():
for i in range(10):
pass
yield i
count = 1
while True:
yield count
count += 1
g = foo()
print(next(g)) # ---- 推荐使用
print(next(g))
print(next(g))
print(next(g))
print(next(g))
for i in range(10):
pass
yield i
count = 1
while True:
yield count
count += 1
g = foo()
print(next(g)) # ---- 推荐使用
print(next(g))
print(next(g))
print(next(g))
print(next(g))
坑
最后输出时调用函数要找变量接收
否则会循环输出
否则会循环输出
生成器应用场景
一次性打印全部结果,数据过大时特别消耗内存
def func():
lst = []
for i in range(100000):
lst.append(i)
return lst
print(func())
lst = []
for i in range(100000):
lst.append(i)
return lst
print(func())
每次打印可选的一部分,不用的部分不打印,节省空间
def func():
for i in range(100000):
yield i
g = func()
for i in range(50):
print(next(g))
for i in range(100000):
yield i
g = func()
for i in range(50):
print(next(g))
yield from
将一个可迭代对象的元素逐个返回
def func():
lst1 = ["牛羊配","老奶奶花生米","卫龙","虾扯蛋","米老头","老干妈"]
lst2 = ["小浣熊","老干爹","亲嘴烧","麻辣烫","黄焖鸡","井盖"]
yield from lst1
yield from lst2
g = func()
print(next(g))
print(next(g))
print(next(g))
print(next(g))
# 牛羊配
# 老奶奶花生米
# 卫龙
# 虾扯蛋
lst1 = ["牛羊配","老奶奶花生米","卫龙","虾扯蛋","米老头","老干妈"]
lst2 = ["小浣熊","老干爹","亲嘴烧","麻辣烫","黄焖鸡","井盖"]
yield from lst1
yield from lst2
g = func()
print(next(g))
print(next(g))
print(next(g))
print(next(g))
# 牛羊配
# 老奶奶花生米
# 卫龙
# 虾扯蛋
所以循环第一个列表直到全部打印再循环第二个
推导式
列表
循环模式
[i for i in range(20)]
筛选模式
[i for i in range(20) if i % 2 == 0]
[变量(加工后的变量) for循环 加工方式]
生成器
循环模式
g = (i for i in range(20))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
转换成列表
list((i for i in range(20)))
筛选模式
(变量(加工后的变量) for循环 加工条件)
字典
循环模式
{i:i+1 for i in range(10)}
筛选模式
{i:i+1 for i in range(10) if i % 2 == 0}
{键:值 for循环 加工条件}
集合
循环模式
{i for i in range(10)}
筛选模式
{i for i in range(10) if i % 2 == 0}
{变量(加工后的变量) for循环 加工条件}
内置函数一
eval() 执行字符串类型的代码,并返回最终结果
exec() 执行字符串类型的代码
以上两个函数过于强大 工作中禁止使用
hash() 获取一个对象(可哈希对象:int,str,bool,tuple)的哈希值
help() 函数用于查看函数或模块用途的详细说明
callable() 函数用于检查一个对象是否是可调用的,如果返回True,仍然可能调用失败;但如果返回False,调用对象object绝对不会成功
int() 函数用于将一个字符串或数字转换为整型
float() 函数用于将整数和字符串转换成浮点数
complex:函数用于创建一个值为 real + imag*j 的复数.如果第一个参数为字符串,则不需要指定第二个参数
bin() 将十进制转换成二进制
oct() 将十进制转换成十六进制字符串并返回
divmod() 计算除数与被除数的结果,返回一个包含商和余数的元组
round() 保留浮点数的小数位数,默认保留整数
pow() 求x**y次幂
bytes() 用于不同编码之间的转化
ord() 输入当前编码的位置数字找出其对应的字符
repr() 返回一个对象的string形式
all() 可迭代对象中,全都是True才是True
any() 可迭代对象中,有一个True 就是True
0 条评论
下一页