20190925 匿名函数与模块方法

匿名函数

语法是:`lambda 参数 :返回值`

匿名函数没有名字,只能和某些方法联用

1.max

返回最大值

res = max([1,2,3,4,5])
print(res)   # 5
salary_dict = {
    'nick': 3000,
    'jason': 100000,
    'tank': 5000,
    'sean': 2000,
    'z': 1000
}

def func(name):  # nick/jason/tank/sean/z
    return salary_dict[name]  # 3000/100000/5000/2000/1000

res = max(salary_dict, key=func)  # 默认key的首字母
# jason  
print(res)

字典按照值来排序取值 ,key=func默认做的事:

  1. 循环遍历 salary_dict字典中的所有key 值
  2. 然后把所有的key值一次丢入func中,返回薪资
  3. 通过返回的薪资排序,得到最大值

利用max与匿名函数联用可以写成:

def func(name):  
    return salary_dict[name] 

res = max(salary_dict, key=lambda name: salary_dict[name])  # 默认key的首字母
print(res)

2.min

取最小值

res = min(salary_dict, key=lambda name: salary_dict[name])
print(res)

3.filter

通过函数控制筛选可迭代对象内元素的输出。

res = filter(lambda item: item > 2, [1, 2, 3, 4])
print(res)  # <filter object at 0x000002656CDE68D0>
print(list(res))  # [3, 4]  强转为列表输出
res = filter(lambda item: salary_dict[item] > 3000, salary_dict)
print(list(res))   # ['jason', 'tank']
# 筛选出了大于3000薪资的人

4.map

映射(y=x+1)。会以特定条件让可迭代对象一一映射执行。

def function1(item):
    return item + 2

res = map(function1, [1, 2, 3, ])
print(res)
print(list(res))
#  [3, 4, 5] 

5.sorted

对可迭代对象进行排序。

res = sorted([2,3,4,1,0,5],reverse=True)

key= 函数。在字典中以值进行排序可以使用

salary_dict = {
    'nick': 3000,
    'jason': 100000,
    'tank': 5000,
    'sean': 2000,
    'z': 1000
}
def function2(item):
    return salary_dict[item]

res = sorted(salary_dict, key=function2, reverse=True)
print(list(res))

内置函数

python解释器内置方法

enumerate(***)

可以循环打印出可迭代对象的索引和值。

lt = [1, 2, 3]
for ind, val in enumerate(lt):
    print(ind, val)

eval (*)

可以把字符串的引号去掉,留下的是什么就是什么

s = '"abc"'
print(type(eval(s)), eval(s))
#   <class 'str'> abc
s = '[1,2,3]'
.print(type(eval(s)), eval(s))
#	<class 'list'> [1, 2, 3]

bytes

解码字符,将字符串变为二进制流

res = bytes('中国', encoding='utf8')
print(res)
#  b'xe4xbdxa0xe5xa5xbd'

chr() / ord()

chr()参考ASCII码表将数字转成对应字符;ord()将字符转换成对应的数字。

print(chr(65))   #  A
print(ord('A'))  #  65

divmod()

得到两个数(取整/取余)

print(divmod(10, 3))  # (3, 1)
print(divmod(10, 4))  #  (2, 2)

hash()

是否可哈希(可变类型不可哈希)

print(hash(123))   #  123

以下了解

1.abs()

求绝对值。

print(abs(-13))  # 求绝对值
13

2.all()

可迭代对象内元素全为真,则返回真。

print(all([1, 2, 3, 0]))
print(all([]))
False
True

3.any()

可迭代对象中有一元素为真,则为真。

print(any([1, 2, 3, 0]))
print(any([]))
True
False

4.bin() / oct() / hex()

二进制、八进制、十六进制转换。

print(bin(17))   #  0b10001
print(oct(17))	#  0o21
print(hex(17))	#  0x11

5.dir()

列出模块的所有方法(以下是time模块的)

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']

6.frozenset()

不可变集合。

s = frozenset({1, 2, 3})
print(s)
frozenset({1, 2, 3})
#  这个集合是不可变的

7.globals()/loacals()

查看全局名字;查看局部名字。

# print(globals())
def func():
    a = 1
#     print(globals())
    print(locals())

func()
{'a': 1}

8.pow()

次方求值

print(pow(3, 2, 3))  # (3**2)%3
0

9.round()

四舍五入

print(round(3.5))
4

10.slice()

python2 遗留的切片方式

lis = ['a', 'b', 'c']
s = slice(1, 4, 1)
print(lis[s])  # print(lis[1:4:1])
['b', 'c']

11.sum()

求和

print(sum(range(100)))
# 4950
print(sum([1,2,3,4,5]))
# 15

12.import()

通过字符串导入模块。

m = __import__('time')
print(m.time())
1556607502.334777

异常处理

报错之后还能继续执行

try:
    代码块(将要出错的)
except exception:
		# 可以拦截所有错误
  1. 报错之后,虽被拦截,但是之后的代码不会执行
  2. Exception是万能异常,只要有错误就会捕捉
  3. 异常捕捉只能捕捉逻辑错误,语法错误由python解释器自己拦截
  4. except exception as e:可以将错误作为变量e打印出来
  5. finally判断,无论报错与否,都执行这一行
  6. assert 断言 + 条件:被历史淘汰,判断词句是否出错(cmd编辑时用)

面向过程编程

IP0

input 输入(定义的变量)

process 过程(控制变量的改变)

output 输出(新的变量)

面向对象的编程更像是流水线,一步一步的走下去

优点:逻辑清晰

缺点:上一步错了,下一步就跟着一起错

为什么会报错

逻辑 ==》 控制变量改变的方向出错

检查错误==》 不断打印变量的拜年话==》寻错

原文地址:https://www.cnblogs.com/fwzzz/p/11585417.html