python 函数 过程_Python——面向过程与函数式

一、编程思想/范式

编程范式指的就是编程的套路,打个比方,如果把编程的过程比喻为练习武功,那编程范式指的就是武林中的各种流派

二、面向过程

面向过程的编程思想

核心:“过程”二字,过程即流程,指的是做事的步骤:先、再、后

基于该思想编写程序就好比在设计一条流水线

优点:能将复杂的问题流程化、进而简单化

缺点:扩展性非常差

'''

面向过程的编程思想应用场景解析:

1、不是所有的软件都需要频繁更迭:比如编写脚本

2、即便是一个软件需要频繁更迭,也并不代表这个软件所有的组成部分都需要一起更迭

'''

三、函数式

3.1 匿名函数与lambda

# 1、def用于定义有名函数

# func=函数的内存地址

def func(x, y):

return x+y

print(func)

# 2、lambda用于定义匿名函数

print(lambda x,y:x+y)

# 3、调用匿名函数

# 方式一:

res=(lambda x,y:x+y)(1, 2)

print(res)

# 方式二:

func = lambda x,y:x+y

res=func(1,2)

print(res)

# 4、匿名用于临时调用一次的场景:更多的是将匿名函数与其他函数配合使用

3.2 map、reduce、filter(了解)

# map的应用(了解)

l=['alex','lxx','wxx','egon']

new_l = (name+'_dsb' for name in l)

print(new_l)

res = map(lambda name:name+'_dsb',l)

print(res) # 生成器

# filter的应用(了解)

l=['alex_sb','lxx_sb','wxx_sb','egon_sb']

res = (name for name in l if name.endswith('sb'))

res = filter((lambda name:name.endswith('sb')),l)

print(res)

# reduce的应用(了解)

from functools import reduce

# 数字的合并操作

res = reduce(lambda x,y:x+y,[1,2,3],10)

# 字符串的合并操作

res = reduce(lambda x,y:x+y,['a','b','c'],'hello')

print(res)

3.3 sorted、max、min

salaries={

'siry':3000,

'tom':7000,

'lili':10000,

'jack':2000

}

# 需求1:找出字典中薪资最高的人=>lili

# def func(k):

# return salaries[k]

# res = max(salaries, key=func) # 返回值=func('siry')

# print(res)

# max的应用

res = max(salaries, key=lambda k:salaries[k])

print(res)

# 需求2:找出字典中薪资最低的人=>jack

# min的应用

res = min(salaries, key=lambda k:salaries[k])

print(res)

# 需求3:将字典中的人名按照薪资从低到高的顺序进行排列

# sorted的应用

# reverse=True 将排序从大到小排列,默认为从小到大排列

res = sorted(salaries, key=lambda k:salaries[k])

print(res)

3.4 内置函数

# abs() 去绝对值

print(abs(-1))

# all(可迭代对象) ,可迭代对象中的元素全为True时all结果才为True

# all(空的可迭代对象), 结果为True

print(all([1,'aaa','1']))

print(all([]))

# any(可迭代对象),可迭代对象中的元素有一个为True时any结果就为True

# any(空的可迭代对象), 结果为False

print(any([0,None,1]))

print(any([]))

# bool() 判断布尔值

print(bool(0))

# callable() # 检查一个对象是否是可调用的

# frozenset({1,2,3}) # 将集合变成不可变集合

# round() # 四舍五入

print(round(1.5))

print(round(1.4))

# pow(10,2,3) =》10 ** 2 % 3

# s=slice(1,4,2) => print(l1[1:4:2]) # l1[s]

# ============ 掌握 ============

# zip(可迭代对象1,可迭代对象2) # 类似于衣服拉链,将两个对象中的元素一一对应取出组成一个个元组

v1='hello'

v2=[111,222,333,444,5555,6666]

res=zip(v1,v2)

print(list(res)) # [('h', 111), ('e', 222), ('l', 333), ('l', 444), ('o', 5555)]

# divmod() 获取商和余数,可用于分页功能

print(divmod(10000,33))

# dir(obj) 查看obj下的所有属性

class Foo:

pass

obj=Foo()

obj.xxx=1111

print(dir(obj)) # obj.哪些属性

# enumerate() 枚举,将可迭代对象依照顺序逐个取出,索引与取出值组成一个个元组返回

for i,v in enumerate(['a','b','c']):

print(i,v)

# eval() 执行字符串中的表达式

res = eval('1+2')

print(res) # 3

# isinstance() 判断段类型是否相同

print(isinstance([],list))

# print(type([]) is list) # 不推荐使用

# __import__ 将文件中的字符串类型的模块名转换成对应的模块名并返回

# import 'time' # 错误

time=__import__('time')

time.sleep(3)

你可能感兴趣的:(python,函数,过程)