Flask学习笔记01-Python高级编程基础

在开始记录Flask具体内容前,整理一波Python中的一些高级函数的使用。

  1. Lambda表达式
    Lambda表达式其实就是匿名函数,这种用法在Python和Java中都存在,不过个人感觉还是Python的更加的干练。
    其格式为 lambda 参数列表: 函数体
    举了栗子,定义一个简单的加法函数
def add(x,y):
	return x+y
print(add(3,5)) #输出8

换做我们的lambda表达式就是:

add =  lamda x,y : x+y 
add(3,5)  #同样可以返回8
  1. map函数
    map函数的参数有两个,一个是func,另一个是*iterables 然后输出map object。意思就是第一参数是一个function,后面传入的是可迭代对象。
    举个栗子:
arr = [1,2,3,4,5]
r = map(lambda x:x**2,arr)
print(list(r))  #输出:[1, 4, 9, 16, 25]

从上面的例子可以看到,map函数的作用就是将第二个参数里的可迭代的元素都做function的处理。 要注意的是,上面之所以是 print(list(r))是因为,map函数返回的是一个map对象,我们需要将其做转换才能获取到其内容。

  1. filter函数
    filter函数从名字上可以看出,它的作用是一个过滤器的作用,它传入的参数和map差不多。不多bb,直接上菜。
def is_not_none(word):
    return word and len(word.strip())>0   #判断该单词是否为空
arr = [" ","你好","啊","!"]
print(list(filter(is_not_none,arr))) #返回 ['你好', '啊', '!']

可以看出,filter只返回符合条件的结果,不符合条件的会被自动过滤。这个比我们写一个循环一个个判断会简单很多。

  1. reduce函数
    reduce函数的输入输出比前两个稍微的复杂一丢丢,他的输入第一个依然是一个函数,第二个是可迭代对象,它可以设置一个初始值。初始值是做什么的呢? 这个就谈到了reduce的功能,reduce是将所有的可迭代对象进行函数操作,然后变成一个元素。
    上菜!
from functools import reduce  #使用reduce需要import一下
arr = [1,2,3,4,5]
reduce(lambda x,y:x+y,arr) #返回15

reduce会在arr中进行两两取值,1+2 = 3 ,得的3会和下一个元素3组成一组成为新的 参数传进函数中继续计算。下面我加一个初始值,

from functools import reduce  #使用reduce需要import一下
arr = [1,2,3,4,5]
reduce(lambda x,y:x+y,arr,10) #返回25

初始值就使得reduce函数在这个基础上进行操作。

  1. 三大推导式
    (1)List推导式:
    这个在刷题的时候经常用到,尤其是在做动态规划的时候,我们需要定义一个固定大小的列表去存储我们的结果。List推导式其实就是在外面套上一个 [ ]使得里面的内容变成一个列表,上菜!
    	list1 = [i for i in range(0,10,2)]
    	print(list1) #输出 [0, 2, 4, 6, 8]
    

(2)集合推导式:
和列表推导式一个形式,在外面套个壳子 { }就成了我们的集合推导式

set1 = {i for i in range(0,10,2)}
print(set1) #输出 {0, 2, 4, 6, 8}

(3)字典推导式
这个在平时也是经常用到,直接上菜展示:

dict1 = {k:v**2 for k,v in enumerate(range(10))}
print(dict1) #返回{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}

用上这个:,推导式就会自动的将我们的key,value生成,我们也可以通过推导式将我们的key-value对换一下

print({v:k for k,v in dict1.items()}) #输出 {0: 0, 1: 1, 4: 2, 9: 3, 16: 4, 25: 5, 36: 6, 49: 7, 64: 8, 81: 9}

6.Python的三目运算符
这个就很简单了,举个我经常使用的一个例子,在pytorch中定义设备的类型
device = "cuda" if torch.cuda.is_available() else "cpu"
意思就是当if后面的成立时则执行前的赋值,否则就是执行后面的,这个和Java中的? :功能是类似的。平时能一行写完的判断尽可能一行,因为Python是解释性语言,你写的越短,解释越快。

  1. 装饰器
    这个应该算是一个重点了,因为在Flask中,装饰器到处可见,我们的路由设置也是装饰器的一个应用。装饰器的格式是 @函数,意思就是使用一个函数去装饰另一个函数,内部的执行步骤是,将被装饰的函数B,作为参数传入装饰函数 A(我们的 @函数),将函数B替换成上面那一步的返回值。直接上菜展示:
def funA(fn):
	print("A")
	fn()
	return "func"
@funA
def funB():
	print("B")
print(funB)

返回结果是A B func。值得注意的是为什么是funB而不是funB(),因为在funA执行完后我们的funB就不在是函数了,而是被替换成了一个字符串。

以上都是个人在自己的学习过程中觉得比较有用的一下编程内容,仅供参考,例子比较简单,更复杂的应用可以再做深入了解。奥利给!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值