01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

1.什么是Spring :

v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}

Normal
0

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE

MicrosoftInternetExplorer4

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman","serif";}

Spring是分层的JavaSE/EE full-stack(一站式) 轻量级开源框架

n  分层: 来自JavaEE体系结构 (客户端层、 web层、业务层、持久层 )

服务器端三层结构 (web层、业务层、持久层)

Servlet + JSP ----  web层技术 ---- Struts2框架

JDBC 接口 ---- 持久化技术  ---- Hibernate框架

EJB 框架(复杂) ---- 业务层技术 ---- Spring 框架 (取代EJB出现 )

Spring 出现,就是为了解决常见JavaEE 企业开发问题!

一站式: Spring框架提供了 web层(表现层) SpringMVC、业务层 IoC、AOP和事务管理、持久层JdbcTemplate  各层javaEE软件开发解决方案

2.Spring的核心:

Normal
0

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE

MicrosoftInternetExplorer4

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman","serif";}

IoC: 控制反转

AOP: 面向切面编程

3.Spring 体系结构

这个不好记我们可以根据Spring的官方文档去记忆

Spring官方文档截图:

目录如下:

Normal
0

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE

MicrosoftInternetExplorer4

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman","serif";}

第一章 Spring框架概述

  第二章 Spring3.x 新特性

  第三章核心技术(IoC、AOP、测试)

  第四章数据访问(事务管理、 JdbcTemplate使用、整合其它ORM框架)

  第五章 web技术(SpringMVC)

  第六章集成(WebService、 JavaMail、JMS、任务调度、缓存)

从官网下下载的开发包有两个:

一个是

st1\:*{behavior:url(#ieooui) }

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman","serif";}

spring-framework-3.2.0.RELEASE-dist.zip(依赖包)

一个是

st1\:*{behavior:url(#ieooui) }

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman","serif";}

spring-framework-3.0.2.RELEASE-dependencies.zip(开发包)

我们用的是开发包

解压后的目录如下:

Normal
0

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE

MicrosoftInternetExplorer4

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman","serif";}

每个文件的作用:

Docs 文档目录(API 和 规范)

Libs 开发需要jar包(包含javadoc和source)

Schema 所有约束文档

4.导入Jar包到项目中

要进行Ioc开发和DI开发的话,需要导入最核心的Spring的jar包。需要导入四个核心的jar包,进入spring-framework-3.0.2.RELEASE-dependencies解压文件夹。找到以下四个jar包。

我们为了有Spring的日志功能,需要导入commons-logging的日志包以及

Normal
0

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE

MicrosoftInternetExplorer4

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman","serif";}

log4j包(日志功能需要commons-logging和log4j一起用,注意, commons-logging 要配合log4j 记录日志,必须把log4j的jar 包也导入到项目中)这两个包jar包不在spring-framework-3.0.2.RELEASE-dependencies包(开发包)中,而是在spring-framework-3.2.0.RELEASE-dist.zip(依赖包)中。然后把log4j.properties这个文件拷贝到src目录下。

log4j.properties的内容如下:

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c:/mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change ‘info‘ to ‘debug‘ ###

log4j.rootLogger=info, stdout

项目整体的结构如下所示:

测试后就会输出日志,

v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}

Spring 框架 第一天 IoC

今天核心内容:

1、Spring框架相关知识 (什么是Spring? 解决什么问题?
课程如何安排)

2、Spring Ioc和DI 快速入门案例

3、Spring XML 容器工厂配置

4、Spring 注解配置

5、在web项目中集成Spring框架

6、Spring和Junit整合完成测试

1.    Spring 框架概述

1.1.   什么是Spring

Spring是分层的JavaSE/EE full-stack(一站式) 轻量级开源框架

n  分层: 来自JavaEE体系结构 (客户端层、 web层、业务层、持久层 )

服务器端三层结构
(web层、业务层、持久层)

Servlet + JSP ----  web层技术 ---- Struts2框架

JDBC 接口 ---- 持久化技术  ---- Hibernate框架

EJB 框架(复杂) ---- 业务层技术 ----
Spring 框架 (取代EJB出现 )

Spring 出现,就是为了解决常见JavaEE 企业开发问题!

n  一站式: Spring框架提供了 web层(表现层)
SpringMVC、业务层 IoC、AOP和事务管理、持久层JdbcTemplate  各层javaEE软件开发解决方案

n  轻量级:相对于EJB框架而言

1.2.   Spring核心

IoC:
控制反转

AOP:
面向切面编程

l  官网:http://www.springsource.org/

1.3.   Spring 给软件开发带来了什么

方便解耦,简化开发 (Spring IoC特性)

AOP编程的支持

声明式事务的支持

方便程序的测试

方便集成各种优秀框架 (整合Struts2 、 Hibernate 、MyBatis 、Struts1 )

降低JavaEE API的使用难度 (Spring 提供大量工具类, 简化代码编写 )

1.4.   Spring 体系结构

从Spring规范文档 去记忆 Spring 中内容

Spring规范

第一章 Spring框架概述

第二章 Spring3.x 新特性

第三章核心技术(IoC、AOP、测试)

第四章数据访问(事务管理、 JdbcTemplate使用、整合其它ORM框架)

第五章 web技术(SpringMVC)

第六章集成(WebService、 JavaMail、JMS、任务调度、缓存)

课程安排:

第一天: Spring IOC 、web集成、
测试

第二天: Spring AOP、JdbcTemplate

第三天: 事务管理, 整合ORM框架(三大框架整合

2.    Spring框架IoC和DI 快速入门

IoC和DI 是整合Spring学习的核心

2.1.   下载开发包

http://projects.spring.io/spring-framework/
网址下载开发包

最新版本4.1 课程 3.2

开发包3.2

spring-framework-3.2.0.RELEASE-dist.zip

依赖吧 3.0 (常见开源技术jar包)

spring-framework-3.0.2.RELEASE-dependencies.zip

Spring目录结构

Docs 文档目录(API 和 规范)

Libs 开发需要jar包(包含javadoc和source)

Schema 所有约束文档

2.2.   导入jar包到项目

进行Ioc和DI的开发,只需要导入最核心spring的jar包

Spring运行,使用commons-logging日志技术

(commons-logging 和 slf4j 都属于统一日志接口, 整合log4j日志实现 )

导入log4j jar

2.3.   理解IoC和DI的概念

什么是IoC ? 什么是DI ? 区别是什么?

IoC:
控制反转, 解决程序对象紧密耦合问题(工厂+反射+ 配置文件), 将程序中原来构造对象的权限,交给IoC容器来构造,当程序需要对象,找IoC容器获取。

DI :
依赖注入 , IoC容器需要为程序提供依赖对象,返回对象所依赖对象一同可以提供(Servlet需要Service, 找Ioc容器获取Service, Service由容器提供,Service依赖DAO ,IoC容器提供Service对象同时, 将Service依赖DAO 注入到Service中)

IoC容器到底为程序提供了什么?提供依赖对象

2.4.   编写IoC和DI入门案例

2.4.1.    传统代码

测试代码 :

表现层代码

业务层代码

2.4.2.    将所有对象,交给IoC容器(Spring)来管理

(spring配置文件 通常可以在src 或者 WEB-INF目录下, 通常名称 applicationContext.xml )

参考文档 : xsd-config.html

配置本地schema位置

通过applicationContext.xml
配置Spring管理对象

在程序中通过ApplicationContext接口 获取spring工厂对象

n  ClassPathXmlApplicationContext 读取 src下配置文件

n  FileSystemXmlApplicationContext 读取WEB-INF下配置文件

IoC 通过工厂,从Spring容器获取创建好对象

DI 在通过工厂获取,spring对象时,spring同时提供对象所依赖的对象

配置

练习: 在代码上,将UserDAO 注入到 UserService

2.5.   Spring提供对象工厂

BeanFactory 和 ApplicationContext 接口

ApplicationContext
是 BeanFactory 子接口,BeanFactory 才是Spring框架最核心工厂接口。

ApplicationContext
是对BeanFactory 接口扩展, 企业开发很少直接使用BeanFactory

ApplicationContext
会在容器初始化时,对其中管理Bean对象进行创建, BeanFactory 会在对象获取时才进行初始化 。

3.    IoC容器装配Bean(xml配置)

3.1.   三种实例化Bean的方式

方式一: 使用类构造器实例化对象

<!-- 方式一  使用构造器(无参数)实例化对象  -->

<bean id="bean1"

class="cn.itcast.spring.b_instance.Bean1" />

方式二: 使用静态工厂
静态方法,对对象实例化

<!-- 方式二使用静态工厂实例化对象 -->

<!-- 调用工厂的 factory-method 返回对象 -->

<bean id="bean2"

class="cn.itcast.spring.b_instance.Bean2Factory" factory-method="getBean2" />

方式三: 使用实例工厂
实例方法 对对象实例化

<!-- 方式三使用实例工厂实例化对象 -->

<!-- 先实例化工厂 -->

<bean id="bean3Factory" class="cn.itcast.spring.b_instance.Bean3Factory"
/>

<!-- 再通过工厂对象的实例方法,构造目标对象 -->

<bean id="bean3" factory-bean="bean3Factory"

factory-method="getBean3" />

应用场景: 大多数情况,可以通过构造器直接实例化,
只有在对象构造过程非常复杂的情况下,才会采用工厂实例化的方式

3.2.   Bean的作用域

Spring为Bean对象,提供五种作用域

最常用 singleton 和 prototype 两种

Singleton
(单例): 在一个BeanFactory对象中,引用唯一的一个目标实例

Prototype
(多例): 每次通过工厂执行getBean时,返回不同实例对象

Request (请求范围) : 创建对象保存在request范围,如果request销毁,对象销毁

Session (会话范围):创建对象保存Session中,如果session销毁,对象销毁

* globalSession (全局会话):分布式系统,全局会话的概念,一次登录,应用多个系统

单例Bean 在容器初始化时,实例化 (只实例化一次 )

多例Bean 在工程执行getBean时 才会实例化 (每调用一次,返回不同对象 )

3.3.   Bean的生命周期

可以通过
init-method属性配置 Bean对象初始化执行方法,destory-method属性配置Bean对象销毁的方法

(初始化方法和构造方法 有区别? 构造方法作用申请空间,为对象基本属性初始化 ,
初始化方法 对象复杂构造过程
, java语言建议将对象复杂构造过程单独抽取
初始化方法 )

配置

在对象构造后,立即执行初始化init , 默认没有执行destroy 销毁方法

3.4.   后处理器(后处理Bean)--- 补充

在Spring构造Bean对象过程中,有一个环节对Bean对象进行 后处理操作 (钩子函数) ----- Spring 提供 BeanPostProcessor 接口

可以自定义类,实现 BeanPostProcessor 接口,配置到Spring容器中,在构造对象时,spring容器会调用接口中方法

后处理器,在对象构造过程中,提供代理, 是AOP自动代理核心

3.5.   Bean的依赖注入

3.5.1.    依赖注入方式

三种注入方式

1、
构造参数属性注入

2、 setter方法属性注入

3、
接口属性注入

Spring 配置文件支持构造参数属性注入和 setter方法属性注入!

3.5.2.    构造参数的属性输入

通过constructor-arg
属性进行构造参数注入

3.5.3.    setter方法属性注入

在配置文件 使用<property> 元素完成setter属性注入

3.5.4.    属性注入深入

【知识点】 p名称空间的使用

P名称空间,在spring2.5版本后引入,为了简化属性依赖注入(setter方法)

第一步: 在配置文件,引入p名称空间

第二步: 简化setter方法注入配置

【知识点】 spEL表达式的使用

在spring3.0之后,引入spEL 表达式语言,简化属性注入

参考 “Spring_表达式语言.pdf” 学习

语法: #{表达式}

用法一: 直接通过value注入,引用一个Bean对象

用法二: 引用一个Bean对象属性

用法三: 直接调用对象的方法

3.5.5.    集合元素类型属性注入

Spring为每种集合都提供一个元素标签
进行注入

4.    IoC容器装配Bean(注解配置)

4.1.   使用注解配置Bean

Spring注解开发需要jar包 和 xml开发 一样的

第一步: 新建项目,
导入jar包

第二步: 在需要spring创建对象类上面 添加@Component (注解 来自spring2.5 )

第三步: 配置注解Bean所在package

引入context命名空间

配置提示

配置注解对象所在包

Spring为了细分组件的功能,在提供@Component注解,提供三个等价的注解

@Controller
控制器,表示web层组件  ---- action

@Service
业务类,表示业务层组件
--- service

@Repository
表示持久层的组件 ---
dao

4.2.   Bean属性依赖注入

在spring2.5 版本,没有提供基本类型属性注入 ,但是spring3.0引入注解@Value

4.2.1.    向对象注入基本类型属性

4.2.2.    向对象注入复杂对象属性

4.2.3.    spring2.5 注入复杂对象属性

n  spring2.5 提供自动装配注解 @Autowired

@Autowired 默认按照类型进行注入 (缺点: 如果容器中存在两个对象,是相同类型, @Autowired 无法注入 )

@Autowired
+ @Qualifier 指定注入Bean的id

n  Spring支持JSR-250规范,引入@Resource ,功能和@Autowired 相同

重点记忆:
@Autowired 和 @Resource

4.3.   Spring注解其它配置

4.3.1.    初始化和销毁方法配置

@PostConstruct 初始化

@PreDestroy 销毁

4.3.2.    bean的作用域

通过@Scope注解指定作用

4.3.3.    注解和配置文件混合使用

Bean定义配置,使用配置文件方式

Bean关系依赖注入,使用注解配置方式

如果在配置使用 context:component-scan 具有 context:annotation-config 效果

如果Bean是通过xml配置,想使用注解依赖注入,必须单独配置

<context:annotation-config
/>

5.    web开发中应用Spring框架

直接在项目集成spring ,在servlet 创建Spring容器

问题: 每次请求都会创建一个spring容器对象,将容器管理对象都重新创建

---- 性能问题、 内存溢出

解决: 在一个web容器中, 保证spring容器只被初始化一次

1) static --- 问题: 违背面向对象

2) servlet init 方法中 ---- 问题: spring容器对象如何被其它Servlet访问

3) ServletContext 容器保存数据唯一, ServletContextListener 初始化时容器方法只被调用一次

Spring 提供 web.jar 提供类似Listener

第一步: 在项目导入 spring-web-3.2.0.RELEASE.jar

第二步: 在web.xml 配置监听器

<!-- 监听器,初始化Spring容器对象 -->

<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

默认加载 /WEB-INF/applicationContext.xml

第三步: 配置spring文件位置

<!-- 修改spring配置文件位置 -->

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:applicationContext.xml</param-value>

</context-param>

第四步:修改Servlet代码

// 1、创建工厂

ApplicationContext
applicationContext =

(ApplicationContext) this.getServletContext().getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);

上面代码也可以写为

ApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());

6.    spring和junit的测试集成

传统测试

Spring和junit测试集成

第一步:在项目导入spring-test-3.2.0.RELEASE.jar

第二步:编写测试类

作业:

1、 ssh整合登陆练习(步骤参考笔记)

2、通过BeanPostProcessor 对业务层接口进行代理,将登陆方法执行时间,记录log4j日志文件

Normal
0

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE

MicrosoftInternetExplorer4

st1\:*{behavior:url(#ieooui) }

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman","serif";}

时间: 2024-08-10 06:58:02

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能的相关文章

python中的模块,以及包的导入的总结

模块导入的方式: 模块的概念:一个.py文件就称为一个模块 导入模块中函数的方式: 方式一:import  模块名 使用时:模块名.函数名() 方式二 :from 模块名 import  函数名 使用时:函数名() 方式三: from 模块名 import * 使用时:函数名() 方式四:from 模块名 import 函数名 as  tt(自定义)     注意原来的函数名将失效 使用时:tt() 可以在模块当中定义一个变量__all__: 使用__all__的影响:  后面的[]里面写什么函

python模块与包的导入

1. 模块与包的区别 模块,即module,一个包含python语句的.py文件就是一个模块!每个源代码文件都会自动成为模块!没有额外的语法用来声明模块. 包,又称模块包,即module package,是一个目录,该目录中包含.py文件,其中必须有一个__init__.py文件,该文件用于声明和初始化模块包.第一次在进程中导入某个目录(包)时,python会自动运行__init__.py文件中的代码.该目录会在内存中创建一个模块对象,__init__.py中赋值的变量则会变成该模块对象的属性.

包与导入语句剖析

包(package).用于将完成不同功能的类分门别类,放在不同的目录(包)下.包的命名规则:将公司域名反转作为包名.如:com.baidu,对于包名:每个字母都需要小写.如果定义类时候,没有使用package,那么Java就认为我们所定义的类位于默认包里面(default package). 编译带有package声明的Java源文件有两种方式: a)直接编译,然后根据类中所定义的包名,逐一手工建立目录结构,最后将生成的class文件放到该目录结构中(很少使用,比较麻烦). b)使用编译参数-d

java 常用的包 默认导入的包

1.java.lang----包含一些Java语言的核心类,如String.Math.Integer.System和Thread,提供常用功能. 2.java.awt----包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI). 3.java.applet----包含applet运行所需的一些类. 4.java.net----包含执行与网络相关的操作的类. 5.java.io----包含能提供多种输入/输出功

aop的概念以及 cglib-nodep-2.1_3.jar第三方jia包动态代理使用

引入 cglib-nodep-2.1_3.ja包 cglib产生的代理类是目标类的子类 定义接口,让切面都继承它,方便加入到动态代理方法 的那个类中使用 在SalaryInterceptor类中使用 private List<Interceptor> interceptors; 1 package cn.itcast.cglibproxy.salary; 2 3 public interface Interceptor { 4 public void interceptor(); 5 } Lo

装饰器、包的导入

python2 存在内存里的 字符串就是bytes,bytes就是字符串, 需要先解码(decode),再编码(encode) python3 字符串 = unicode, bytes = py2 bytes, 不需要解码,自动转成unicode编码(没有decode方法) 如果需要转成别的格式,可以加上encode 默认文件编码utf-8, 变量的编码unicode 二进制--> bytes --> 字符编码的格式 一.为什么使用函数之模块化程序设计 不使用模块的缺点: 体系结构不清晰,可读

【Python之模块及包的导入】

一.模块导入 1.定义 Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句. 模块让你能够有逻辑地组织你的 Python 代码段. 把相关的代码分配到一个模块里能让你的代码更好用,更易懂. 模块能定义函数,类和变量,模块里也能包含可执行的代码. 包括:内置模块,自定义模块,第三方模块: 2.作用 最大的好处是大大提高了代码的可维护性.其次,编写代码不必从零开始.当一个模块编写完毕,就可以被其他地方引用.我们在编写程序

【Python 生成器 匿名函数 递归 模块及包的导入 正则re】

一.生成器 1.定义 生成器(generator)是一个特殊的迭代器,它的实现更简单优雅,yield是生成器实现__next__()方法的关键.它作为生成器执行的暂停恢复点,可以对yield表达式进行赋值,也可以将yield表达式的值返回. 也就是说,yield是一个语法糖,内部实现支持了迭代器协议,同时yield内部是一个状态机,维护着挂起和继续的状态. yield的功能: 1.相当于为函数封装好__iter__和__next__ 2.return只能返回一次值,函数就终止了,而yield能返

【Python3之模块及包的导入】

一.模块导入 1.定义 Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句. 模块让你能够有逻辑地组织你的 Python 代码段. 把相关的代码分配到一个模块里能让你的代码更好用,更易懂. 模块能定义函数,类和变量,模块里也能包含可执行的代码. 包括:内置模块,自定义模块,第三方模块: 2.作用 最大的好处是大大提高了代码的可维护性.其次,编写代码不必从零开始.当一个模块编写完毕,就可以被其他地方引用.我们在编写程序