假期补习补习Python,防止以后用到炸锅。

闭包

在Python语言中,一切皆对象

闭包:一个函数定义中引用了函数外定义的变量,并且该函数可以在其定义环境外被执行。

闭包 = 函数 + 环境变量

1
2
3
4
5
6
7
8
9
10
11
12
def curve_pre():
a = 25
def curve(x):
return a * x ** 2
return curve

a = 10
f = curve_pre()
print(f(2))

输出结果:
100
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def f1():
a = 10
def f2():
# a此时被认为是局部变量
a = 20
print(a)
print(a)
f2()
print(a)

f1()

输出结果:
10
20
10

上述例子并不是闭包,因为a并不是环境变量了,而是变成了局部变量。

匿名函数

语法: lambda 参数列表 : 表达式

1.使用lambda关键字创建匿名函数。

2.所谓匿名函数,就是没有名字的函数。

3.匿名函数冒号后面的表达式有且只能有一个,注意:是表达式,而不是语句。

4.匿名函数自带return,而return的结果就是表达式的计算后的结果。

1
2
3
4
def add(x, y):
return x + y
等价于:
lambda x, y: x + y

在进行匿名函数调用的时候,直接将函数赋值给一个变量即可

1
2
3
4
5
f = lambda x, y: x + y
print(f(1, 2))

输出结果:
3

匿名函数中常用三元表达式进行相关功能实现。Python中的三元表达式

其他语言中如C,C++,java的三元表达式:

1
x > y ? x : y

Python中的三元表达式:

条件为真时的结果 if 条件判断 else 条件为假时的返回结果

1
2
3
4
5
f = lambda x, y: x if x > y else y
print(f(1, 2))

输出结果:
2

(1) map() 会根据提供的函数对指定序列做映射。

1
2
3
4
5
6
7
8
9
10
l = [1, 2, 3, 4, 5]

def square(x):
return x * x

r = map(square, l)
print(list(r))

输出结果:
[1, 4, 9, 16, 25]

maplambda
上述代码可改变为:

1
2
3
4
5
6
l = [1, 2, 3, 4, 5]
r = map(lambda x: x * x, l)
print(list(r))

输出结果:
[1, 4, 9, 16, 25]

注意:maplambda并不能提高代码运行上的效率,只是使得代码更加简洁。

(2) reduce

在Python 3.x,reduce已不在全局命名空间内,所以想要使用需要先引入

reduce() 函数会对参数序列中元素进行累积。

函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

1
2
3
4
5
6
7
8
from functools import reduce

l = [1, 2, 3, 4, 5]
r = reduce(lambda x, y: x + y, l)
print(r)

输出结果:
15

(3) filter

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

1
2
3
4
5
6
l = [1, 0, 0, 1, 0, 2]
r = filter(lambda x: True if x != 0 else False, l)
print(list(r))

输出结果:
[1, 1, 2]

该函数特别适合做集合的过滤

高阶函数

高阶函数:map、reduce、filter

高阶函数就是一个函数可以用来接收另一个函数作为参数

装饰器

框架中普遍大量使用装饰器,所以装饰器很重要。装饰器是一种设计模式,类似于Java中的注解

提高可扩展性,不改变原有函数而增加新的功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import time

def f1():
print("This is a function")

def dec(func):
def t():
print(time.time())
func()
return t

f = dec(f1)
f()

输出结果:
1581738874.1218472
This is a function

语法糖:@符

语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。

解决调用时复杂的问题。

装饰器不需要改变调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import time

def dec(func):
def t():
print(time.time())
func()
return t

@dec
def f1():
print("This is a function")

f1()

输出结果:
1581743959.2179737
This is a function

可变参数问题:

使用*args定义可变参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import time

def dec(func):
def t(*args):
print(time.time())
func(*args)
return t

@dec
def f1(name):
print("f1" + name)

@dec
def f2(name1, name2):
print("f2:" + name1 + name2)

f1('f1')
f2('This is a function', 'f2')

输出结果:
1581745067.4728582
f1:f1
1581745067.4728582
f2:This is a functionf2
相关文章
评论
分享
  • Windows下neo4j的安装

    neo4j是一个高性能的NOSQL图形数据库,他将结构化数据存储在网络上而不是表中。他是一个嵌入式的、基于磁盘的、具备完全的事物特性的Java持久化引擎,neo4j也可看做是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。——百度...

    Windows下neo4j的安装
  • java实现类FTP程序

    继承程序设计实验,实验说明如图所示: 集成程序设计实验 TCP实现首先说明下基于TCP实现的功能: (1)能够实现多用户的同时连接 (2)用户执行成功的命令会在其他用户终端上显式说明 (3)当前用户数以及在线情况会在服务端实时显...

    java实现类FTP程序
  • Java中的流

    流是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入输出都是以流的方式进行。设备可以是文件、网络、内存等。 I/O字节流InputStream字节输入流OutputStream字节输出流用于以字节的形式读取和写入数...

    Java中的流
  • eclipse使用

    Eclipse是一个开放源代码的、基于Java的可拓展开发平台。 常用快捷键 快捷键 作用 alt+/ 代码快速补全 ctrl+1 快速修复 ctrl+shift+f 代码格式化 ctrl+d 删除一行代码 ...

    eclipse使用
  • Python网络编程

    网络编程从大的方面说就是对信息的发送到接收,中间传输为物理线路的作用。 它的含义是使用套接字来达到进程间的通信。套接字可以看成是两个网络应用程序进行通信时,各自通信连接中的一个端点。 套接字Socket=(IP地址:端口号) 端口号是...

    Python网络编程
  • Centos安装

    虚拟机下载及安装1.进入VMware官网,转到下载页面 https://my.vmware.com/cn/web/vmware/info/slug/desktop_end_user_computing/vmware_workstati...

    Centos安装
  • JavaEE开发准备

    个人电脑硬件配置: Windows 10 64位家庭中文版 8G运行内存 Intel(R) Core(TM) i5-7300HQ CPU @ 2.50GHz 1.Java JDK安装及配置(1)下载和安装首先进入oracle网站中Ja...

    JavaEE开发准备
  • 推荐算法研究(一)

    推荐算法大体分为3类:基于系统过滤的推荐、基于内容的推荐、混合推荐 1.基于协同过滤的推荐系统(Collaborative Filtering)使用行为数据,利用集体智慧来推荐。属于有监督学习。基于用户的协同过滤(找和你兴趣相似的人所...

    推荐算法研究(一)
  • dart中HTTP请求的处理

    dio是一个强大的Dart Http请求库,支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载、超时、自定义适配器等… ,最重要的是国人开发,牛皮。 (1)添加dio库 找到项目中的pu...

    dart中HTTP请求的处理
  • dart底部导航栏的简单编写

    底部导航栏目前在手机应用中非常常见,可见其对于软件设计来说非常的有必要和重要。下面简单总结使用flutter和dart如何实现底部导航栏的制作。 首先值得注意的是底部导航栏为动态的组件,所以继承的话应该是StatefulWidget类...

    dart底部导航栏的简单编写
Please check the comment setting in config.yml of hexo-theme-Annie!