【Python】基础部分 -- 函数
一、 函数说明
1. 定义:
函数就是将一组语句的集合通过一个名字(函数名)封装起来,想要执行函数,只需要调用函数名。
2. 特性:
l 减少重复代码
l 使程序变得可扩展
l 使程序变得易维护
3. 函数参数
1) 型参
(定义阶段) #被调用时才分配内存单元,调用结束即释放所分配的内存单元
实参(调用阶段传入)
2) 位置参数
3) 关键字参数
#关键字参数必须放在位置参数后
4) 默认参数
def abc(x=1):
5) 非固定参数
*args **kwargs
4. 函数返回值
return ..
5. 函数变量作用域
1) 局部变量
默认局部变量:数字 字符串 布尔型
2) 全局变量
global 变量名 指定全局变量
其他类型的成员则可被修改
3) 作用域
Python中,函数就是一个作用域,作用域限定变量的影响范围
代码定义完成后,作用域已经生成,作用域line中往上查找
6. 匿名函数
lambda *args,**kwargs:args,kwargs
实例:
with open('abc.txt','r',encoding='gbk') as f:
p = list(map(lambda args:args.strip().split('d'),f))
print(p)
7. 高阶函数
变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收
(装饰器) 输入参数为函数,或者 返回函数
1) 嵌套函数
函数里面定义函数
(闭包)
2) 函数递归
作用:解决算法问题函数里面调用自己
*递归必须有一个明确的结束条件,不然会成死循环
*每进入更深一层递归,问题规模相比上次递归都应该有所减少
*递归执行效率不高,递归层次过多会导致栈溢出
PS: sys.setrecursionlimit() 设置递归次数上限
举例:阶乘: return n*fun(n-1)
尾递归:return时,进行递归返回函数自身,此方法不会压栈,但Python无用
二、 内置函数
1. open() : 文件处理
1) 使用
open
#f = open(file='path',mode='r',encoding='utf-8')
#data = f.read()
#f.close()
其中
file 路径可以是相对路径,也可以是绝对路径
2) 参数
File 指定文件路径
file = path ,
path为字符串,可以是相对路径,也可以是绝对路径。
Mode 指定打开模式
mode 普通(w r a) 支持中文, \r \n \t不可见, 换行符根据系统win为\r\n
特殊(wb,rb,ab) b模式不支持中文, \r \n \t可见, 而且输入换行符为\n
w+:文件0开始,首次不可读
r+:文件0开始,首次写入不体现
a+:文件末尾开始,支持随时读写
Encondig 指定编码/解码模式
'gbk'
'utf-8'
不写,默认utf-8
3) 适用模块
res = chardet.detect(open('path','rb').read()) #智能检测文件编码模式#返回一个字典{encoding:'',confidence:'',}
os.rename(old_name,new_name) #修改文件名
str.replace(old_str,newstr) #替换字符串的制定内容
4) 其他相关处理函数
光标位置 f.tell()
移动光标 f.seek(0) #按字节操作,gbk 2 字节1个字,utf-8 3字节1个字
可seek f.seekable()
可读 f.readable()
可写 f.writeable()
内核索引 f.fileno()
刷到磁盘 f.flush()
只读一行 f.readline()
截断文件 f.truncate() #从头开始截取
2. print() :打印
end= 设置结束符
sep= 设置连接符、
file= 指定输出文件流,打开方式w 或 a 直接影响文件是重写还是修改
flush= 决定文件流的输出位置,True为seek(0), False为seek(-1)
3. 查询类
callable(help()) #是否可调用
help(callable()) # 帮助信息
dir() #当前程序所有变量名
vars() #当前程序所有变量名及值
id() #显示变量的id
locals() #函数的局部变量
globals() #查询全局变量
4. 操作类
sorted() 排序 (可迭代对象,方法,是否翻转)
eval() 执行 单行 字符串代码
exec() 执行 多行 字符串代码
format() 打印格式
map() 按照方法遍历迭代对象
filter() 按照方法筛选迭代对象
ruduce() 按照方法一次取多个元素进行运算,第三参数为起始位置(functools中)
slice() 设置切片起止及步长
enumerate() 给列表编码
zip() 把两个列表合成一个元素为(a[x],b[x])一一对应的列表
5. 运算类
min() 最小值
max() 最大值
abs() 绝对值
sum() 求总和
pow() 求幂
divmod() 取整除数及余数
all() 所有都为真
any() 任何一个为真
complex() 复数
round() 保留n位小数
hash() 计算hash值
6. 转码类
ascii() 转ascii码
hex() 转16进制码
oct() 转8进制
ord() 字符转ascii值
chr() ascii值转字符
7. 转换类
int() 转整形
float() 转浮点型
bytes() 转字节
str() 转字符串
bool() 转布尔型
list() 转列表
tuple() 转元组
dict() 转字典
set() 转集合
frozenset() 固定变量
delattr()
hasattr()
getattr()
setattr()