闭包 closure
将内嵌函数的语句和这些语句的执行环境打包在一起后,得到的函数对象称为闭包(closure)
闭包必须满足以下三个条件:
1. 必须有一个内嵌函数
2. 内嵌函数必须引用外部函数中的变量
3. 外部函数返回值必须是内嵌函数
示例:
见closure.py
说明:
如果一个内嵌函数访问了外部嵌套函数作用域内的变量,则这个内嵌函数就是闭包
装饰器 decorators(专业提高篇)
什么是装饰器:
装饰器是一个函数,这个函数的主要作用是包装别一个函数或类(后在才讲)
包装的目的是在不改变原函数名的情况下改变被包装对象的行为
函数装饰器 function decorators
函数装饰器是指装饰器是一个函数,传入的是一个函数,返回的也是一个函数
示例:
见deco1.py
见deco2.py
见deco3.py
见deco4.py
函数的文档字符串:
语法:
def 函数名(参数列表):
"""函数的文档字符串"""
函数语句块
说明:
文档字符串通常来用说明本函数的功能和使用方法
在交互模式下,输入help(函数名) 可以查看函数的"文档字符串"
函数的__doc__属性:
函数内第一次末赋值给任何变量的字符串是此函数的文档字符串
此字符串会自动赋值给函数的__doc__属性
示例:
def cba():
'这是一个文档字符串'
pass
print(cba.__doc__) # 这是一个文档字符串
函数定义语句的完整语法:
[@装饰器1]
[@装饰器2]
[...]
def 函数名([位置形参], [*元组形参], [命名关键字形参],
[**字典形参]):
"文档字符串"
语句块
模块 module
什么是模块:
模块是一个包含有一系列变量,函数,类等组成的程序组
模块是一个文件,模块文件通常以.py结尾
作用:
1. 让一些相关的变量,函数,类等有逻辑的组织在一起,使逻辑结构更加清晰
2. 模块中的变量,函数和类可提供给其它模块使用
模块的分类:
内置模块(biultins), 在解释器的内部可以直接使用
标准库模块,安装python时已安装且可直接使用
第三方模块(通常为开源), 需要自己安装
用户自己编写的模块(可以作为其它人的第三方模块)
模块的导入 import
import 语句
语法:
import 模块名1 [as 模块新名1][,模块名2 [as 模块新名2], ....]
示例:
import math # 导入数学模块
import sys, os # 导入 sys,os模块
作用:
将某模块整体导入到当前模块中
用法:
模块名.属性名
help(模块名) 查看模块内的变量,函数,类等
练习:
1. 输入一个圆的半径,打印出这个圆的面积
2. 输入一个圆的面积,打印出这个圆的半径
面积 = pi * 半径的平方
(要求用math模块内的函数和变量)
from import 语句
语法:
from 模块名 import 模块属性名1 [as 属性新名1], 模块属性名2 [as 属性新名2], ...
作用:
将某模块内的一个或多个属性导入到当前模块的作用域
示例:
from math import pi, sqrt
from math import factorial as fac
from math import sin
area = pi * 10 ** 2 # 可以直接使用导入的函数名或变量名
from import *语句
语法:
from 模块名 import *
作用:
将某模块的所有属性导入到当前模块
示例:
from math import *
print(sin(pi/2))
print(factorial(10))
dir 函数
格式:
dir([对象]) -> 返回一个字符串列表
说明:
如果没有参数调用,则返回当前作用域内的所有变量的列表
如果给定一个对象作为参数,则返回这个对象的所有变量的列表
1. 对于模块,返回这个模块的全部属性
2. 对于一个类对象,返回类对象的所有变量,并递归基类对象的所有属性
3. 对于其它对象返回所有变量,类变量和基类变量
数学模块 math
模块名math
常用函数见:
python_base_docs_html/数学模块math_???.html
练习:
请编写函数 fun(n) 其功能是计算并输出下列多项式的和
Sn = 1 + 1/1! + 1/2! + 1/3! + 1/4! +... +1/n!
请编写函数 fun(x, n) 它的功能是计算下载多数项的和并返回:
s = 1 + x + x**2/2! + x**3/3! + x**n/n!
print(fun(3.1, 10))
练习:
1. 已知有五位朋友在一起
第五位朋友比第四个人大2岁
第四位朋友比第三个人大2岁
第三位朋友比第二个人大2岁
第二位朋友比第一个人大2岁
第一个人说他今年10岁,
编写程序算出第5个人几岁
2. 改写之前的学生信息管理项目源码,要求带有操作界面:
+------------------------------+
| 1) 添加学生信息 |
| 2) 显示所有学生的信息 |
| 3) 删除学生信息 |
| 4) 修改学生成绩 |
| 5) 按学生成绩高-低显示学生信息 |
| 6) 按学生成绩低-高显示学生信息 |
| 7) 按学生年龄高-低显示学生信息 |
| 8) 按学生年龄低-高显示学生信息 |
| q) 退出 |
+------------------------------+
请选择:
要求,每个功能至少写一个函数与之相对应