Python函数和 lambda表达式

Python提供了许多内置函数,比如:print(),len()等。它还支持用户自定义函数。

一、Python函数

1、函数定义使用

(1)函数定义

Python 允许我们将常用的代码以固定的格式封装(包装)成一个独立的模块,只要知道这个模块的名字就可以重复使用它,这个模块就叫做函数(Function)。

定义函数需要使用 def 关键字,一般格式如下:

def 函数名(参数列表):
    函数体
    [return [返回值]]

说明:

  • 函数名:就是一个符合 Python 语法的标识符,推荐见名知意。
  • 形参列表:设置该函数可以接收多少个参数,多个参数之间用逗号( , )分隔。
  • 函数体:实现特定功能的多行代码
  • [return [返回值] ]:可选参数,用于设置该函数的返回值。不带表达式的 return 相当于返回 None,即没有返回值。

(2) 函数使用

函数调用的基本语法格式:

[返回值] = 函数名([形参值])

示例代码如下:

# 自定义函数
'''
定义一个求 2个数之和的函数
'''
def my_sum(a, b):
    '''
        求 2个数之和
    '''
    sum = a + b
    print("my_sum 函数执行了")
    return sum


# 调用函数
res = my_sum(10, 2)
print("my_sum 返回值为:", res)

在这里插入图片描述

2、为函数提供说明文档

函数的说明文档通常位于函数内部、所有代码的最前面。

通过调用 Python 的 help() 内置函数或者 __doc__ 属性,可以查看某个函数的使用说明文档。

help(my_sum)
print("-----------")
print(my_sum.__doc__)

在这里插入图片描述

3、函数参数传递

python 中一切都是对象,在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。

函数参数传递可以传不可变对象和传可变对象。可以理解为值传递还是引用传递,

  • 不可变类型:适用于实参类型为不可变类型(字符串、数字、元组)。类似 Java的值传递
  • 可变类型:适用于实参类型为可变类型(列表,字典)。类似 Java的引用传递

(1)传不可变对象实例

通过 id() 函数来查看内存地址变化。

def change(a):
    print(id(a))  # 指向的是同一个对象
    a = 10
    print(id(a))  # 一个新对象


a = 1
print(id(a))
print("-----调用函数之前------")
change(a)

在这里插入图片描述
(2)传可变对象实例

def changeme(mylist):
    """修改传入的列表"""
    mylist.append([1, 2, 3, 4])
    print("函数内取值: {},id:{}", mylist, id(mylist))
    return


mylist = [10, 20, 30]
changeme(mylist)
print("函数外取值: {},id:{}", mylist, id(mylist))

在这里插入图片描述

4、函数参数类型

4.1 位置参数

位置参数也称必需参数/必备参数,是指必须按照正确的顺序将实际参数传到函数中。

即调用函数时传入实际参数的数量和位置都必须和定义函数时保持一致(传多传少都不行)。

示例代码如下:

def my_sum(a, b):
    sum = a + b
    print("my_sum 函数执行了")
    return sum

# 调用函数时,必须传递 2 个参数,否则会引发错误
res = my_sum(10, 2)
print("my_sum 返回值为:", my_sum(10, 2))

print("my_sum 返回值为:", my_sum(2))  # TypeError: my_sum() missing 1 required positional argument: 'b'
4.1.1 强制位置参数

Python3.8 新增了一个函数形参语法 / 用来指明函数形参必须使用指定位置参数,不能使用关键字参数的形式。

在以下的例子中,形参 a 和 b 必须使用指定位置参数,c 或 d 可以是位置形参或关键字形参,而 e 和 f 要求为关键字形参:

def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)

# 正确调用函数
f(10, 20, 30, d=40, e=50, f=60)

# 错误调用函数
# f(10, b=20, c=30, d=40, e=50, f=60)   # b 不能使用关键字参数的形式。 TypeError: f() got some positional-only arguments passed as keyword arguments: 'b'
# f(10, 20, 30, 40, 50, f=60)  # e 必须使用关键字参数的形式。TypeError: f() takes 4 positional arguments but 5 positional arguments (and 1 keyword-only argument) were given

4.2 关键字参数

关键字参数是指使用形式参数的名字来确定输入的参数值。

通过此方式指定函数实参时,不再需要与形参的位置完全一致,只要将参数名写正确即可。因为 Python 解释器能够用参数名匹配参数值。

示例代码如下:

def dis_str(str1, str2):
    print("str1=", str1)
    print("str2=", str2)

# 位置参数调用
dis_str("aaa", "bbb")
print("------1-----")
# 关键字参数调用
dis_str(str2="bbb", str1="aaa")
print("------2-----")
# 混合传参调用
dis_str("aaa", str2="bbb")

在这里插入图片描述

注意:位置参数和关键字参数可以混合传参。但是,混合传参时关键字参数必须位于所有的位置参数之后。

4.3 默认参数

Python 允许为参数设置默认值,即在定义函数时,直接给形式参数指定一个默认值。

默认参数是指调用函数时,如果没有传递参数,则会使用默认参数。

Python 定义带有默认值参数的函数,其语法格式如下:

def 函数名(...,形参名,形参名=默认值):
    代码块

注意:

  • 当定义一个有默认值参数的函数时,有默认值的参数必须位于所有没默认值参数的最后,否则会产生语法错误。
  • 可以使用“函数名.__defaults__”查看函数的默认值参数的当前值,其返回值是一个元组。

示例代码如下:

# str1没有默认参数,str2有默认参数
def dis_str(str1, str2="str2222"):
    print("str1=", str1)
    print("str2=", str2)


dis_str("aaa")
print("------------")
dis_str("aaa", "bbb")

print("查看函数的默认值参数的当前值:", dis_str.__defaults__)

在这里插入图片描述

4.4 不定长参数

不定长参数是指一个函数能处理比当初声明时更多的参数,这些参数叫做不定长参数。

基本语法如下:

def functionname([formal_args,] *var_args_tuple|**var_args_dict ):
   "函数_文档字符串"
   function_suite
   return [expression]

注意:

  • 一种是参数带两个星号 *,表示会以元组(tuple)的形式导入,存放所有未命名的变量参数。
  • 一种是参数带两个星号 **,表示参数会以字典(dict)的形式导入,存放所有未命名的变量参数。

示例代码如下:

# sarg1为位置参数,vartuple为可变参数
def printInfo1(arg1, *vartuple):
    print("printInfo1输出: ")
    print("arg1={},type={}", arg1, type(arg1))
    print("vartuple={}, type={}", vartuple, type(vartuple))


def printInfo2(arg1, **vardict):
    print("printInfo2输出: ")
    print("arg1={},type={}", arg1, type(arg1))
    print("vardict={}, type={}", vardict, type(vardict))


# 调用函数
printInfo1(70, 'abc', 60, 50, "www")
printInfo2(70, k1='abc', k2=60, k3=50, k4="www")

在这里插入图片描述

4、return函数返回值

Python中,用 def 语句创建函数时,可以用 return 语句指定应该返回的值。

  • 该返回值可以是任意类型。
  • 该返回值参数可以指定,也可以省略不写(不写 return 相当于返回 None)。

示例代码如下:

def changeme(mylist):
    mylist.append([1, 2, 3, 4])
    print("函数内取值: mylist={},id(mylist){}", mylist, id(mylist))
    return mylist


mylist = [10, 20, 30]
print("调用函数之前: mylist={},id(mylist){}", mylist, id(mylist))
mylist = changeme(mylist)
print("函数返回值: mylist={},id(mylist){}", mylist, id(mylist))

在这里插入图片描述

二、lambda表达式

lambda 表达式,又称匿名函数,所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。常用来表示内部仅包含 1 行表达式的函数。

如果一个函数的函数体仅有 1 行表达式,则该函数就可以用 lambda 表达式来代替。

Python 使用 lambda 关键字来创建匿名函数。语法格式如下:

name = lambda [list] : 表达式

其中:

  • name 为该 lambda表达式的名称。即调用函数名
  • [list] 作为可选参数,等同于定义函数是指定的参数列表;

该语法格式转换成普通函数的形式,如下所示:

def name(list):
    return 表达式
name(list)

示例代码如下:求 2 个数之和的函数

# 使用普通函数的方式
def my_sum(a, b):
    sum = a + b
    return sum

sum = my_sum(10, 2)
print("使用普通函数的方式:sum= ", sum)

# 使用 lambda 表达式方式
sum_fun = lambda x, y: x + y
print("使用 lambda 表达式方式:sum= ", sum_fun(3, 5))

在这里插入图片描述

可以理解 lambda 表达式为简单函数(函数体仅是单行的表达式)的简写版本。相比函数,lamba 表达式具有以下 2 个优势:

  • 对于单行函数,使用 lambda 表达式可以省去定义函数的过程,让代码更加简洁;
  • 对于不需要多次复用的函数,使用 lambda 表达式可以在用完之后立即释放,提高程序执行的性能。

– 求知若饥,虚心若愚。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Lambda表达式Python中的一种匿名函数,它可以在一行代码中定义一个函数Lambda表达式通常用于简单的函数,它们可以作为参数传递给其他函数或作为返回值返回。 Lambda表达式的语法如下: lambda 参数列表: 表达式 其中,参数列表是用逗号分隔的形式参数,表达式是函数的返回值。 例如,下面的代码定义了一个简单的Lambda函数: f = lambda x: x * x 这个函数接受一个参数x,并返回x的平方。我们可以像调用普通函数一样调用它: print(f(5)) # 输出25 Lambda表达式还可以用于定义匿名函数,例如: g = lambda x, y: x + y 这个函数接受两个参数x和y,并返回它们的和。我们可以像调用普通函数一样调用它: print(g(2, 3)) # 输出5 总之,Lambda表达式Python中一种非常方便的函数定义方式,它可以让我们更加简洁地编写代码。 ### 回答2: Lambda表达式Python函数中的一种简洁方式,它可以定义在一行内的匿名函数。Lambda使用关键字“lambda”来表示,后面跟随一个或多个参数,分隔符为逗号,然后是冒号和一个表达式。返回值是该表达式的结果。 Lambda表达式的基本语法如下: lambda arguments: expression 其中arguments参数可以是0个、1个或多个参数,expression表达式是lambda函数的返回值。 Lambda表达式的使用场景比较广泛,通常用于函数式编程、过滤器(filter)、映射器(map)、排序器(sort)等操作中。 例如,我们可以使用lambda表达式来定义一个简单的函数: x = lambda a : a + 10 print(x(10)) # 输出结果为20 上述例子中,lambda表达式定义了一个参数“a”,表达式为“a+10”,即函数返回值为传入参数a加上10。 当需要对一个列表中的元素进行操作时,我们可以使用map函数结合lambda表达式来实现: lst = [1, 3, 5, 7] result_lst = list(map(lambda x:x*2, lst)) print(result_lst) # 输出结果为[2, 6, 10, 14] 上述例子中,lambda表达式定义了一个参数“x”,表达式为“x*2”,即将列表中的每个元素乘以2。map函数将该lambda表达式应用于lst中的每个元素,返回一个新的列表。 Lambda表达式比较适用于简单的函数定义和一些简单的操作,但对于较为复杂的任务或需要频繁使用的代码,建议还是使用函数进行定义。 ### 回答3: Python是一种广泛使用的编程语言,而函数Python编程的重要部分。在Python中,函数是一个特殊的代码块,可以接受一些输入(参数),并在执行一些操作后返回输出。其中,lambda表达式是定义函数的一种不同方式。 lambda表达式也被称为匿名函数,因为它们可以定义一个没有名称的函数。与普通函数不同,lambda函数只能包含一个表达式,而不是一条语句块。语法如下: lambda 参数: 表达式 下面是一个简单的例子: add = lambda x, y: x + y print(add(2, 3)) # 输出5 在这个例子中,lambda函数的定义是add = lambda x, y: x + y,其中参数是x和y,表达式是x + y。定义后,我们可以像使用普通函数一样使用它。 lambda函数有许多用途。其中之一是作为其他函数的参数,例如在sort()函数中进行排序。例如,我们可以使用lambda函数按照列表中每个元素的第二个元素进行排序。实现方式如下: a = [(1, 2), (4, 1), (9, 10), (13, -3)] a.sort(key=lambda x: x[1]) # 按每个元组的第二个元素进行排序 print(a) 输出结果为:[(13, -3), (4, 1), (1, 2), (9, 10)] 总之,Lambda表达式Python语言中一个十分有用的特性,它允许我们创建匿名函数,使代码变得更加简洁和易读。在实际编程中,可以将其用于诸如函数参数传递、过滤器、排序等许多编程任务中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值