day11回顾:
函数式编程
建议使用可重入函数
可重入函数一定不使用除局部变量以外的变量
高阶函数:
map(func,可迭代对象1,可迭代对象2,...)
filter(func,可迭代对象)
sorted(可迭代对象,key=None,reverse=False)
递归函数:
函数直接或间接调用自身
闭包 closure
内嵌函数引用了外部变量,返回的内嵌函数叫做闭包
---------------------------------------------
day13
装饰器 decorator (专业提高篇)
作用:
通常在不改变原函数的情况下,改变或添加原函数功能
什么是装饰器:
装饰器是一个函数,通常用来包装另一个函数或类(后面才讲)
函数装饰器
是指装饰器函数,传入的是函数,返回的也是函数
语法:
def 装饰器函数名(形参):
语句块
return 函数对象
@装饰器函数名
def 函数名(形参列表):
语句块
示例见:mydeco1.py
def mydeco(fn):
def fx():
print('----这是fn被调用之前------')
fn()
print('----这是fn被调用之后------')
return fx
@mydeco
def myfunc():
print('myfunc被调用')
#以上@mydeco等同于在def myfunc之后加了如下语句
#myfunc=mydeco(myfunc)
myfunc()
myfunc()
myfunc()
示例:mydeco2.py
此示例用装饰器改变原来函数的调用流程(业务流程)
银行业务
#此装饰器用来增加权限验证功能
def privileged_check(fn):
def fx(n,x):
print('正在进行权限验证...')
fn(n,x)
return fx
#---------增加短消息发送功能----------
def message_send(fn):
def fy(n,x):
fn(n,x)
print('正在发送短消息给',n)
return fy
#---------以下是魏老师写的程序----------
@privileged_check
def save_money(name,x):
print(name,'存钱',x,'元')
@message_send
@privileged_check
def withdraw(name,x):
print(name,'取钱',x,'元')
#--------以下是小张写的程序----------
save_money('小王',200)
save_money('小赵',400)
withdraw('小李',500)
函数的文档字符串:
函数内第一次未赋值给任何变量的字符串是函数的文档字符串
语法:
def 函数名(参数列表):
'函数的文档字符串'
函数语句块
示例:
def cba():
"""这是一块文档字符串
以下省略300字..."""
pass
函数的__doc__属性
__doc__属性用于记录函数的文档字符串
如:
print(cba.__doc__)
函数定义语句(def语句)的完整语法:
[@装饰器名1]
[@装饰器名2]
[...]
def 函数名([位置形参],[*元组形参],[命名关键字形参],[**字典形参]):
"文档字符串"
语句块
面试题:
L=[1,2]
def f(n,lst=[]):
'''lst 绑定的列表[]会在def 语句创建时创建,且和f绑定的函数一同存在'''
lst.append(n)
print(lst)
f(3,L) #[1,2,3]
f(4,L) #[1,2,3,4]
f(100) #[100]
f(200) #[100,200]
解决方法:
def f (n,lst=None)
if lst is None:
lst=[]
lst.append(n)
print(lst)
---------------------------------------------------------------------
模块 Module
什么是模块:
模块是包含有一系列数据,函数,类等组成的程序组
模块是一个文件,模块文件名通常以.py结尾
作用:
让一些相关的数据,函数,类等有逻辑的组织在一起,使逻辑更加清晰
模块中的数据,函数和类等可提供给其他模块或程序使用
模块的分类:
1内置模块,在解析器内部可以直接使用(通常用c语言编写)
2标准库模块,安装python时已安装,且可以直接使用
3.第三方模块(通常为开源,需要自己安装)
$pip3 install xxxx
4.用户自己编写的模块(也可以作为其他人的第三方模块)
模块的导入语句:
import 语句:
语法:
import 模块名1 [as 模块新名1],模块名2[as 模块新名2],...
作用:
将某模块整体导入到当前的模块中
用法:
模块名.属性名
如:
import math
print(math.factorial(5)) #求阶乘
print('圆周率为',math.pi)
dir(obj)函数,返回模块内所有属性的字符串列表
help(模块名) 可以查看模块相关的文档字符串
练习:
1.输入一个圆的半径,打印这个圆的面积
2.输入一个圆的面积,打印这个半径(用math模块)
import math
r=float(input('输入半径'))
print('面积是:',math.pi*r**2)
s=float(input('输入圆面积'))
print('圆的半径是:',math.sqrt(s/math.pi))
from import 语句:
语法:
from 模块名 import 模块属性名1 [as 属性新名1],模块属性名2[as 属性新名2]
作用:
将某个模块的一个或多个属性导入到当前模块的作用域
示例:
from math import sin
from math import pi,e,cos
from math import factorial as fac
print(sin(pi/2)*fac(5))
from import *语句
语法:
from 模块名 import *
作用:
将某模块的所有属性导入到当前模块
示例:
from math import *
print(sin(pi/2))
print(factorial(5))
dir 函数
dir ([对象]) 返回一个字符串列表
作用:
1如果没有参数,则返回当前作用域内所有变量的列表
2如果给定一个对象作为参数,则返回这个对象的所有变量的列表
1)对于一个模块,返回这个模块的全部变量
2)对于一个类,返回类的所有类变量,并递归基类对象的所有变量
3)对于其他对象返回所有变量,类变量和基类变量
数学模块 math
模块名:math
import math
from math import sin, cos ,pi
from math import*
文档参见:
python_base_docs_html/数学模块
math.html
时间模块:
模块名:time
文档参见:
python_base_docs_html/时间模块
time.html
import time
print('这是第一句')
time.sleep(5)
print('这是第二句')
练习:
写一个程序,输入你的生日
1)算出你已经出生了多少天
2)算出你出生的那天是星期几
import time
y=int(input('输入出生年份'))
m=int(input('输入出生月份'))
d=int(input('输入出生日'))
t=(y,m,d,0,0,0,0,0,0)
birth_time=time.mktime(t)
cur_time=time.time()
live_s=cur_time-birth_time
print('您已出生:',int(live_s/60/60/24),'天')
t=time.localtime(birth_time)
d={0:'一',1:'二',3:'三'}
print('您出生那天是星期',d[t[6]])
系统模块:
运行时系统相关信息
模块名:
文档参见:
系统模块sys.html
练习:
1编写函数 fun ,其功能是计算下列多项式的和
f(n)=1+1/1!+1/2!+1/3!+...+1/n!
当n为20时,求值
2.写一个程序,以电子时钟格式显示时间:
格式为:
HH:MM:SS 如: 15:58:26
3.设置一个闹钟程序,启动时设置定时时间,到时间后打印一句"时间到!",然后退出程序
python基础-day13
最新推荐文章于 2022-12-04 17:28:18 发布