文章目录

  • 函数参数的两大分类
  • 形参和实参的具体使用
    • 位置参数
    • 关键字参数
    • 默认参数
    • 可变长参数
    • *号和**号在实参中的使用
    • 组合使用

函数参数的两大分类

  • 形式参数:在函数定义阶段括号内声明的参数就叫形式参数,简称"形参",形参本质就是一个变量名,用来接收外部传来的值。
def func(a,b):pass
# 这里的a和b即形式参数,形参
  • 实际参数:在函数调用阶段括号号内传入的值,就叫实际参数,简称"实参",值可以是常量、变量、表达式或三者的组合。
func(1, 2)
# 这里的1和2就是实际参数
  • 形参和实参的关系:
    形参相当于变量名,实参相当于变量值;

    两者在函数调用阶段临时绑定,函数运行结束立马断开联系。

强调:形参的表现形式就一种,实参的表现形式有多种。

形参和实参的具体使用

位置参数

​ 从左往右依次写入的数据就是位置参数。

  • 位置形参:在定义函数的时候,从左往右依次写入的变量名就是位置形参。
  • 位置实参:在函数调用阶段,从左往右依次写入的变量值就是位置实参。
  • 位置形参和位置实参的关系:位置实参从左往右依次传递给位置实参(一一对应)。

练习:

# 写一个可以比较两个数字大小的函数,返回最大值  def my_max(a, b):print(a, b)if a > b:return aelse:return bres = my_max(1, 2)print(res)my_max(b=1, a=2)  # 关键字参数通过形参名=变量值的形式传递

关键字参数

​ 通过 形参名=变量值(key=value)的形式传值的是关键字参数。

  • 关键字形参:在函数定义阶段,参数有默认值时才使用。
  • 关键字实参:在函数调用阶段,通过k:v形式进行传值。

强调:在调用函数时,实参也可以是按位置或按关键字的混合使用,但必须保证关键字参数在位置参数后面,且不可以对一个形参重复赋值

默认参数

​ 在函数定义阶段,就已经为形参赋值,这类形参称为默认参数。

注意:

  • 默认参数必须在位置参数之后。
  • 默认参数的值在函数定义阶段被赋值一次。
  • 默认参数的值通常应设置为不可变类型。
  • 在调用阶段,如果为默认参数传递值,就使用传的值,如果没有传值,就使用默认值。

练习1:用户注册功能

def register(name, age, gender='male'):print('%s:%s:%s' % (name, age, gender))register('mary',18,'female')  # 为默认参数传值了,就使用所传的值

练习2:

x = 100
def index(a, b, c=x):print(a, b, c)x = 200
index(1, 2)# 结果c的值为100,因为默认参数在函数定义的时候已经确定了

可变长参数

​ 在函数调用阶段,实参的个数不固定,如果要传很多,就不能在定义阶段挨个对应,需要用到可变长参数。

  • 可变长的位置参数:如果在最后一个形参的前面加上*号,就表示这个参数为可变长的位置参数,在调用函数时,溢出的位置实参,都会被该参数接收,以元组的形式保存下来赋值给该形参。

    def index(x, y, *a):print(x, y)print(a)index(1, 2, 3, 4, 5, 6, 7, 8)
    # x = 1  y = 2  a = (3,4,5,6,7,8)
    
  • 可变长的关键字参数:如果在最后一个形参的前面加上**号,就表示这个参数为可变长的关键字参数,在调用函数时,溢出的关键字实参,都会被该参数接收,以字典的形式保存下来赋值给该形参。

    def index(a, **x):print(x)index(a=1, b=2, c=3)  # x = {'b': 2, 'c': 3}
    
  • 可变长的位置参数和关键字参数同时使用:

    '''- 默认参数只要不放在**后面都可以- *号后面和**号后面的变量名可以任意命名,但是,在python中推荐使用*args   => arguments 位置参数**kwargs  => keyword arguments  关键字参数def func(a, b, c, *args, **kwargs):pass
    '''
    

*号和**号在实参中的使用

  • *号在实参中的使用
def index(a, b, c):print(a, b, c)l = [11, 22, 33]
index(*l)  # 等同于index(11, 22, 33)
  • **号在实参中的使用
def func(username, password):print(username, password)d = {'username': 'mark', 'password': 222}
func(**d)  # 等同于func(username='mark',password=222)
func(username='mark', password=222)

组合使用

​ 以上所有参数可以任意组合使用,但定义顺序必须是:位置参数、默认参数、*args、**kwargs。

函数基础——形参和实参相关推荐

  1. 【C语言 基础】函数的形参与实参

    形参:形式参数 实参:实际参数 两者最大的区别:形参就是纯纯的工具人,被使用之后它的内存就会被释放,而实参是始终占在内存一片地方的数据,所以只要有它的地址,你就能找到它的值. 在网上查一查,到处都有说 ...

  2. python形参和实参同名_一道题带你搞定Python函数中形参和实参问题

    昨天在Python学习群里有位路人甲问了个Python函数中关于形参和实参一个很基础的问题,虽然很基础,但是对于很多小白来说不一定简单,反而会被搞得稀里糊涂.人生苦短,我用Python. 为了解答大家 ...

  3. python函数形参和实参地址_Python函数的形参和实参详解

    在这篇文章光环大数据将给大家介绍Python函数的两种类型参数,一种是函数定义里的形参,一种是调用函数时传入的实参. 经常在使用一些内置函数的时候,我们需要传入参数,比如:调用math.sin时,需要 ...

  4. 函数的参数(形参与实参)的理解

    函数的参数 实际参数(实参) 真实传给函数的参数,叫实参.实参可以是:常量.变量.表达式.函数等.无论实参是何种类型的量,在进行函数调用时,它们必须有确定的值,以便把这些值传送给形参. 形式参数(形参 ...

  5. js函数形参、实参、arguments[]的一探究竟

    //先声明下:菜鸟原创,不当之处望大虾们指正, 函数的形参.实参.arguments[]都在哪个位置?参数通过值传递--传递流程是怎样的?js函数调用时接受的实参数目与函数定义时不一样行吗?--关于参 ...

  6. 【C语言】函数基础知识点总结

    目录 1.函数定义 2.函数类型 2.1自定义函数 2.2库函数 3.实参与形参 4.函数的调用 5.函数的声明 6.函数的嵌套调用和链式访问 6.1嵌套调用 6.2链式访问 7.函数递归 博主水平有 ...

  7. 四、python的函数基础--附代码案例

    四.python的函数基础 4.1 函数概述 4.2 函数的定义 4.3 函数的要素 4.3.1 函数名 4.3.2 库 4.3.3 形式参数 4.3.4 返回值 4.4 函数的调用 4.5 函数执行 ...

  8. c语言当形参是const时,const形参和实参

    当形参是const时,必须要注意关于顶层const的讨论.如前所述,顶层const的作用于对象本身: const int ci=42;  //不能改变ci,const是顶层的 int i=ci:   ...

  9. java形参列表怎么理解_关于Java中形参与实参的理解

    今天阅读了一个写的非常棒的博文,通过此博文再次复习了Java中参数传递的知识(即值传递与引用传递的区别).参考网站http://www.cnblogs.com/binyue/p/3862276.htm ...

最新文章

  1. AngularJS $eval $parse
  2. LeetCode 968. 监控二叉树
  3. Linux 系统修复
  4. struct和class内存大小的计算
  5. Boost:返回报告错误report errors
  6. web实现远程桌面:Apache Guacamole
  7. processing图片粒子化_个人见到的processing(优质且全的教程,一定看原文)
  8. 信号与系统 chapter4 单位脉冲与单位阶跃序列
  9. android4.0.3去掉底部状态栏statusbar,全屏显示示例代码
  10. 快学Scala习题解答—第三章 数组相关操作
  11. 通过一个对数据的存储和分析的简单实例初识Hadoop
  12. eclipse 的Java Resource文件夹显示有错,可是文件夹下面的文件没有提示错误,这是怎么回事?怎么解决?
  13. c++ 怎么输出保留2位小数的浮点数
  14. Map与JSON数据之间的互相转化
  15. 一款优秀的中文识别库——ocr
  16. 坚果云服务器地址,#网盘每日小技巧分享# 坚果云API是什么?
  17. 新生研讨课有感——陈睿周
  18. Ubuntu 16.04 安装Tensorflow Object Detection API (一)
  19. TabControl控件在左侧绘制tabPage页面
  20. 手机老是显示微信连接不到服务器,手机微信无法连接到服务器提示1237怎么办...

热门文章

  1. Catia 弹簧设计
  2. c语言结构体定义坐标,C语言结构体定义的方法汇总
  3. java shell spool_批量快速的导入导出Oracle的数据(spool缓冲池、java实现)
  4. 无法挣脱的“需求无知” 无法企及的诚实
  5. 省选模拟赛(正睿的最后一场)
  6. 通过mysqld启动mysql_mysqld_safe启动mysql数据库的参数
  7. pycharm上传更新内容至linux服务器
  8. 开关电源学习笔记5 --- DC-DC变换器的储能电感设计之三种变换器的电感体积估算
  9. butterknife----黄油刀
  10. oracle函数 NEW_TIME(dt1,c1,c2)