Python位置参数、默认参数、可变参数、关键字参数、命名关键字参数、命名位置参数
前言
定义一个名为temp的函数,参数列表共4个参数
def temp(first,second="Hello World",*args,**kwargs)print(first)print(second)print(args)print(kwargs)
1、参数first称为位置参数
2、参数second称为默认参数
3、参数*args称为可变参数
4、参数**kwargs也称为可变参数
接下来我们展开讨论这些术语
位置参数
1、位置参数的中文名非常多……以下都是我见过的名称,它们指的都是位置参数,共计8个别称……
a、必选参数
b、必备参数
c、固定参数
d、定位参数
e、选中参数
f、普通参数
g、一般参数
h、常规参数
2、英文名:positional parameter
3、特点:函数的参数列表中定义x个位置参数,函数调用时就必须传入x个参数,参数数量必须保持一致
4、举例说明↓
定义一个temp函数,它包含3个位置参数,调用temp函数时,必须传入3个参数
def temp(first,second,third):print(first)print(second)print(third)
调用temp函数的代码
temp("hi","ni","hao")#等同于temp(first="hi",second="ni",third="hao")#等同于my_str = ("hi","ni","hao")
temp(*my_str)
5、位置参数的使用率:Python代码中最常使用的参数就是位置参数了
接下来学习一下默认参数
默认参数
1、中文别称,同样指的都是默认参数
a、可选参数
b、默认值参数
2、英文名:Default Argument Values或者optional arguments
3、个人理解:将默认参数称为具有默认值的位置参数更为准确,原因请往下继续学习
4、特点:调用函数时可省略参数
5、举例说明:定义一个temp函数,此函数定义了2个默认参数
def temp(first="hi",second="man"):print(first)print(second)
调用包含默认参数的temp函数
temp() #省略传入所有参数,函数内会使用默认参数的默认值temp("我是你哥") #为第一个默认参数传入值,另一个默认参数继续使用默认值temp("hello","world") #为两个默认参数都传入值temp(first="喜欢你") #指定一个默认参数使用传入值
调用含有默认参数的函数时,传入的参数,会按照从左到右的顺序被默认参数匹配,这就是我认为默认参数的名字称为具有默认值的位置参数的原因!!!
6、重要警告:默认值只能会执行一次(来自官方)
默认值只执行一次。这条规则在默认值为可变对象(列表、字典以及大多数类的实例)时非常重要。
比如,下面的函数会存储在后续调用中传递给它的参数:
def f(a, L=[]):L.append(a)return Lprint(f(1))
print(f(2))
print(f(3))
这将打印出[1]
[1, 2]
[1, 2, 3]如果你不想要在后续调用之间共享默认值,你可以这样写这个函数:
def f(a, L=None):if L is not None:L = []L.append(a)return L
官方建议默认参数尽量使用不可变对象!!
可变参数
1、中文别称,以下都表示可变参数
a、任意参数
b、未知参数
def temp(*args,**kwargs):print(args)print(kwargs)
2、可变参数经常使用的变量名
*参数:最常见的变量名是args,看到该变量名,一眼就知道变量args指向一个tuple对象
**参数:最常见的变量名是kwargs,看到该变量名,一眼就知道变量kwargs指向一个dict对象
3、*args在函数定义中出现时的特点
自动收集所有未匹配的位置参数到一个tuple对象中,变量名args指向了此tuple对象
4、**kwargs在函数定义出现时的特点
自动收集所有未匹配的关键字参数到一个dict对象中,变量名kwargs指向了此dict对象
---->可变参数的详细解读请看这篇--->点我
关键字参数
1、函数调用时,指定参数名称,称为关键字参数(别和默认参数混淆,这里是函数调用)
def temp(a,b,c):print(a)print(b)print(c)temp(1,3,c=99)temp(a=1,b=2,c=3)temp(1,b=2,c=100)
2、顺序要求:函数调用时,关键字参数必须在普通参数的后面
temp(100,b=200,c=300)temp(a=100,32,100) #错误语法,关键字参数不能在普通参数的前面
3、使用字典解包方式传入关键字参数
hi = {"a":100,"b":99,"c":1000}
temp(**hi)#等同于#temp(a=100,b=99,c=1000)
4、函数调用时,当剩余的参数全部为关键字参数时,可随意定义顺序
当全部为关键字参数时,调用函数时的参数顺序可随意书写,因为你指定了参数名,但是参数的数量不能少于函数定义时要求的位置参数的数量
temp(c=100,b=38,a=10)
命名关键字参数
1、英文名:Keyword-only parameter
2、特点:必须使用关键字方式传递参数
3、语法
def only_kw(a,*,b,c)print(a)print(b)print(c)only_kw(100,b=1000,c=99) #b和c必须使用参数名传递参数
命名位置参数
def only_position(a,b,/)print(a)print(b)
函数调用时,必须使用位置参数方式传递参数……,不能再使用关键字参数调用该函数
思考:函数调用时的实际参数有哪些?
函数调用时,只会包括两种实际参数(元组解包对应于普通参数、字典解包对应于关键字参数)
1、普通参数
2、关键字参数
总结
1、希望这篇文章能为所有Python爱好者带来帮助
2、同时我也会不断的巩固自己的知识,一起奋斗吧
Python位置参数、默认参数、可变参数、关键字参数、命名关键字参数、命名位置参数相关推荐
- python可变参数和关键字参数位置_python 参数笔记 -- 位置参数 关键字参数 命名参数 形式参数 默认参数 可变参数 可选参数 位置顺序...
这么多名称,python到底有几种参数: 2种:普通参数(即位置参数,靠位置先后来指定参数),关键字参数(即命名参数,靠名字来指定参数). 常说的可变参数也就是普参的集合,*args. 常说的关键字参 ...
- python可变参数和关键字参数位置_python笔记——函数的参数(位置参数、默认参数、可变参数、关键字参数、命名关键字参数、参数组合)...
定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解 ...
- python疑问5:位置参数,默认参数,可变参数,关键字参数,命名关键字参数区别...
1.位置参数 位置参数要求调用时传入函数的参数必须和定义时的位置和个数一致,即一一对应,不可缺省 def func(a,b):sum = a + breturn sum print(func(2,3) ...
- python3函数的参数:必选参数(位置参数)、默认参数、可变参数、关键字参数、命名关键字参数
了解python函数的参数,是阅读各种库和源码的必需技能,请认真学习并掌握. 1.位置参数: def fn1(a):pass def fn2(a,b):pass msg: pass是占位符,当没有具体 ...
- python函数的参数-可变参数,关键字参数
# -*- coding: utf-8 -*- #coding=utf-8 ''' @author: tomcat @license: (C) Copyright 2017-2019, Persona ...
- python默认参数 可变对象_当心Python函数可变默认参数(list,set,dict…)的陷阱
绝大多数情况下,Python是一个干净具有一致性的语言.然而,有些少数情况会让初学者感到困惑.其中有些情况是有意识的但会成为潜在的莫名其妙,而有些可以说是语言赘肉.下面我们看看使用可变默认参数(Mut ...
- Python可变参数、关键字参数及命名关键字参数
1. 可变参数 可变参数就是允许在调用参数的时候传入多个(≥0个)参数 # 可变参数,参数nums接收到的是一个tuple(这些参数在传入时被自动组组装为一个元祖) def calc(*nums):s ...
- python中一共有多少个关键字-Python 为什么会有命名关键字参数?
题主会有这样的疑问是因为对Python函数的参数还了解不多.位置参数也不一定是必传的,事实上在下面你会看到参数是否必传(也就是有无默认值)与它是位置的还是关键字的根本无关.下文黄底图片的例子能充分为你 ...
- [python]函数默认参数顺序问题
python 函数参数定义有四类: 1.必选参数:调用函数时候必须赋值的参数. a,须以正确的顺序传入函数 b,调用时的数量必须和声明时的一样 def exa(x):return x#b作为参数进入函 ...
最新文章
- 在linux环境下重启oracle数据库,解决密码过期的问题
- php 打印测试技巧
- 沉默是金 矩阵快速幂
- JSONP解决跨域及ajax同步问题
- 第一次写,python爬虫图片,操作excel。
- python中的__slots__
- C++11 std::function, std::bind, std::ref, std::cref
- java 调用 easypr_Java程序执行Linux命令调用EasyPR程序识别车牌号
- 极路由3C【C103B】刷breed再刷老毛子教程
- 吴文俊人工智能科学技术奖十周年颁奖盛典揭晓,100个项目成果摘得中国智能科学技术奖励最高殊荣
- RAID 磁盘阵列详解,RAID分类及优缺点
- mysql错误代码1813_MSSQL2000数据库附加错误1813解决方案
- coco人体姿态估计标注软件
- 计算机网络ip进制转换方法,IP地址与二进制之间的转换
- 25W三星快充协议芯片,支持支持USB PD 3.0
- 实用网站推荐(3):菜鸟教程
- Windows xp .iso下载大全——超全面超难找的收藏版(二)
- 计算机怎么配置IP地址,Windows系统如何给电脑设置IP地址
- 自动化测试框架[各自动化测试框架大比拼]
- 移植ucos-III到stm32f103c8t6
热门文章
- Python 打印五角星
- 51单片机学习:LED点阵实验(显示图像)
- java怎么在if结构中运算_java我想在if()后面分别调用jia,jian,cheng,chu四个类中的运算方法应该怎么做?...
- @SuppressLint(NewApi)
- Bi-Noising Diffusion: Towards Conditional Diffusion Models with Generative Restoration Priors
- cf服务器维护会不会掉分,《cf》枪王排位长时间不打会不会掉分? 枪王排位扣分机制介绍...
- 27_OpenCV绘制椭圆
- 从PyUSB调用set_configuration时出现“未知错误”
- cesium绘制轨迹以及轨迹回放
- 中国计算机技术职业资格网(软考 官方 官网)