函数
函数的定义
函数:对程序逻辑进行结构化的一种编程方法
定义: ** def 函数名称():
代码
return 需要返回的内容**
函数关键字参数的使用
print 含有五个参数,需按顺序填写。若单独使用后面4个参数,需要使用参数=''的形式。
如图所示
函数分别赋值
` def func(a,b,c):
print('a=%s' %a)
print('b=%s' %b)
print('c=%s' %c)
func(1,2,3)`
所示结果 a=1 b=2 c=3
函数的变量作用域
var1=123 def func(): var1=233 print(var1) func() print(var1)
所示结果 var=123 var=233
当在函数内部定义值后会把外部定义的值覆盖
函数内外定义的值都被调用
使用 global 把函数内部var1=233
改为
global var1
var1=233
所示结果 var1=233 var1=233
迭代器与生成器
迭代器:iter
list1={1,2,3}
it=iter(list1)
print(next(it))
所示结果:1
特点:依次取值
生成器:yield
def frange(start,stop,step ):#生成器制作 浮点数range
x=start
while x<stop:
yield x #一次只输出一个值,记录当前位置
x+=step
for i in frange(10,20,0.5):
print(i)
所示结果 10,10.5,11....
Lambda表达式
①
lambda x:x<=(month,day)
||
def func1(x):
return x<=(month,day)
②
lambda item:item[1]
||
def func2(item):
return item[1]
内建函数
①filter(函数/空,迭代器) 把满足函数的迭代数取出来
a=[1,2,3,4,5,6,7]
print(list(filter(lambda x:x>2,a)))
所示结果:[3,4,5,6,7]
使用filter和lambda需要强制list转换
②map(函数,,传递多个参数) 将多个参数依次处理
a=[1,2,3]
b=[2,3,5]
print(list(map(lambda x,y:x+y,a,b)))
所示结果:[3,5,8]
③reduce(函数,序列,初始值) 将依次序列和初始值按照函数的方式做运算
reduce(lambda x,y:x+y,[2,3,4],1)
所示结果 (1+2)+3+4=10
③zip(多个元素) key与value的对调
x=zip((1,2,3),(4,5,6))
for i in x:
print(i)
所示结果:(1,4)(2,5)(3,6)
可使用for in的形式取值说明为迭代函数 拥有iter形式
x={'a':'aa','b':'bb'}
y=zip(x.values(),x.keys())
print(dict(y))
所示结果:{'aa': 'a', 'bb': 'b'}
闭包
闭包:外部函数被内部函数引用。类似函数嵌套
def sum(a): #外部函数
def add(b): #内部函数
return a+b
return add #返回内部名称
#使用add 称函数名称或者函数的引用
#使用add() 称函数的调用
num1=func()
num2=sum(2) #num2相当于内部函数
print(num2(4))
所示结果:6
闭包实现运算
def a_line(a,b): #外部函数
def arg_y(x): #内部函数
return a*x+b
return arg_y #返回内部名称
line=a_line(3,5) #a,b的值
print(line(10)) #x的值
所示结果:35
装饰器
增加额外功能但不需要额外的代码
time库
sleep方法:运算时间暂停几秒
time方法:1970年1月1日秒数时间统计
import time
print(time.time())
time.sleep(3)#暂停3秒
函数的运行时间
import time
def i_can_sleep():
time.sleep(3)
start=time.time()
i_can_sleep()
stop=time.time()
print('函数运行了%s秒'%(stop-start))
所示结果:函数运行了3.000880718231201秒
@xxx 装饰器
def timer(func):
def wrapper():
start=time.time()
func()
time.sleep(3)
stop=time.time()
print('函数运行了%s秒'%(stop-start))
return wrapper
@timer #装饰器
def i_can_sleep():#i_can_sleep被装饰函数
time.sleep(3)
i_can_sleep()
#timer调用i_can_sleep函数 传递到timer 接收一个func变量 func传递内部函数wrapper
带参数的装饰器
#带参数的装饰器
#两个数的累加和
def new_tips(argv):#argv接收new_tips装饰器add,del参数的传递
def tips(func):
def nei(a,b):#a,b传递到内部函数
print('start %s %s'%(argv,func.__name__)) #func.__name__取函数名。func为外部函数tips传进的名称
func(a,b)
print('stop %s %s'%(argv,func.__name__))
return nei #返回给tips
return tips #返回给new_tips
@new_tips('add') #带参数装饰器
def add(a,b):
print(a+b)
@new_tips('del')
def sub(a,b):
print(a-b)
print(add(5,4))
print(sub(5,4))
**所示结果:**
start add add
9
stop add add
None
start del sub
1
stop del sub
None
上下文管理器
with
f=open('name.txt')
try: #为了保证打开文档无读取异常 用try进行封装
for line in f:
print(line)
finally: #打开失败
f.close()
可简化成
with open('name.txt') as f:
for line in f:
print(line)
模块
定义
通俗就是需要导入的已有代码段
写法:
import 模块名称
form 模块名称 import 方法名
import os
os.所有方法
import matplotlib as m #将模块重命名为m
m.xxx
#不使用 模块.xxx方法
form time import sleep
sleep()
#自定义模块
import 自创文件名
语法规范
小tips:整体右移 按Tab