day-14
目录
1. 匿名函数
一种没有函数名的函数,因为没有函数名,所以无法直接调用,只能和某些方法结合在一起使用。
1.1 语法
lambda 参数:返回值
1.2 与内置函数连用
匿名函数通常与 max()、sorted()、filter()、sorted()
方法联用。
1.2.1 与 max()
连用
# 取出字典中薪资最高的人的名字
salary_dict = {
'nick': 3000,
'jason': 100000,
'tank': 5000,
'sean': 2000
}
# 直接使用 max() 方法---不能实现
print(max(salary_dict)) # 只能比较字典的 key
# 使用函数---可以实现
def func(k):
return salary_dict[k]
print(max(salary_dict, key=func))
# 使用匿名函数---可以实现
print(max(salary_dict, key=lambda name: salary_dict[name]))
# key=lambda name: salary_dict[name] 的作用
# 1. 首先明确 salary_dict 是可迭代对象,后面的语句会将 salary_dict 内的对象(键值对)逐个取出
# name: salary_dict[name]
# 2. 第一步得到了字典内所有的键值对,salary_dict[name] 将所有的值放在一起,进行 max() 函数的运算,得到这些值中的最大值,name 表示我们需要拿到的值
运行结果:
tank
jason
jason
Process finished with exit code 0
1.2.2 与 fileter()
连用
# 筛选出大于 5 的元素
lt = [1, 2, 3, 4, 5, 6, 7, 8, 9]
res = filter(lambda i: i > 5, lt)
res = list(res)
print(res)
运行结果:
[6, 7, 8, 9]
Process finished with exit code 0
1.2.3 与 map()
连用
# 通过某种关系产生映射,如数学中的han'shu
lt = [1, 2, 3, 4]
res = map(lambda item: item ** 2, lt)
res = list(res)
print(res)
运行结果:
[1, 4, 9, 16]
Process finished with exit code 0
1.2.4 与 sorted()
连用
# 将列表里的人按照薪资大小排序
salary_dict = {
'nick': 3000,
'jason': 100000,
'tank': 5000,
'sean': 2000,
}
print(sorted(salary_dict, key=lambda name: salary_dict[name],reverse=True))
运行结果:
['jason', 'tank', 'nick', 'sean']
1.2.5 自定义 sorted()
方法(了解)
# 了解
def sorted(iter, key=None, reverse=None):
iter.sort()
if key:
# key 是一个函数对象
lt = []
lt2 = []
for i in iter:
res = key(i)
lt.append(res)
lt2.append(i)
lt.sort()
lt3 = []
for i in lt:
for j in lt2:
if j[1] == i:
lt3.append(j)
if reverse:
lt3.reverse()
return lt3
if reverse:
iter.reverse()
return iter
salary_dict = {
'nick': 3000,
'jason': 100000,
'tank': 5000,
'sean': 2000,
}
salary_list = list(salary_dict.items())
print(salary_list) # [('nick', 3000), ('jason', 100000), ('tank', 5000), ('sean', 2000), ('z', 1000)]
print(sorted(salary_list, key=lambda i: i[1],
reverse=None)) # [('sean', 2000), ('nick', 3000), ('tank', 5000), ('jason', 100000)]
2. 内置函数
2.1 掌握
-
bytes()
# 将字符解码成二进制 res = bytes('中国', encoding='utf8') print(res)
运行结果:
b'\xe4\xb8\xad\xe5\x9b\xbd'
-
chr()
、ord()
# chr()参考ASCII码表将数字转成对应字符;ord()将字符转换成对应的数字。 print(chr(97)) print(ord('a'))
运行结果:
a 97
-
divmod()
# 返回两个数的商和余数 print(divmod(10, 4)) # 取整/取余
运行结果:
(2, 2)
-
enumerate()
# 迭代获得列表的索引和值 lt = ['a', 'b', 'c'] for i in enumerate(lt): print(it)
运行结果:
(0, 'a') (1, 'b') (2, 'c')
-
eval()
# 把字符串翻译成数据类型,字符串去掉引号满足什么数据类型的条件,就是什么数据类型 lis = '[1,2,3]' lis_eval = eval(lis) print(type(lis_eval),lis_eval)
运行结果:
<class 'list'> [1, 2, 3]
-
hash()
# 获取一个对象的哈希值 print(hash(0)) print(hash('0'))
运行结果:
0 3174128774324462608
2.2 了解
-
abs()
# 求绝对值 print(abs(-13))
运行结果:
13
-
all()
# 可迭代对象内元素全部为真,则返回真 print(all([1, 2, 3, 0])) print(all([]))
运行结果:
False True
-
any()
#可迭代对象中有一个元素为真,则为真 print(any([1, 2, 3, 0])) print(any([]))
运行结果:
True False
-
bin()
# 二进制转换 print(bin(17))
运行结果:
0b10001
-
oct()
# 八进制转换 print(oct(17))
运行结果:
0o21
-
hex()
# 十六进制转换 print(hex(17))
运行结果:
0x11
-
dir()
# 列举出所有模块的功能 import time print(dir(time))
运行结果:
['_STRUCT_TM_ITEMS', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'altzone', 'asctime', 'clock', 'ctime', 'daylight', 'get_clock_info', 'gmtime', 'localtime', 'mktime', 'monotonic', 'perf_counter', 'process_time', 'sleep', 'strftime', 'strptime', 'struct_time', 'time', 'timezone', 'tzname', 'tzset']
-
frozenset()
# 不可变集合 s = frozenset({1, 2, 3}) print(s)
运行结果:
frozenset({1, 2, 3})
-
globals()
、locals()
# 查看全局变量名;查看局部变量名
运行结果:
-
pow()
# 幂运算 print(pow(3, 2))
运行结果:
9
-
round()
# 四舍五入 print(round(10.333))
运行结果:
10
-
slice()
# 索引取值 s = slice(1, 5, 2) # 1start,5stop,2step lt = [1, 2, 3, 4, 5, 6, 7] print(lt[s]) print(lt[1:5:2])
运行结果:
[2, 4] [2, 4]
-
sum()
# 求和 print(sum([1, 2, 3, 4, 5]))
运行结果:
15
-
\_\_import\_\_()
# 通过字符串导入模块 time = __import__('time') print(time.time())
运行结果:
1569482755.649973 # 真实时间
3. 异常处理
异常处理只能捕捉到程序中的逻辑错误。
3.1 模板
代码
try:
认为可能会出错的代码
except Exception as e:
print(e) # 如果出现错误,打印错误信息
finally:
需要继续执行的代码
4. 面向过程编程
面向过程编程:
核心是 过程 ,指的是解决问题的步骤,先做什么,再做什么,最后做什么。
优点:将复杂的问题流程化,简单化。
缺点:扩展性差。