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