函数的参数
参数类型: 关于函数的参数,我们经常在一些代码中会发现 def(*args,**kwargs)的表现形式,其中定义的分别是元组和字典:
*args —— tuple(1,)
**kwargs —— dict(“k”:“v”)
例如:
fun(*args,**kwargs )
fun(1,2,3,4,5,a=10,b=40 )
我们也可以简单的定义一个函数的参数:
def add(*args):
total = 0
for i in args:
total += i
print("total = {}".format(total))
if __name__ == '__main__':
add(1,2,3,4,5)
Python中有一类排序sort排序函数:
def add(*args):
total = 0
for i in args:
total += i
print("total = {}".format(total))
def sorDictValue(dict1):
print(sorted(dict1.items(),key=lambda item:item[0],reverse=False))
'''sorted后面接dict1表示把 key 值作为迭代对象,
如果加入dict1.items() 函数表示将字典的 keys 和 value 值都进行迭代'''
if __name__ == '__main__':
add(1,2,3,4,5)
s1 = lambda x,y:x+y
print(s1(10,20))
aaa = dict(a=100,b=10,c=50)
l = list()
sorDictValue(aaa)
匿名函数
匿名函数,就是没有名字的函数,但是为什么又需要匿名函数呢,它的作用又是什么 lambda函数是一种快速定义单行的最小函数,可以用在任何需要函数的地方
def fun(x,y):
return x*y
lambda 版本
r = lambda x,y:x*y
print(r(10,20))
生成式和生成器
列表生成式格式:
[exp for val in collection if condition]
例如
[x*x for x in range(10) if x*x%2==0]
生成器(generator):
方法一;
(exp for val in collection if condition)
例如:
(x*x for x in range(1,30) if x%2 ==0)
方法二:
使用yield关键字,包含yield语句的函数会被特地编译成生成器。
yield可以理解成return,但是并不退出,只是挂起,恢复的时候从yield下面开始执行。
# 列表生成式
a = [x*x for x in range(1,30) if x%2 ==0]
print(a)
print(type(a))
# <class 'list'>
y=list()
x=[1,2,3,4,5]
y+=x
y.append(100)
print(y)
print(x)
# 列表生成器 generator
b = (x*x for x in range(1,30) if x%2 ==0)
print(b)
print(type(b))
# <class 'generator'>
def test(l):
for i in l:
yield i # yield 相当于return
print("i = {}".format(i))
m = test([1,2,3,4,5,6,7,8,9])
print(type(m))
# <class 'generator'>
列表生成式直接返回了表达式的结果列表, 而生成器是一个对象,该对象包含了对表达式结果的计算引用,通过循环可以直接输出 生成器不会一次性列出所有的数据,当你用到的时候再列出来,这样降低了内存使用率
装饰器的作用
装饰器本质上是一个Python的函数, 它可以让其他函数在不需要做任何代码变动的前提下增加额外功能, 装饰器的返回值也是一个函数对象。 它经常用于在且慢需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。 装饰器是解决这类问题的绝佳设计, 有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用 简单来说,就是在不改变函数本身的情况下,在函数的前面或者后面增加一些额外功能
# 原函数
def hello():
print("hello world")
hello()
# 目的函数
def hello():
print("###########start###########")
print("hello world")
print("############end############")
hello()