函数
2019-06-25 16:26:27 0 举报
AI智能生成
函数集合
作者其他创作
大纲/内容
函数的结构
def func():
函数体
函数体
函数的执行(调用)
函数名()
空间,取值
空间
局部作用域
局部名称空间
全局作用域
内置名称空间
全局名称空间
加载顺序
内置--> 全局-->局部
取值顺序
就近原则,LEGB原则
global
1,在局部名称空间声明一个全局变量
def func():
global name
name = 'alex'
print(name)
func()
global name
name = 'alex'
print(name)
func()
2, 在局部修改全局变量
nonlocal
1, 不能操作全局变量
2, 内存函数对外层函数的变量进行修改,用到nonlocal
闭包
什么是闭包?
1,存在嵌套函数中
2, 内存函数对外层函数非全局变量的使用。
闭包的好处
对于你引用的这个自由变量不会再内存中消失,保证数据安全。
闭包的判断
闭包是嵌套在函数中的函数。
闭包必须是内层函数对外层函数的变量(非全局变量)的引用。
判断一个函数是不是闭包 == 闭包函数有没有自由变量
print(ret.__code__.co_freevars)#会返回一共元祖
闭包必须是内层函数对外层函数的变量(非全局变量)的引用。
判断一个函数是不是闭包 == 闭包函数有没有自由变量
print(ret.__code__.co_freevars)#会返回一共元祖
匿名函数
func= lambda x: (x[0],x[2])
func() 加括号才会运行**
lambda 关键字 **后面接形参** **:**号隔开 后面是**返回值**
匿名函数最常用的就是与内置函数结合使用。
func() 加括号才会运行**
lambda 关键字 **后面接形参** **:**号隔开 后面是**返回值**
匿名函数最常用的就是与内置函数结合使用。
什么是函数?
减少代码的重复性。
增强了代码的可读性。
函数的返回值
没有return
返回的是None
return
return 单个值
与单个值的数据类型相同
return 多个值 1,'alex', [1,2,3]
(1, 'alex',, [1,2,3])
函数的参数
形参
1,位置参数。
从左至右一一对应。
2,默认参数。
传值覆盖,不传则默认。
3,万能参数。
*args, **kwargs。
4,仅限关键字参数。
*args,仅限关键字参数,**kwargs,
形参角度顺序:位置参数,*args, 默认参数,仅限关键字参数, **kwargs
实参
1,位置参数: 从左至右一一对应。
2, 关键字参数:
一一对应。
3, 混合参数(位置参数,关键字参数):
位置参数一定要在关键字参数前面,一一对应。
* 的魔性用法
函数的定义;*聚合。
函数的调用:*打散。
函数的嵌套
遇到函数名() 执行该函数
函数名的应用
1,函数名就是变量。
2,函数名对应的是函数的内存地址。
3,函数名可以作为容器类类型的元素。
4,函数名可以作为函数的参数传递。
5,函数名可以作为函数的返回值。
函数的三大器
生成器
本质就是迭代器。
唯一的不同:生成器是自己用python代码构建的。
生成器的三种产生方式:
生成器函数。
函数中含有yield,就是生成器函数
生成器表达式。
循环模式:(变量(加工后的变量) for 变量 in iterable)
筛选模式:(变量(加工后的变量) for 变量 in iterable if 条件)
python提供的。
列表推导式
循环模式:[变量(加工后的变量) for 变量 in iterable]
筛选模式:(变量(加工后的变量) for 变量 in iterable if 条件]
装饰器
本质就是闭包,在不改变原函数的代码以及调用方式的前提下,给其增加额外的功能。
满足开放封闭原则。
应用:登录认证,打印日志等等。
装饰器的基本结构:
def wrapper(f):
def inner(*args,**kwargs):
ret = f(*args,**kwargs)
return ret
return inner
def inner(*args,**kwargs):
ret = f(*args,**kwargs)
return ret
return inner
迭代
迭代器
字面意思: 重复的更新迭代的工具
专业角度:内部含有__iter__,并且含有__next__方法
优点:
1,节省内存。
2,惰性机制。
3,不走回头路。
缺点:
操作方法较少,不直观,查询速度较慢。
可迭代对象
字面意思: 重复的更新迭代的数据
专业角度:内部含有__iter__方法
可迭代对象:str,list tuple dict,set range
优点:
直观。
操作方便。
缺点:
占用内存。
转化:iter(iterable)
内置函数
最重要的 必须熟练
sum() 数字相加求和
sum() 数字相加求和
sum(iterable,)
print(sum([1,2,3,4]))
print(sum([1, 2, 3, 4], 100))
sun(可迭代对象,默认起始值)
sum(iterable,)
print(sum([1,2,3,4]))
print(sum([1, 2, 3, 4], 100))
sun(可迭代对象,默认起始值)
print
print 默认是有换行的 要让他没换行 把默认参数end=‘’
# sep 设定分割符。
# end 默认是换行
print(1, 2, 3, sep='|')#1|2|3
print(1, 2, end=' ')
# sep 设定分割符。
# end 默认是换行
print(1, 2, 3, sep='|')#1|2|3
print(1, 2, end=' ')
abs()
abs() 获取绝对值
print(abs(-10))
print(abs(-10))
返回迭代器的内置
reversed()
对一个可迭代对象进行翻转,返回一个迭代器
s1 = 'alex'
print(reversed(s1))
for i in reversed(s1):
print(i)
s1 = 'alex'
print(reversed(s1))
for i in reversed(s1):
print(i)
filter筛选模式
filter 返回一个迭代器
筛选模式
返回值为True的留下来
print(filter(lambda x: x>60,l1))
print(list(filter(lambda x: x>60,l1)))
筛选模式
返回值为True的留下来
print(filter(lambda x: x>60,l1))
print(list(filter(lambda x: x>60,l1)))
map循环模式
map 返回一个迭代器
循环模式
l1 = [56, 67, 12, 34, 78, 90,]
print(list(map(lambda x:x**2,l1)))
循环模式
l1 = [56, 67, 12, 34, 78, 90,]
print(list(map(lambda x:x**2,l1)))
zip拉链方法
zip 拉链方法 返回一个迭代器
取决于最短的 list后是元祖形式
不list 或者next 不会运行
l1 = [1, 2, 3, 4]
tu = ('a', 'b', 'c')
s = 'python23'
print(list(zip(l1,tu,s)))#[(1, 'a', 'p'), (2, 'b', 'y')]
取决于最短的 list后是元祖形式
不list 或者next 不会运行
l1 = [1, 2, 3, 4]
tu = ('a', 'b', 'c')
s = 'python23'
print(list(zip(l1,tu,s)))#[(1, 'a', 'p'), (2, 'b', 'y')]
可以 加key的
max min找最大或最小
加key 后面接函数名 (匿名函数)
运行步骤 如下
会自动将客迭代对象的元素依次传给x,返回值设定什么,就按照什么比较大小。
最后将x返回。 x就是迭代元素
dic = {'c': 1, 'b': 2, 'a': 3}
# 最小的值对应的键返回
# print(min(dic))#默认比较建
# print(min(dic,key=lambda x:dic[x]))#字典默认传的是建
运行步骤 如下
会自动将客迭代对象的元素依次传给x,返回值设定什么,就按照什么比较大小。
最后将x返回。 x就是迭代元素
dic = {'c': 1, 'b': 2, 'a': 3}
# 最小的值对应的键返回
# print(min(dic))#默认比较建
# print(min(dic,key=lambda x:dic[x]))#字典默认传的是建
sorted 默认从小到大
# sorted 默认从小到大
# l1 = [('张一东', 80), ('张耳洞', 75), ('怼怼哥', 7), ('李业', 59)]
# print(sorted(l1,key=lambda x:x[1]))
# print(sorted(l1,key=lambda x:x[1],reverse=True))
# l1 = [('张一东', 80), ('张耳洞', 75), ('怼怼哥', 7), ('李业', 59)]
# print(sorted(l1,key=lambda x:x[1]))
# print(sorted(l1,key=lambda x:x[1],reverse=True))
一般 没什么用的
解码 编码
# 内置函数:bytes()
s1 = '太白'
#方法一:
print(s1.encode('utf-8'))
方法二:
print(bytes(s1,encoding='utf-8'))
# 解码:
b1 = b'\xe5\xa4\xaa\xe7\x99\xbd'
#方法一:
print(b1.decode('utf-8'))
#方法二:
# print(str(b1, encoding='utf-8'))
s1 = '太白'
#方法一:
print(s1.encode('utf-8'))
方法二:
print(bytes(s1,encoding='utf-8'))
# 解码:
b1 = b'\xe5\xa4\xaa\xe7\x99\xbd'
#方法一:
print(b1.decode('utf-8'))
#方法二:
# print(str(b1, encoding='utf-8'))
reduce 鸡肋 拼接
reduce python3x 从内置函数剔除了。 还要导入模块
reduce的作用是先把列表中的前俩个元素取出计算出一个值然后临时保存着,
接下来用这个临时保存的值和列表中第三个元素进行计算,求出一个新的值将最开始
临时保存的值覆盖掉,然后在用这个新的临时值和列表中第四个元素计算.依次类推
# print(reduce(lambda x,y: x+y,[1,2,3,4,5]))
# print(reduce(lambda x,y: 2*x+y, [1,2,3]))
# print(reduce(lambda x,y: x+y, ['alex','s','b'])) # 可以用字符串拼接
reduce的作用是先把列表中的前俩个元素取出计算出一个值然后临时保存着,
接下来用这个临时保存的值和列表中第三个元素进行计算,求出一个新的值将最开始
临时保存的值覆盖掉,然后在用这个新的临时值和列表中第四个元素计算.依次类推
# print(reduce(lambda x,y: x+y,[1,2,3,4,5]))
# print(reduce(lambda x,y: 2*x+y, [1,2,3]))
# print(reduce(lambda x,y: x+y, ['alex','s','b'])) # 可以用字符串拼接
repr 原形毕露
# repr 原形毕露 **
# print('太白')
# print(repr('太白'))
# msg = '我叫%r' %('太白')
# print(msg)
# print('太白')
# print(repr('太白'))
# msg = '我叫%r' %('太白')
# print(msg)
0 条评论
下一页