在Python中,函数的三个要素是:函数名+参数+返回值
函数名:函数名是函数的标识符,用于唯一标识函数。在定义函数时,需要给函数一个名字,以便后续调用和引用。函数名应遵循命名规则,例如以字母或下划线开头,由字母、数字或下划线组成。命名规范可参考官网的PEP 8风格,地址如下:
https://peps.python.org/pep-0008/#function-and-variable-names
参数:参数是函数定义中用于接收输入值的变量。函数可以接受零个或多个参数,每个参数可以有自己的名称。参数允许在函数内部使用传递进来的值进行计算或处理。在调用函数时,可以向函数传递实际的参数值,这些值将被赋给函数定义中对应的参数变量。
返回值:返回值是函数执行完成后返回给调用者的结果。函数可以执行一系列操作,然后将结果返回给调用者进行进一步处理或使用。在函数定义中,可以使用return语句来指定函数的返回值。如果函数没有指定返回值,或者没有使用return语句,函数将默认返回None。
这三个要素共同构成了一个完整的函数定义和调用的过程。函数名用于唯一标识函数,参数用于接受输入值,返回值用于将结果返回给调用者。通过这种方式,可以封装和组织代码,实现代码的重用和模块化。
接下来我们一起看一个简单的函数定义的案例:
def add(a,b):
return a + b
从上面的案例可以看到,我们定义一个函数的话,需要用到关键字def进行定义。return用来给函数add提供函数调用后的返回值。
给函数添加一些参数类型说明以及返回值类型说明:
def add(a: int, b: int) -> int:
c = a + b
return c
在参数后面加一个冒号,然后跟上类型,可以声明函数想要接收的参数类型(但在调用时不会强制校验类型,传入其他类型也不一定会报错),在函数名后面加上->类型 ,用来声明这个函数的返回值的类型。这样做的好处可以提高代码的可读性以及增加一些错误检测机制。
函数的参数类型介绍
-
位置参数
位置参数是函数定义中的参数,按照它们在函数调用中的位置进行匹配。当函数被调用时,参数的值按照位置顺序依次传递给函数。
def add(x, y):
print(x)
print(y)
return x + y
result = add(3, 5)
在以上的案例中,位置参数3和5被传递给函数add的x和y,按照顺序,3将赋值给变量x,5将赋值给变量y。这是函数调用最常见的用法。特点:按照函数定义时参数的顺序去进行赋值。
-
关键字参数
关键字参数是以"参数名=值"的形式传递给函数的参数。使用关键字参数时,可以不按照参数定义的顺序传递参数值,而是通过参数名进行匹配。
def add(x, y):
print(x)
print(y)
return x + y
result = add(y=5, x=3)
注意:在函数调用的时候,关键字参数必须跟随在位置参数后面,否则会报错。
-
默认参数
默认参数是在函数定义时给参数指定一个默认值。如果函数调用时没有提供相应的参数值,将使用默认值。默认参数通常在函数定义的末尾。
def add(x, y=0):
print(x)
print(y)
return x + y
result = add(3,5)
result = add(3)
在上面的案例中,如果调用add方法只传入一个参数时,比如add(3) ,那么默认y的值就是0。
-
可变参数
可变参数允许函数接收任意数量的参数,主要有两种可变长度的参数用法:
*args:用于接收任意数量的位置参数,作为一个元组传递给函数。
**kwargs:用于接收任意数量的关键字参数,作为一个字典传递给函数。
def print_items(*args):
print(type(args))
for item in args:
print(item)
def print_dict(**kwargs):
print(type(kwargs))
for key, value in kwargs.items():
print(f"{key}: {value}")
print_items(1, 2, 3, 4) # 位置参数被当做元组处理(1, 2, 3, 4)
print_dict(a=1, b=2) # 关键字参数被当做字典处理{'a': 1, 'b': 2}
上面脚本运行结果:
下面再来看一些可变参数的其他用法:
def add(a, b=2, **kwargs):
print(a, b, kwargs)
add(1)
add(1, 3)
# a进行传参,b使用默认值,进行解包传kwargs
add(1, **{"key": "value"})
# 给a,b进行传参,进行解包传kwargs
add(1, 3, **{"key": "value", "key1": "val", "key2": 'val2'})
# a传参,b使用默认值,进行键值对传kwargs
add(1, name="yy", key="value")
# 给a,b进行传参,进行键值对传kwargs
add(1, 3, name="yy", key="value")
add(6, 3, name="yy", **{"key":"value", "b":6}) # 该行运行报错,已经进行对b参数不能进行重复传参
说明:
传值的时候需要传键值对,如果要传dict需要在前面加上**,表示将这个dict的所有key-value当成独立的关键字参数(变成 key = value)传入到 kwargs●不用 dict 的话也可以直接key=value的写法,如果和默认参数重名,若前面没有传值的话,会当成默认参数传值;若有的话会直接报错
●声明函数时,默认参数不可以放在可变参数后面
关注公众号,测试干货及时送达
往期精彩回顾
一篇文章为你揭秘pytest的基本用法
Anaconda-一个开源的Python发行版本
Python脚本读取Consul配置信息
Python中使用pickle库进行数据的序列化存储
Python小知识-函数传参怎么设置期望的传参类型?
python解析xml遇到的问题分享(命名空间有关)
分享一下最近使用python字典取值用法的收获
Python里面怎么判断某个字符串是否包含列表中的某一个元素
Python中列表的extend()方法介绍
Python中鸭子类型与多态介绍
Python中的抽象基类介绍
Python中的type与isinstance的区别
Python中类的属性、多继承、自省机制中的__mro__、__dict__ 和dir介绍
Python中__new__和__init__的区别与联系
618,清华社 IT BOOK 多得图书活动开始啦!活动时间为 2023 年 6 月 7 日至 6 月 18 日,清华 社为您精选多款高分好书,涵盖了 C++、Java、Python、前端、后端、数据库、算法与机器学习等多 个 IT 开发领域,适合不同层次的读者。全场 5 折,扫码领券更有优惠哦!快来京东点击链接(https://pro.m.jd.com/mall/active/3Rho97HkMaGFycLzAWfFdvZdyvRn/index.html) IT BOOK 多得(或扫描京东二维码)查看详情吧!