python 第六天 map filter reduce 与 内置函数

# 全局变量 局部变量 全局变量应当大写

name = "hm"

def chang_name():
	# globals name # 更改全局
	# 优先读取局部变量 其次读取全局
	name = "st" # 声明全局变量不能在局部变量之后
	# name.append(" st")
	print(name)
	
chang_name()
print(name) # 未改变name 局部无法更改全局 无法重新赋值 可以调用函数

# nonlocal 上一级变量 嵌套函数

# 递归 必须有一个明确的结束条件
def calc(count):
	if count:
		return count+calc(count-1)
	else:
		return 0

print(calc(10)) # 太深则报错 效率不高(保存当前状态) 占用内存
import time
time.sleep(0.1) # pause
print("*"*20)

# 函数返回
def cal1():
	pass
	
print(cal1) # 打印内存地址
# print(call()) # 不可执行

def cal2():
	def nar():
		print("nar")
	return nar # 返回函数地址

v = cal2()
v()
# 直接调用内层
cal2()()

# lambda 匿名函数

def cal1(x):
	return x+1

# 等价于
cal2 = lambda x:x+1 # lambda x:x+1 函数地址
print(cal2(1))
# lambda没有保存会自动销毁
# lambda不应当独自存在

# 编程方法论:面向过程 函数式 面向对象

# 函数式:高阶函数 无变量赋值 一步到位或者递归 将函数作为参数 返回函数地址
# 尾调用 函数的最后一步调用其他函数 return cal1(10)+1 不属于尾调用 先调用再求值

# map
num = [1, 2, 3, 4, 5, 6, 7]

def add_num(x):
	return x+1

def reduce_num(x):
	return x-1

def pf_num(x):
	return x**2

def map1(func, num):
	ret = []
	for i in num:
		ret.append(func(i))
	return ret

print(map1(add_num, num))
# 函数式编程
print(map1(lambda x:x+1, num))

print(map(lambda x:x+1, num)) # 可以传有名函数 和其他 可迭代对象
res = map(lambda x:x+1, num)

for i in res: # 迭代器 迭代一次后在最后
	print(i)

print(list(res))
res = map(lambda x:x+1, num)
print(list(res)) # python2 中直接生成列表 


# filter

movie_people = ["sb_A", "sb_B", "C", "sb_D"]

def sb_s(str1):
	return str1.startswith('sb') # endswith in 

def filter1(check, array):
	ret = []
	for p in array:
		if not check(p):
			ret.append(p)
	return ret

print(filter1(sb_s, movie_people))

print(list(filter(lambda str1:not str1.startswith('sb'), movie_people)))


# reduce

num = [1, 2, 3,]

def de(res, i):
	return res * i

def reduce1(de, num, checknum = None):
	if checknum:
		res = checknum
	else:
		res = 1
	for i in num:
		res = de(res, i)
	return res

print(reduce1(de, num))

print(reduce1(lambda res, i: res*i, num))

# reduce 需要导入
from functools import reduce
print(reduce(lambda res, i: res*i, num)) # 第三个参数初始值 可有可无


# 内置函数

abs(-1) # 绝对值
all([]) # 将列表中所有元素进行bool运算 所有的为真 为真 空 也为真
any([1, 2, 3, 0]) # 一个为真则为真
name = "hm"
# bytes(name,encoding='utf-8') # 手动转为二进制编码 返回字符串
# bytes(name,encoding='utf-8').decode('utf-8') # 解码 编码解码必须对应
# ascill码不能编中文
chr(49) # 转换为字符 ord 转换为ascill
dir(dict) # 打印某一对象下有哪些方法
print(dir(all))
divmod(10, 3) # 分页 共10条 每页三条
dic = {"k1":1, "k2":2}
dic_str = str(dic) # 转换为 字符串
eval(dic_str) # 提出字符串中的字典
ex = "1+2*3/2"
eval(ex) # 完成字符串中的 数据运算

# 可hash的数据类型为 不可变数据类型
hash("12345678") # 得到hash值 hash值长度固定 与参数无关 
# hash值不可反推得到原始数据
# 不同内容hash值不同
# 应用1 木马更改程序检测
print(help(all)) # 帮助 打印使用方法
bin(10) # 十进制转二进制
# hex 十进制转十六进制 oct 十进制转八进制
isinstance(1, int) # 判断数据类型
isinstance({}, dict)

name = "123"
globals() # 返回所有全局变量 __file__ 当前路劲
locals() # 打印当前级别

print(list(zip(("a","b","c"),(1, 2, 3))))
# 一一对应 形成元组 多余的舍弃
dic1 = {"k1":18, "k2":"name"} # 参数为序列 列表 元组 字符串 字典 集合
print(list(zip(dic1.keys(), dic1.values())))


max([1,2,3,4]) # 取最大值 min() 取最小值

# 奇技淫巧
dic2 = {"k1":18, "k2":30, "k4": 10, "k3":1}
# 找出最大的 键值对
print(zip(dic2.values(), dic2.keys()))
tp1 = zip(dic2.values(), dic2.keys()) # 返回地址 可迭代
print(list(max(tp1))) # 依次比较 从第一个元素开始比较

# 元素为字典时 字典间不能比较 无法遍历内部元素 处理方法
dic3 = [
	{"name":"hm", "age":18},
	{"name":"st", "age":17},
	{"name":"yh", "age":19}
]
max(dic3, key=lambda dic4:dic4["name"])

pow(3, 3) # 3次方
pow(3, 3, 2) # 3 ** 3 % 2

# repr 终端中输入即可打印 调用了repr()
# print 调用str()

# reversed 反转
# round 四舍五入
# set 集合

li = "hello"
li1 = li[2:4]
li2 = slice(2, 4) # 切片 第三个参数 限定长度
print(li[li2]) # 使用方法
print(li2.start)
print(li2.stop) # 切片的开始结束

# sorted() 从小到大排序 混合类型不能排序 第一个参数 需要排的数据
sorted(dic3, key=lambda dic4:dic4["name"])

dic4 = {"k1":200, "k2":300, "k3":500}
print(sorted(dic4, key=lambda key:-dic4[key])) # 由大到小

# type() 查看数据类型 if type(对象) is 类型: 
# range(100) 0-100
# range(10, 100) 10-100 左闭右开

# locals 打印当前级别变量 字典格式
# vars 无参时等价locals 有参 查看所有方法

import time # import 导入模块 文件名 time.py

# 工作名 字符串
# module_name = "str"
# __import__(module_name)
# import 会转换成 __import__

  

猜你喜欢

转载自www.cnblogs.com/huangmin-st/p/10099664.html