def test(): print ('in the test1') def test(): print ('in the test') return test1 res=test() print(res()) #result: in the test in the test1 None
匿名函数
lambda x:x+1 def calc(x): return x+1 func=lambda x:x+1 print(func(10)) lambda x,y,z:(x+1,y+1,z+1)
函数式编程
三种编程方法论:面向过程 函数式 面向对象
函数式=编程语言定义的函数+数学意义的函数(最早出现)
不可变 不用变量保存状态 不修改变量
高阶函数:把函数当做参数传给另外一个函数
返回值中包含函数
尾调用 在函数最后一步调用另外一个函数
map函数
1
num_l=[1,2,3,5,9] def map_test(array): ret=[] for i in num_l: ret.append(i**2) return ret ret = map_test(num_l)
2
def add_one(x): x=x+1 return(x) def map_test(func,array): ret=[] for i in num_l: res=func(i) res.append(res) return ret print(map_test(add-one,num_l)) ##filter函数 move_people=['sb_1','sb_2','sb_3','sb_4','sb_5'] def filter_test(array): ret=[] for p in array: if not p.startwith('sb'): ret.append(p) return ret
filter(func,array)
print(list(filter(lambe n:not n.endwith('sb'),move_people)))
reduce函数
from functools import reduce num_l=[1,2,3,100] def reduce_test(array) res=0 for num in array: res+=num return res def rudece_test(func,array,init=100): #初始值100 if init=None: pass else: res=init for num in aarray: res=func(res,num) return res
map 在原有数据基础处理,得到一个'列表',元素位置与原来相同
filter 列表中所有值筛选 最后得出一个
判断每个元素的布尔值,如果TRUE则留下来
reduce 处理一个序列 合并操作 得出结论
reduce 用法
from functools import reduce num_l=[1,2,3,100] print(reduce(lambda x,y:x+y,num_l,1)) print(reduce(lambda x,y:x+y,num_l))
内置函数:
abs:取绝对值
all:跟序列 序列中每一个元素取出做布尔运算
any:只要有一个是真值 返回TRUE
bin:把十进制转换为二进制
bool:空、none、0布尔值为FALSE
byres:把一个字符串转换为字节形式
chr:给数字 打印acrii表中对应
dir:查看对象的内置方法
divmod:divmod(10,3)10/3取余数
eval:把字典转换为字符串
把字符串中数字运算出来
hash:可哈希的数据类型是不可变数据类型
哈希是一种算法 得出一个哈希值
不管传入参数多长 结果长度固定
不可根据哈希值反推
help:查看方法的使用方式
hex:十进制转16进制
oct:十进制转八进制
isinstance:XX是不是XXX类型 返回布尔值
globals:打印全局变量
locals:打印局部变量
zip:如同拉链
print(list(zip(('a','n','c'),(1,2,3))))
max:
for item in zip (age_dic.value(),age_dic.keys()): print(item) print(list(max(zip(age_dic.calues(),age_dic.keys())))) #既有key又有value l=[ (5,'e'), (1,'b'), (3,'a'), ] print(list(max(l))) max('a100','b20','c60')#但不同类型数据不可比较 people=[ {'name':'alex','age':1000}, {'name':'AAA','age':100} {'name':'AA','age':10} {'name':'A','age':1}] max(people,key=lambda dic:dic['age']) ret=[] for item in people: ret.append(item['age']) print(ret) max(ret)
ord:给acrii表中字符 打印对应数字
pow:两个参数 X的Y次方
三个参数X的Y次方对Z取余
repr:类似print代表的str????
reverse:颠倒顺序 反转
round:四舍五入
set:编程集合的形式
slice:切片 字符?
slice(1,4,2)#1-4步长2
sorted:排序 比较大小排序 不同类型会报错
people=[ {'name':'alex','age':1000}, {'name':'AAA','age':100} {'name':'AA','age':10} {'name':'A','age':1}] print(sorted(people,key=lambda dic : dic['age']))
str:转换为字符串
type:判断类型返回布尔值
vars:def test():
msg="jkafhagakjd"
print(locals()) #打印出 成为字典形式
_import_():
import:引用模块 每个py文件都是模块 其中有函数? 拿来直接调用
_import_()导入字符串类型
文件处理流程
1 打开文件 得到文件句柄并赋予一个变量
2 通过句柄对文件进行操作
3 关闭文件