Python:函数定义的参数

news2024/10/5 22:12:26

相关阅读

Python专栏icon-default.png?t=N7T8https://blog.csdn.net/weixin_45791458/category_12403403.html?spm=1001.2014.3001.5482


         函数定义就是定义一个用户自定义的函数对象,它的语法的BNF范式如下所示,有关BNF范式的规则,可以参考之前的文章。

funcdef                   ::=  [decorators] "def" funcname "(" [parameter_list] ")"
                               ["->" expression] ":" suite
decorators                ::=  decorator+
decorator                 ::=  "@" assignment_expression NEWLINE
parameter_list            ::=  defparameter ("," defparameter)* "," "/" ["," [parameter_list_no_posonly]]
                                 | parameter_list_no_posonly
parameter_list_no_posonly ::=  defparameter ("," defparameter)* ["," [parameter_list_starargs]]
                               | parameter_list_starargs
parameter_list_starargs   ::=  "*" [parameter] ("," defparameter)* ["," ["**" parameter [","]]]
                               | "**" parameter [","]
parameter                 ::=  identifier [":" expression]
defparameter              ::=  parameter ["=" expression]
funcname                  ::=  identifier

        函数定义是一个可执行语句。它的执行将当前本地命名空间中的函数名绑定到一个函数对象(该函数的可执行代码的包装器)。此函数对象包含对当前全局命名空间的引用,作为调用函数时要使用的全局命名空间。 

      其中参数列表的第一种情况是由/分隔的两部分,其中前半部分是至少一个可以带默认值的形参,被称作defparameter,但它们有位置实参限制,即只能使用位置传递参数,后半部分是无位置限制的参数列表。在另一种情况下,参数列表也可以只有无位置限制的参数列表。

        无位置限制的参数列表的第一种情况是,至少一个defparameter和后面的带星参数列表。在另一种情况下,参数列表也可以只有带星参数列表。

        带星参数列表的第一种情况是,一个"*"加可选的带单星形参,后面有若干个defparameter,在这之后,还可以有一个"**"加带双星形参。在另一种情况下,参数列表也可以只有一个"**"加带双星形参。带单星形参和带双星形参不能给予默认值,它们分别被用来接收多余的位置实参和关键词实参。 

        注意,以上说的形参都是用逗号分隔的,且参数列表的最后可以加一个逗号。此外,如果一个形参具有默认值,则后续所有在第一个遇到的"*" 或 "**" 之前的形参也必须具有默认值(第二个不受限制) --- 这个句法限制并未在语法中明确表达。(当后面不存在"*" 或 "**" 时,则所有后面的形参也必须具有默认值)。*之后的形参只能通过关键词实参传入,与/前的情况相反。

        下面列出了几种合法的函数定义。

def fun(a, b, c=1, d=0):
    pass # c和d有默认值

def fun(a, b, /, c=1, d=0):
    pass # a和b只能通过位置实参传入,c和d有默认值

def fun(a, b, c, d):
    pass

def fun(a, b, /, c, d):
    pass # a和b只能通过位置实参传入

def fun(a, b, *c, **d):
    pass # c和d用来接收多余的位置实参和关键词实参

def fun(a, b, /, *c, **d):
    pass # a和b只能通过位置实参传入,c和d用来接收多余的位置实参和关键词实参

def fun(a, b, *c, d, **e):
    pass # 带*参数后可以有若干个形参,d只能通过关键词传入,c和d用来接收多余的位置实参和关键词        
         # 实参

def fun(a=1, b=0, /, *c, **d):
    pass # a和b只能通过位置实参传入,且有默认值,c和d用来接收多余的位置实参和关键词实参

def fun(a, b=1, *c, d, **e): 
    pass # d只能通过关键词传入,且不必须有默认值

def fun(a, b, **d):
    pass # d用来接收多余的关键词实参

def fun(a, b, *c, d=1, **e):
    pass # 带*参数后可以有若干个形参,d只能通过关键词传入且有默认值,c和d用来接收多余的位                
         # 置实参和关键词实参        
         

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1011652.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

asp.net+sqlserver+c#教师工作量计算系统

本课题主要是解决工作量管理管理中的日常中涉及到的问题,目标是使工作量在管理上做到数据的信息化、快速化。 系统在实现上应至少具有如下功能: (1)教师信息管理 该模块包括教师信息的添加、修改。 (2)个人信息 该模块是对用户登录系统后对自己信息的修改…

C-结构体

目录 结构体 定义结构体 第一种方式 定义的同时定义变量名 第三种方式 赋值和初始化 如何取出结构体成员 结构体变量,结构体指针作为函数参数进行传递 结构体运算 结构体 形成了一个新的数据类型 定义结构体 第一种方式 定义一个新的数据类型&#xf…

Unity - Shader Compiled Log

文章目录 吐槽开启 Log Shader Compilation实践资源准备Build ABTesting ScriptShader Compiled Log Project 吐槽 先说一下,最近几天前,纷纷看到 unity install fee 的天才收费方案 真的忍不住吐槽,我只想说: “no zuo no die”…

旋转框/微调按钮的基类--QAbstractSpinBox 类

1、 QAbstractSpinBox 类是 QWidget 类的直接子类,虽然该类不是抽象类,但该类并未提供实 际的功能,仅为旋转框提供了一些外观的形式以及需要子类实现了成员, 也就是说点击微调按钮的上/下按钮,不会使其中的数值有变化。…

Visual Studio批量删除换行

1. 使用ctrlh可以打开替换窗体 2.alte选择窗体中的正则表达式 使用正则表达式: ^\s*$ ^代表行首 $代表行尾 \s代表任意不可见字符,例如空格、Tab等 *代表匹配\s任意次 结果:

002 Linux 权限

前言 本文将会向您介绍关于linux权限方面的内容,包括文件类型,如何切换用户、基本权限、粘滞位等等 Linux具体的用户 超级用户:可以再linux系统下做任何事情,不受限制 普通用户:在linux下做有限的事情。 超级用户的…

安卓预制权限添加规则

android:protectionLevel 可以在 android/frameworks/base/core/res/AndroidManifest.xml查询 signature|preinstalled 加在 这个文件里 privapp-permissions-xx.xml dangerous 加在 default-permissions/default-mega-permissions.xml normal 不需要加 不存在两个文件都加…

【LeetCode-中等题】18. 四数之和

文章目录 题目方法一:双指针(定2动2) 题目 方法一:双指针(定2动2) 这题可以参考【LeetCode-中等题】15. 三数之和 区别在于,三数之和只需要用一个for循环定住一个数,然后设置两个前…

类和对象(3)

文章目录 1.回顾上节2. 拷贝构造3. 运算符重载(非常重要)4. 赋值运算符重载 1.回顾上节 默认成员函数:我们不写,编译器自动生成。我们不写,编译器不会自动生成 默认生成构造和析构: 对于内置类型不做处理对…

mysql远程连接失败

先上结论,只提出最容易忽略的地方 服务器是阿里云、腾讯云等平台,平台本身自带的防火墙没有开启iptables规则中禁用了3306,即使你根本没有启用iptables服务 第二条是最离谱的 从这里可以看到,我服务器并未启用 iptables 服务 但…

应用在电子体温计中的国产温度传感芯片

电子体温计由温度传感芯片,液晶显示器,纽扣电池,专用集成电路及其他电子元器件组成。能快速准确地测量人体体温,与传统的水银玻璃体温计相比,具有读数方便,测量时间短,测量精度高,能…

如何分析Apple搜索广告效果

Apple搜索广告提供了一系列指标,报告和功能,可为广告效果、用户行为和关键词有效性提供有价值的见解。通过利用此工具,广告商可以更深入地了解他们的广告活动,优化他们的策略,并取得更好的结果。 1、在研究数据之前&a…

深入解析NLP情感分析技术:从篇章到属性

目录 1. 情感分析概述1.1 什么是情感分析?- 情感分析的定义- 情感分析的应用领域 1.2 为什么情感分析如此重要?- 企业和研究的应用- 社交媒体和公共意见的影响 2. 篇章级情感分析2.1 技术概览- 文本分类的基本概念- 机器学习与深度学习方法- 词嵌入的力量…

webStorm内存溢出问题

手动启动vue项目正常运行,修改部分内容保存后会自动重新run一下, 这个时候就报错内存溢出,然后很悲伤的需要再手动重启一下。 每个人的情况不同,下面几种方法可以都试一试。 1、修改help里的内存配置 (图片只参考修改…

puttygen工具ppk文件版本配置

有时一些程序要用到ppk密钥文件,如果用puttygen去生成的话,ppk文件版本是可以配置的,有版本2、版本3,如果出现密钥文件无效,可以试一下选择不用的文件版本。 配置位置:打开puttygen-选择菜单栏Key-选择Para…

差分+差分矩阵(更适合新手宝宝体质)

快速掌握差分以及差分矩阵 文章目录 快速掌握差分以及差分矩阵前言差分差分的定义【官方解释】差分自定义【跟前缀和放在一起理解】差分数组的应用 题目描述差分矩阵【与前缀和矩阵进行比较】差分矩阵定义【官方解释】自定义修改操作【跟前缀和对比】 题目描述代码 前言 之前我…

微信小程序——小程序的API介绍

小程序的宿主环境-API 1.小程序API概述 小程序中的API是由宿主环境提供的,通过这些丰富的小程序API,开发者可以方便的调用微信提供的能力,例如:获取用户信息,本地存储,支付功能等。 2.小程序API的3大分类…

wav文件碎片多删除后恢复案例

wav是微软针对音频提供的一种文件,其本质上和qt类文件(如mp4 mov)是一样的,都是“容器”类文件。但凡是容器类的文件其关注的点就是制定规则,一切按规则来(wav中就是速率、时长、编码类型等)。这…

Linux下利用文件IO函数完成多进程复制图片,父进程复制前一半,子进程复制后一半

Linux下利用文件IO函数完成多进程复制图片,父进程复制前一半,子进程复制后一半 一 、概述 在Linux环境下,利用多进程完成图片的复制操作本demo用到了两个进程,一个是主函数所在的父进程,一个在主函数里面创建的子进程…

安装系统作为启动盘的U盘恢复原样

1、插U盘 2、winr——cmd,输入diskpart 3、此电脑——管理——磁盘管理——查看磁盘号:磁盘 1 4、输入:select disk 1——clean 5、磁盘管理——右击新建简单卷——下一步即可