当前位置: 首页 > article >正文

每个python程序员都应该早点知道的 6 个 Python 函数

在编程中,默认参数的引入使得函数调用更为灵活,不仅允许开发者在特定情况下省略某些非必需参数,同时也强调了对参数与实际传递值(即论点)之间区别的理解,这对于掌握函数工作机制至关重要。

此外,根据需要选择位置参数或是关键字参数进行传递,以及利用 *args 和 **kwargs 来处理不确定数量的参数,都极大地增强了函数的通用性和代码的简洁性,使得编程实践既高效又优雅。

1) 默认参数

def hello(name, greeting="Hi"):  print(greeting, name)
hello("韩梅梅")# Hi 韩梅梅
hello("韩梅梅", greeting = "你好")# 你好 韩梅梅

在 hello("韩梅梅")中,我们没有在greeting中传递任何信息。这意味着它默认为 "hi"

在hello("韩梅梅", greeting = "你好")中,我们将 "hello "传入了 greeting。也就是说,我们覆盖了默认参数,并指定 greeting = '你好'

如果函数中有大量参数,而我们又不希望每次调用函数时都要输入每个参数,那么这种方法就非常有用。

图片

2)形参和实参

在我学习 Python 的最初一年,我以为它们的意思是一样的。

但也不尽然。有一点区别。

比方说,我们有一个简单的函数,它接收 (a, b) 并返回它们的平均值。

def add(a, b):  return a+b

形参是我们定义函数时写在括号内的变量。这里,a 和 b 就是形参。

def add(a, b):  return a+bx = add(3,4)print(x)  # 7

实参是我们在调用函数时实际传递给函数的值。在这里,当我们调用 add(a, b) 函数时,3 和 4就是参数。

图片

3)  位置参数和关键字参数

举一个简单的函数为例。

def test(a,b):  print(f'{a=} {b=}')

让我们通过传递一些位置参数来调用这个函数。

def test(a,b):  print(f'{a=} {b=}')
test(4,3) # a=4,b=3

这里,4 和 7 是位置参数。位置参数需要按顺序排列 ,将4 传递到 a,而 7 传递到 b。

接下来,让我们通过传递一些关键字参数来调用我们的函数。

def test(a,b):  print(f'{a=} {b=}')
test(b=10,a=20) # a=20,b=10

这里,b=5 和 a=8 是关键字参数。关键字参数不需要按顺序排列,但我们必须使用 key=value 格式传递它们。

图片

4)  任意位置参数 (*args)

函数中的任意位置参数(也称为 *args)允许函数接受任意数量的位置参数。

def test(*args):  print(args)test()       # ()test(1)      # (1,)test(1,10)   # (1,10)

args是约定俗成的写法,其实你也可以写成  *a 或 *aa

在这里,test 函数接收 *args , 这使得 test 可以接收任意数量的位置参数,所有这些参数都将包含在一个名为 args 的元组中。

我们也可以将其与普通参数相结合(*参数必须在后面)

def test(a,b, *args):  print([a,b],args)test()       # 错误test(1)      # 错误test(1,10)   # [1,10] ()
test(1,10,20)   # [1,10] (20)test(1,10,20,30)   # [1,10] (20,30)

再次补充说明:我们不必将其命名为 *args。只要在前面加上 "*",我们可以给它起任何名字(甚至是中文)。

图片

5)任意关键字参数(**kwargs)

任意关键字参数(也称为 **kwargs)允许我们的函数接收任意数量的关键字参数。

def test(**kargs):  print(kargs)test()       # {}test(a = 1)      # {"a":1}test(b = 1,a = 10)   # {'b': 1, 'a': 10}

在这里,test 函数使用了 **kwargs, 它允许 test 使用任意数量的关键字参数,这些参数将被记录在名为 kwargs 的字典中。

我们还可以将其与普通参数相结合(**kwargs 也必须在后面)

def test(a,b,**kargs):  print(kargs)test()                     # 错误test(a = 1)                # 错误test(b = 1,a = 10)         # {}test(b = 1,a = 10, c=20)   # {"c":20}

图片

6) 使用 * 和 ** 将 列表或字典传递给函数

下面是一个简单的函数,它只需打印出参数。

def test(a,b):  print(f'{a=} {b=}')

我们可以不按常规方法调用这个函数,即 test(1,2):

使用 * 传递包含位置参数的列表

def test(a,b):  print(f'{a=} {b=}')nums= [10,20]test(*nums) # a = 10, b =20

在这里,nums 前面的 * 将其内容作为位置参数解包到函数调用中。这与 test(100, 200) 相同。

使用 ** 传递包含关键字参数的字典

def test(a,b):  print(f'{a=} {b=}')nums= {"a":10,"b":20}test(**nums)  # a = 10, b =20

在这里,nums前面的 ** 将其键值对作为关键字参数解包到函数调用中。这与 hi(a=10, b=20) 相同

图片

python81

python · 目录

上一篇shp文件转换为CAD文件 (第三版) 这个软件的界面颜值挺高的


http://www.kler.cn/a/298462.html

相关文章:

  • 系统思考与因果智慧
  • 【C++/控制台】2048小游戏
  • BoltzGnu Boltztrap数据绘图脚本
  • 【VUE 指令学习笔记】
  • Python创建GitHub标签的Django管理命令
  • Linux下文件重定向
  • SLAM面经(百度,华为,地平线,大疆,美团)
  • JavaWeb系列二十一: 数据交换和异步请求(JSON, Ajax)
  • 【C++ Qt day10】
  • springboot 整合 mybatis-plus
  • 《论软件设计模式及其应用》通关范文,软考高级系统架构设计师
  • 设计之道:ORM、DAO、Service与三层架构的规范探索
  • 不实名能购买到域名吗?
  • 【Linux 从基础到进阶】Puppet配置管理工具使用
  • 1-15 插入文字 opencv树莓派4B 入门系列笔记
  • springboot提升-多数据源配置
  • Shell脚本综合案例(Linux篇)
  • Redis - 主从复制
  • mysql性能优化-冷热数据分离
  • TortoiseGit安装与配置(图文详细)
  • 速通GPT-2:Language Models are Unsupervised Multitask Learners全文解读
  • LDtk to Unity 大致流程和一些注意点
  • PyQT开发总结
  • LED会议一体机开启超微小间距COB高清显示在会议系统中的新乐章
  • yum源配置与静态配置地址
  • OpenCV结构分析与形状描述符(17)判断轮廓是否为凸多边形的函数isContourConvex()的使用