函数定义中的参数也就是形式参数,规定了在调用函数时如何传递实际参数以及这些参数有无默认值。

实参传递方式

def f(a):
print(a)

实参传递方式有两种,位置和关键字。对于上面定义的函数 f,形如 f(1) 这种调用是通过位置的方式传参,形如 f(a=1) 这种调用是通过关键字的方式传参,两种传参方式都可以是因为形参 a 没有对传参方式做限制。

Python 也提供了一些方式用来限制参数的传递方式。

仅限位置参数

def f(a, b, /, d):
pass

对于这种定义,斜杠 / 之前的参数 a 和 b 只能通过位置参数的方式传参,叫做仅限位置参数,斜杠 / 之后的参数 d 既可以通过位置也可以通过关键字的方式传参,所以 f(1, 2, d=3)f(1, 2, 3) 都可以调用函数。

仅限关键字参数

def f(a, b, *, d):
pass

定义中星号 * 后面的参数 d 只能通过关键字的方式传参,叫做仅限关键字参数,星号 * 前面的参数 a 和 b 既可以通过位置也可以通过关键字的方式传参,所以 f(1, 2, d=3)f(1, b=2, d=3) 都可以调用函数。

当然星号 * 和斜杠 / 也可以同时定义,如下

def f(a, /, b, *, c):
pass

a 只能通过位置传参,c 只能通过关键字传参,b 都可以,所以只有 f(1, 2, c=3)f(1, b=2, c=3) 这两种调用方式。

参数的默认值

函数定义中无论规定形参的传递方式是哪种,都可以通过 k=v 的形式设置参数的默认值,如果有参数设置了默认值,那么在调用函数的时候可以省略对该参数的传值。所以上面说的实参传递方式,更准确的描述是:如果仅限关键字参数没有设置默认值,那么只能通过关键字的形式传参,否则可以省略该参数的传递,如果仅限位置参数没有设置默认值,那么只能通过位置的形式传参,否则可以省略该参数的传递。

下面看一个例子作总结

def f(a, b=10, /, c=1, *, d=20, e):
pass

b 是仅限位置参数有默认值,e 是仅限关键字参数没有默认值。函数定义中出现的 k=v 这种形式表示参数 k 有默认值 v,函数调用中出现的 k=v 的形式表示通过关键字的方式给参数 k 传递参数值 v,这是两个不同的概念不要混淆了。

一文看懂 Python 中的函数参数的更多相关文章

  1. 一文搞懂Python中的所有数组数据类型

    关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...

  2. python中的函数参数的传递

    转载自: http://winterttr.me/2015/10/24/python-passing-arguments-as-value-or-reference/ 我想,这个标题或许是很多初学者的 ...

  3. 一文看懂python主要应用领域或应用场景

    Python简介 Python(英国发音:/ˈpaɪθən/美国发音:/ˈpaɪθɑːn/),是一种面向对象的解释型计算机程序设计语言,由荷兰人GuidovanRossum于1989年发明,第一个公开 ...

  4. 一文看懂Python的面向对象编程

    之前在网络上看了很多关于面向对象的编程详解,还是不够过瘾,所以决定自己动手写一篇. 面向对象:Object Oriented Programming,简称OOP,即面向对象程序设计. 类(Class) ...

  5. 一文看懂js中元素的滚动大小(scrollWidth,scrollHeight,scrollTop,scrollLeft)

    滚动大小(scroll dimension) 滚动大小指的是包含滚动内容元素的大小. 以下是与元素滚动内容大小相关的属性: 1. scrollWidth:在没有滚动条的情况下,元素内容的总宽度. 2. ...

  6. 一文看懂js中元素偏移量(offsetLeft,offsetTop,offsetWidth,offsetHeight)

    偏移量(offset dimension) 偏移量:包括元素在屏幕上占用的所有可见空间,元素的可见大小有其高度,宽度决定,包括所有内边距,滚动条和边框大小(注意,不包括外边距). 以下4个属性可以获取 ...

  7. 一文看懂js中的clientX,clientY,pageX,pageY,screenX,screenY

    一. 客户区坐标位置(clientX,clientY) 鼠标事件都是在浏览器视口中的特定位置发生的.这个位置信息保存在事件对象的clientX和clientY属性中,所有浏览器都支持这两个属性. 我们 ...

  8. 一文看懂js中元素的客户区大小(clientWidth,clientHeight)

    元素的客户区 元素的客户区大小,指的是元素内容及其内边距所占据的空间大小. 相关属性如下: 1. clientWidth:元素内容区宽度+元素左右内边距 2. clientHeight:元素内容区高度 ...

  9. 论python中的函数参数的传递问题。

    python是完全面向对象的语言,在参数传递的过程不能使用值传递,引用传递的概念,而应该使用immutable和mutable.在java中,除了object,其实还有8种基本数据类型,才有了参数传递 ...

  10. 【TensorFlow】一文弄懂CNN中的padding参数

    在深度学习的图像识别领域中,我们经常使用卷积神经网络CNN来对图像进行特征提取,当我们使用TensorFlow搭建自己的CNN时,一般会使用TensorFlow中的卷积函数和池化函数来对图像进行卷积和 ...

随机推荐

  1. 2022年rhce最新认证—(满分通过)

    RHCE认证 重要配置信息 在考试期间,除了您就坐位置的台式机之外,还将使用多个虚拟系统.您不具有台式机系统的 root 访问权,但具有对虚拟系统的完整 root 访问权. 系统信息 在本考试期间,您 ...

  2. 【iOS逆向】某车之家sign签名分析

    阅读此文档的过程中遇到任何问题,请关注公众号[移动端Android和iOS开发技术分享]或加QQ群[309580013] 1.目标 分析某车之家sign签名算法的实现 2.操作环境 frida mac ...

  3. c# 使用委托子窗体改变父窗体控件

    首先创建两个窗体,在窗体1和窗体2放上对应的控件 在窗体1的代码如下 using System; using System.Collections.Generic; using System.Comp ...

  4. 关于盒子动态高度与transition的问题

    今天遇到个小问题 大概要实现类似手风琴的效果 本来设计是定死的高度,直接 height:0; - > height:xxxpx;但之后要改成动态变化的高度,手风琴展开后是个列表,并且列表每行高度 ...

  5. 解决SpringMVC重定向参数无法携带问题

    解决SpringMVC重定向参数无法携带问题 场景 重定向时请求参数会丢失,我们往往需要重新携带请求参数,我们可以进⾏⼿动参数拼接如下: return "redirect:handle01? ...

  6. MongoDB 索引类型介绍

    转载请注明出处: 目录 1.单字段索引 2.复合索引 3.多key索引 4.其他类型索引 5.索引额外属性 6.MongoDB 索引相关的常用sql命令 MongoDB 支持多种类型的索引,包括单字段 ...

  7. AcWing340通信道路/ USACO2008 Telephone Line S

    AcWing题目 洛谷题目 解题思路 首先可以得到一个很容易得到的贪心策略,将一条路径上最贵的(边权最大)的\(K\)条边删去,那么我们剩下的路径中最贵(边权最大)的路就是原本这条路径上帝\(K + ...

  8. [R语言] 基于R语言实现树形图的绘制

    树状图(或树形图)是一种网络结构.它由一个根节点组成,根节点产生由边或分支连接的多个节点.层次结构的最后一个节点称为叶.本文主要基于R语言实现树形图的绘制.关于python实现树形图的绘制见:基于ma ...

  9. UOJ33 [UR#2] 树上 GCD

    UOJ33 [UR#2] 树上 GCD 简要题意: 给定一棵有根树,对于每个 \(i \in [1,n)\),求出下式的值: \[Ans[i] = \sum_{u<v} \gcd({\rm{di ...

  10. RocketMQ消息短暂而又精彩的一生

    大家好,我是三友~~ 这篇文章我准备来聊一聊RocketMQ消息的一生. 不知你是否跟我一样,在使用RocketMQ的时候也有很多的疑惑: 消息是如何发送的,队列是如何选择的? 消息是如何存储的,是如 ...