参数-匿名函数-生成式-生成器-装饰器

简介: 函数的参数参数类型:关于函数的参数,我们经常在一些代码中会发现 def(*args,**kwargs)的表现形式,其中定义的分别是元组和字典:*args —— tuple(1,)**kwargs —— dict(“k”:“v”)例如:fun(*args,...

函数的参数

参数类型:
关于函数的参数,我们经常在一些代码中会发现 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()
目录
相关文章
|
9月前
|
Python
python函数的参数学习
学习Python函数参数涉及五个方面:1) 位置参数按顺序传递,如`func(1, 2, 3)`;2) 关键字参数通过名称传值,如`func(a=1, b=2, c=3)`;3) 默认参数设定默认值,如`func(a, b, c=0)`;4) 可变参数用*和**接收任意数量的位置和关键字参数,如`func(1, 2, 3, a=4, b=5, c=6)`;5) 参数组合结合不同类型的参数,如`func(1, 2, 3, a=4, b=5, c=6)`。
55 1
|
Python
Python函数的参数学习
Python函数的参数学习
58 0
|
5月前
|
Python
全网最适合入门的面向对象编程教程:Python函数方法与接口-函数与方法的区别和lamda匿名函数
【9月更文挑战第15天】在 Python 中,函数与方法有所区别:函数是独立的代码块,可通过函数名直接调用,不依赖特定类或对象;方法则是与类或对象关联的函数,通常在类内部定义并通过对象调用。Lambda 函数是一种简洁的匿名函数定义方式,常用于简单的操作或作为其他函数的参数。根据需求,可选择使用函数、方法或 lambda 函数来实现代码逻辑。
|
9月前
|
Python
Python学习 -- 高阶、闭包、回调、偏函数与装饰器探究
Python学习 -- 高阶、闭包、回调、偏函数与装饰器探究
56 0
19.从入门到精通:Python函数 定义一个函数 函数调用 参数传递
19.从入门到精通:Python函数 定义一个函数 函数调用 参数传递
|
分布式计算 索引 Python
猿创征文|Python迭代器、生成器、装饰器、函数闭包
猿创征文|Python迭代器、生成器、装饰器、函数闭包
136 0
猿创征文|Python迭代器、生成器、装饰器、函数闭包
|
存储 缓存 算法
【Python高级编程】—— 函数式编程总结(生成器、迭代器、匿名函数、高阶函数、返回函数、闭包、装饰器、偏函数)
Python函数式编程的一般概念及特点, 迭代器、生成器表达式、内置函数、常用高阶函数、递归与归约、实用模块和装饰器的用法, 以及避开Python严格求值顺序的变通方法、Web服务设计方法和一些优化技巧。
326 1
【Python高级编程】—— 函数式编程总结(生成器、迭代器、匿名函数、高阶函数、返回函数、闭包、装饰器、偏函数)
|
Python
【Python基础之函数:多层语法糖、装饰器和装饰器修复技术及递归函数】
【Python基础之函数:多层语法糖、装饰器和装饰器修复技术及递归函数】
140 0
【Python基础之函数:多层语法糖、装饰器和装饰器修复技术及递归函数】
|
设计模式 安全 Java
【精通函数式编程】(二)代码的行为参数化传递
在我们平时的工作中,我们的需求是不断变化的,这个接口怎么设计更通用一些呢?
【精通函数式编程】(二)代码的行为参数化传递
|
程序员 索引 Python
【Python基础之函数:异常相关和生成器对象、yield用法、生成器表达式】
【Python基础之函数:异常相关和生成器对象、yield用法、生成器表达式】
118 0