Python函数的参数列表

简介: Python函数的参数列表

一、函数参数的分类

函数的参数分为两类:形参 及 实参

形参:形参是在创建过程中声明的参数,如果不给形参传入特定的实参,形参就没有实际的意义
实参:实参是在函数的调用过程中传入的参数,这个参数具有实际意义,具有具体的数据类型

举例:

def fn(n1,n2):  # 在此过程中定义的参数就是形参
    print(n1 + n2)
fn(10,20)  # 在此过程中传入的变量就是实参

二、形参是对实参的值拷贝

形参与实参可以重名,但是其表示的是两个变量

举例:

def fn(num1):
    print(num1)
    num1 = 20
    print(num1)
num1 = 10
fn(num1)
print(num1)

对于不可变类型:

参考上例,当 num1 的值在函数的内部进行重新赋值时,在外部进行重新打印,打印的是原来的值,原因是在参数内部进行了形参的重指向,实参的值没有发生改变。

对于可变类型:

参考上例,num1 变为可变类型,当 num1 的值在内部使用append()方法进行添加元素时,在函数外打印 num1 ,打印的是添加后的列表,因为没有进行重指向,实参及形参指向的是同一个id

三、实参的分类

实参可以分为 位置实参 及 关键字实参

位置实参 ---> 根据位置进行参数的传递

举例:

#Python学习交流:711312441
def fn(a,b,c):
    print(a)
    print(b)
    print(c)
fn(1,2,3)

像上方这样传入参数时,实参的传入是按照参数的位置进行传递的,如果改变实参的位置,那么传入参数时就会改变传给形参的值,这样传入参数时的参数就叫做位置实参

 fn(a=1,b=2,c=3)

像上方函数的调用这样,如果在调用函数时指名道姓的传入参数,那么不论实参的位置如何变化,形参的得到的值都不会发生变化,这种形式的实参就叫做关键字实参。

注:
1、位置实参是一定按照位置顺序进行参数的传递的,如果传递实参时,实参的顺序发生变化,那么形参的到的值也会发生变化。
2、关键字实参采用的是指明道姓的赋值,所以实参进行位置变化时不会改变形参接收的值
3、在既有关键字实参,又有位置实参时,肯定是先进行位置参数的传值,再进行关键字实参的传值(位置参数在前,关键字参数在后)

四、形参的分类

形参的分类可以分为六种:

  • 带有默认值的位置形参
  • 不带默认值的位置形参
  • 带有默认值的关键字形参
  • 不带默认值的关键字形参
  • 可变长度的位置形参
  • 可变长度的关键字形参

实例:

def fn(a,b,c=10,*,d,e=20,**kwargs)

1、带及不带默认值的位置形参

实例中,在 * 号之前统称为位置形参,位置形参可以由位置实参及关键字实参进行传值。

不带默认值的位置形参:
不带有默认值的位置形参必须要实参进行传值,如果实参不传值就会报错

带有默认值的位置形参:
带有默认值的关键字位置实参可以用实参进行传值,也可以不使用实参进行传值,不使用实参进行传值时,使用默认值作为其值

2、带有及不带默认值的关键字形参

实例中 * 以后的参数都是关键字形参,在使用关键字形参时,必须使用关键字实参进行传值,不使用会报错

不带默认值的关键字形参:
不带有默认值的关键字形参必须使用关键字实参进行传值,如果不传参数就会报错

带有默认值的关键字形参:
带有默认值的关键字形参可以用关键字实参进行传值,也可以不传值,不传值时使用默认值作为其值。

3、可变长度的形参:

可变长度位置形参:

  • 其位置在位置形参及关键字形参之间,当传入的位置实参数量多于位置形参时,多出部分的位置形参会全部存储在可变长度的位置形参中
  • 可变长度的关键字形参就是例子中的 ,只是给这个形参添加了一个名字,这个名字可以自定义,但是约定俗成的命名为 args

可变长度的关键字形参:

  • 可变长度的关键字形参位于参数列表的末尾,当传入的关键字实参多与关键字形参时,多出的部分就会被储存在可变长度的关键字形参中,以元组进行存储
  • 可变长度的关键字形参使用 进行表示,此时也需要给关键字形参添加一个名字,这个名字可以自定义,但是约定俗成的称为 kwargs,以字典进行存储

形参声明时,其声明顺序是有规定的,顺序为:

无默认值位置形参 --> 有关键字位置形参 --> 可变长度的位置形参 --> 无默认值的关键字形参 --> 有默认值的关键字形参 --> 可变长度的关键字形参

常用的参数列表类型:

-- (*args,**kwargs)

-- (a,*args)
-- (a,b=10,**kwargs)
        
-- (a,*,b,**kwargs)
-- (a,*args,b,**kwargs)

在使用形参时要按照位置进行传参,即使是有关键字也要尽量按照位置进行传参,这样更加清晰

五、打散机制

在使用可变长形参时,当传入的值多余需要的值时会把多余的参数放进可变长位置形参 及 可变长关键字形参,但是如果直接传入一个元组及字典中如何直接将其变为元组及字典呢?

此时需要使用 *** 的打散机制
*单列容器 会打散单列容器

**双列容器 会打散双列容器

print(*(a,b,c))  --->  (a b c)
print(**{a:1,b:2})  ---> {a:1,b:2}

附:

在进行字母的对比时,是根据字母的ASCII码表对应的数值进行比较的,会遍历比较

相关文章
|
9天前
|
人工智能 Python
[oeasy]python089_列表_删除列表项_remove_列表长度_len
本文介绍了Python列表(list)的操作方法,重点讲解了`remove`方法的使用。通过实例演示如何删除列表中的元素,探讨了`ValueError`异常产生的原因,并分析了时间复杂度O(n)的概念。同时提及了`clear`方法清空列表的功能及`len`函数获取列表长度的用法。最后以购物清单为例,展示列表的实际应用场景,并预告快速生成列表的方法将在后续内容中介绍。
111 62
|
5天前
|
人工智能 索引 Python
[oeasy]python091_列表_索引_index_中括号_索引函数
本文介绍了Python中列表与字符串的索引及index函数用法。通过range生成列表,使用索引[]访问和修改列表元素,index函数查找元素位置。字符串支持索引访问但不可直接修改。还探讨了16进制数在Python中的表示方法,以及日期、月份等特殊字符的Unicode范围。最后总结了列表与字符串操作的区别,并预告后续内容,提供蓝桥云课、GitHub和Gitee链接供进一步学习。
41 20
|
7天前
|
Python 容器
[oeasy]python090_列表_构造_范围_range_start_end_step_步长
本文介绍了Python中列表的生成方法,重点讲解了`range()`函数的使用。通过`range(start, stop, step)`可生成一系列整数,支持正负步长,但不支持小数参数。文章从基础的列表追加、直接赋值到复杂的应用场景(如生成等宽字体的月份列表),结合实例演示了`range()`的灵活性与实用性。最后总结了`range()`的关键特性:前闭后开、支持负数步长,并提供了进一步学习的资源链接。
41 14
|
18天前
|
Python
[oeasy]python086方法_method_函数_function_区别
本文详细解析了Python中方法(method)与函数(function)的区别。通过回顾列表操作如`append`,以及随机模块的使用,介绍了方法作为类的成员需要通过实例调用的特点。对比内建函数如`print`和`input`,它们无需对象即可直接调用。总结指出方法需基于对象调用且包含`self`参数,而函数独立存在无需`self`。最后提供了学习资源链接,方便进一步探索。
53 17
|
1天前
|
索引 Python
[oeasy]python092_eval_衡量_转化为列表
本文探讨了 Python 中 `eval` 函数的用法及其与字符串和列表之间的转换关系。通过实例分析,展示了如何使用 `eval` 将字符串转化为对应的数据类型,例如将表示列表的字符串转回列表。同时,文章深入讲解了 `eval` 的工作机制,包括根据本地和全局变量对字符串进行计算的能力。此外,还提醒了命名变量时需避免覆盖内置类名(如 `str`、`int`、`list`)的重要性,以免影响程序正常运行。最后,简要提及字符串和列表索引中负数的应用,并为读者提供了进一步学习的资源链接。
13 2
|
11天前
|
人工智能 Python
[oeasy]python088_列表_清空列表_clear
本文介绍了Python中列表的清空方法`clear`。通过实例讲解了`clear`与将列表赋值为空列表的区别,前者会清空原列表内容,而后者创建新空列表,不影响原列表。文中以收银程序为例,展示了`clear`的实际应用场景,并通过地址观察解释了两者的机制差异。最后总结了相关术语如`list`、`append`、`clear`等,帮助理解列表操作及方法调用的概念。
41 6
|
17天前
|
数据采集 搜索推荐 API
Python 原生爬虫教程:京东商品列表页面数据API
京东商品列表API是电商大数据分析的重要工具,支持开发者、商家和研究人员获取京东平台商品数据。通过关键词搜索、分类筛选、价格区间等条件,可返回多维度商品信息(如名称、价格、销量等),适用于市场调研与推荐系统开发。本文介绍其功能并提供Python请求示例。接口采用HTTP GET/POST方式,支持分页、排序等功能,满足多样化数据需求。
|
24天前
|
人工智能 Python
[oeasy]python083_类_对象_成员方法_method_函数_function_isinstance
本文介绍了Python中类、对象、成员方法及函数的概念。通过超市商品分类的例子,形象地解释了“类型”的概念,如整型(int)和字符串(str)是两种不同的数据类型。整型对象支持数字求和,字符串对象支持拼接。使用`isinstance`函数可以判断对象是否属于特定类型,例如判断变量是否为整型。此外,还探讨了面向对象编程(OOP)与面向过程编程的区别,并简要介绍了`type`和`help`函数的用法。最后总结指出,不同类型的对象有不同的运算和方法,如字符串有`find`和`index`方法,而整型没有。更多内容可参考文末提供的蓝桥、GitHub和Gitee链接。
43 11
|
5天前
|
开发框架 Java .NET
Python中main函数:代码结构的基石
在Python中,`main`函数是程序结构化和模块化的重要组成部分。它实现了脚本执行与模块导入的分离,避免全局作用域污染并提升代码复用性。其核心作用包括:标准化程序入口、保障模块复用及支持测试驱动开发(TDD)。根据项目复杂度,`main`函数有基础版、函数封装版、参数解析版和类封装版四种典型写法。 与其他语言相比,Python的`main`机制更灵活,支持同一文件作为脚本运行或模块导入。进阶技巧涵盖多文件项目管理、命令行参数处理、环境变量配置及日志集成等。此外,还需注意常见错误如全局变量污染和循环导入,并通过延迟加载、多进程支持和类型提示优化性能。
32 0
|
11月前
|
算法 Python 容器
Python编程 - 不调用相关choose库函数,“众数“挑选器、随机挑选器 的源码编程实现
Python编程 - 不调用相关choose库函数,“众数“挑选器、随机挑选器 的源码编程实现
150 0

热门文章

最新文章

下一篇
oss创建bucket