百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

python中的函数(Python中的函数定义通过define关键字完成)

off999 2024-10-25 13:46 12 浏览 0 评论

前言

在 Python 中,函数是一等对象。编程语言理论家把“一等对象”定义为满 足下述条件的程序实体: 在运行时创建 能赋值给变量或数据结构中的元素,能作为参数传给函数,能作为函数的返回结果。即在 Python 中,所有东西都是一等对象。

函数的定义

python中定义函数使用关键字def,然后跟函数名与括号内的形参列表,例如如下所示:

def function_name(parameter_list):
    """doc string"
    // 具体逻辑

函数参数

  1. 默认值参数

在python当中我们可以为函数的参数指定默认值,这样在调用函数时,可以使用比定义时更少的参数。

def print_name(name="tom"):
    print(f"my name is {name}")


print_name() // 调用时不传递参数
print_name(name="jack") // 调用时传递参数,并覆盖默认值

我们需要记住的是默认参数的值只会计算一次,但是如果参数类型是可变类型时,就会产生意想不到的结果了,例如下面的例子

当参数类型为不可变对象时:

num = 5

def print_number(arg=num):
    print(arg)

num = 6
print_number(num) // 输出结果为5

当参数类型为可变对象时,例如参数类型为列表,函数会累积后续调用时传递的参数,具体代码例子如下所示:

>>> def print_list(a, L=[]):
...     L.append(a)
...     return L
... 
>>> print(print_list(1))
[1]
>>> print(print_list(2))
[1, 2]
>>> print(print_list(3))
[1, 2, 3]
>>> 

如果不想在后续调用之间共享默认值时,我们应该将默认值设置为None,具体如下所示:

>>> def pf(a, L=None):
...     if L is None:
...         L = []
...     L.append(a)
...     return L
... 
>>> print(pf(1))
[1]
>>> print(pf(2))
[2]
>>> print(pf(3))
[3]
>>> 

2. 关键字参数

关键字参数是指在函数调用中前面带有标识符(例如name=)或者作为包含在前面带有**的字典里的值传入的参数。例如下面所示:

def complete(shell=True, prefx="/"):
    ...

函数调用时,关键字参数必须跟在位置参数后面。所有传递的关键字参数都必须匹配一个函数接受的参数,关键字参数的顺序并不重要。

3. 位置参数

位置参数是指可出现于参数列表的开头以及斜杠(/)或者作为前面带有星号(*)的可迭代对象里的元素被传入。例如下面所示:

def complete(name, /, age, *):
    ...

4. 特殊参数

默认情况下,参数可以按位置或显式关键字传递给 Python 函数。为了让代码易读、高效,最好限制参数的传递方式,这样,开发者只需查看函数定义,即可确定参数项是仅按位置,按位置或关键字,还是仅按关键字传递。

例如下面的函数:

def complete(name, age, /, position_keyword, *, keyword):
    ...

其中name和age只能是位置参数,position_keyword可以是位置参数也可以是关键字参数,keyword只能是关键字参数。/和*是可选的。这些符号表明形参如何把参数值传递给函数:位置、位置或关键字、关键字。关键字形参也叫作命名形参。

  • 位置或关键字参数:函数定义中未使用正斜杠(/ )和x星号(*)时,参数可以按位置或关键字传递给函数。
  • 仅位置参数:仅限位置 时,形参的顺序很重要,且这些形参不能用关键字传递。仅限位置形参应放在(/ ) 正斜杠前。正斜杠(/ )用于在逻辑上分割仅限位置形参与其它形参。如果函数定义中没有 (/ ),则表示没有仅限位置形参。正斜杠(/ ) 后可以是 位置或关键字仅限关键字 形参。
  • 仅限关键字参数:把形参标记为仅限关键字,表明必须以关键字参数形式传递该形参,应在参数列表中第一个仅限关键字形参前添加星号(*)。

Lambda 表达式

lambda关键字用于创建小巧的匿名函数。Lambda 函数可用于任何需要函数对象的地方。在语法上,匿名函数只能是单个表达式。在语义上,它只是常规函数定义的语法糖。与嵌套函数定义一样,lambda 函数可以引用包含作用域中的变量。

>>> def make_incrementor(n):
...     return lambda x: x + n
... 
>>> f = make_incrementor(55)
>>> f(0)
55

高阶函数

接受函数为参数,或者把函数作为结果返回的函数是高阶函数。在函数式语言通常会提供 map、filter 和 reduce 三个高阶函数(有时 使用不同的名称)。在 Python 3 中,map 和 filter 还是内置函数,但是由于引入了列表推导和生成器表达式,它们变得没那么重要了。

  • map函数

map 函数,它接收两个参数,第一个参数是一个函数对象(当然也可以是一个lambda表达式), 第二个参数是一个序列。返回的是一个可迭代的map对象

>>> mp = map(lambda x: x * x, [1, 2, 3, 4, 5])
>>> mp
<map object at 0x7f34c9eceda0>
>>> for item in mp:
...     print(item)
... 
1
4
9
16
25
  • filter函数

filter 函数,和 map 函数相似。同样也是接收两个参数,一个函数对象或者是一个lambda 表达式和一个序列。它会遍历后面序列中每一个元素,并将其做为参数传入lambda表达式中,当表达式返回 True,则元素会被 保留下来,当表达式返回 False ,则元素会被丢弃。返回的是一个经过过滤操作的可迭代的filter对象。

>>> fl = filter(lambda x: x < 0, range(-3, 3))
>>> fl
<filter object at 0x7f34c9ece860>
>>> for item in fl:
...     print(item)
... 
-3
-2
-1
  • reduce函数

reduce 函数,也是类似的。它的作用是先对序列中的第 1,2 个元素进行操作,得到的结果再与第 三个数据用 函数对象或者lambda表达式运算,将其得到的结果再与第四个元素进行运算,以此类推下去直到后面 没有元素了。返回函数对象或lambda最终运行的结果。

>>> from functools import reduce
>>> rd = reduce(lambda x, y: x + y, [1, 2, 3, 4, 5, 6])
>>> rd
21
>>> 

函数注解

函数注解是可选的,用户可以自定义函数类型的元数据完整信息(其实就是指定函数参数的类型,作为动态语言有点多此一举了)标注以字典的形式存放在函数的__annotations__属性中,并且不会影响函数的任何其他部分。 形参标注的定义方式是在形参名后加冒号,后面跟一个表达式,该表达式会被求值为标注的值。 返回值标注的定义方式是加组合符号->,后面跟一个表达式,该标注位于形参列表和表示def语句结束的冒号之间。具体如下所示:

def complete(shell: bool = True, command: str = "") -> bool:
    ...

小结

在python中一切皆对象,我们可以把函数 赋值给变量、传给其他函数、存储在数据结构中,以及访问函数的属 性,供框架和一些工具使用。

相关推荐

Python中的两个内置函数id()和type()

id()>>>id(3)2531362761072>>>id(3.222222)2531397393680>>>id(3.0)25313...

python 函数中,如何将另一个函数作为参数传递

python函数中,如何将另一个函数作为参数传递,类似C#委托defadd(a,b):"""这是一个简单的加法函数,接受两个参数并返回它们的和。""...

Python性能暴涨10倍的终极指南:7个核心技巧+代码压缩秘籍

提升Python程序运行性能,使代码运行更流畅更快,以及压缩代码,减小代码大小,下面的方法仅供大家参考,有什么更好的方法在评论区说说。1.使用NumPy/SciPy替代纯Python循环...

Python 匿名函数(Lambda 函数)详解

匿名函数(AnonymousFunction),在Python中称为lambda函数,是一种不需要使用def关键字定义的小型函数。它主要用于简化代码,特别适合需要函数对象的地方。1.基...

Python学习笔记 | 匿名函数lambda、映射函数map和过滤函数filter

什么是匿名函数?定义:没有函数名的自定义函数场景:函数体非常简单,使用次数很少,没有必要声明函数,通常搭配高阶函数使用。高阶函数是能够把函数当成参数进行传递的函数,如:映射函数map和过滤函数fil...

python练习:自定义函数调用:商品购物实例

1、商品录入dict_myshanpin_iof={101:{"商品名称":"毛毛熊","单价":25},102:{"商品名称":...

Python中如何使用Lambda函数(lambda在python中的用法)

Python和其他编程语言一样,都在其语法中添加了lambda函数,Pythonlambda是匿名函数,比常规Python自定义函数有更简洁的语法。虽然Lambda语法在开始时可能会觉得有点混乱,...

8-Python内置函数(python内置函数代码)

Python提供了丰富的内置函数,这些函数可以直接使用而无需导入任何模块。以下是一些常用的内置函数及其示例:1-print()1-1-说明输出指定的信息到控制台。1-2-例子2-len()2-1-说...

用Python进行函数式编程(python函数程序)

什么是函数式编程?函数式程序设计是一种编程范例,它把计算当作数学函数的评价,避免状态和可变数据。换句话说,函数编程(FunctionalProgramming,FP)促进没有副作用和不变变量的代码。它...

python 函数进阶(python如何进阶)

1.有名函数和匿名函数#该函数有名称,名称是adddefadd(x,y):returnx+y#改函数没有名称属于匿名函数,也叫lambda表达式lambda_add...

python自学者的分享:自定义函数、参数作用域、匿名函数、装饰器

#自定义新函数函数名newhsdefnewhs(a,b=1):#b的默认值为1,在没有传入b值时,采用默认值,,默认值参数不能放前边returna-bprint(newh...

Python 函数式编程的 8 大核心技巧,不允许你还不会

函数式编程是一种强调使用纯函数、避免共享状态和可变数据的编程范式。Python虽然不是纯函数式语言,但提供了丰富的函数式编程特性。以下是Python函数式编程的8个核心技巧:1.纯函数(...

零基础到发布:手把手教你创建并分发 Python 自定义库

作为程序员,我们经常依赖各种外部库来解决不同的问题。这些库由技术娴熟的开发者创建,为我们提供了节省时间和精力的解决方案。但你是否曾想过:“我也能创建属于自己的自定义库吗?”答案是肯定的!本文将为你详细...

打工人学Python:(七)自定义函数,打造自己的武器库

从一个简单的函数开始#!/usr/bin/envpython#-*-encoding:utf-8-*-'''@Purpose:Wordcount@...

肖sir_python自定义函数format、zip函数

python自定义函数一、常见的自定义函数已经学过的函数:list、print、set、str、type、tuple、dict、range、input等今天学的函数:format二、实战讲解(一)f...

取消回复欢迎 发表评论: