我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python函数参数分类使用与新特性详细分析讲解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python函数参数分类使用与新特性详细分析讲解

函数参数看似很平常,在深究后发现其中还是有很多东西,参数分类、用法和新特性等,都可以体会到Python是真的灵活好用。

参数分类

一,定义与使用角度

形参:函数定义时定义的参数。

实参:函数调用时传入的参数。

参数传递的过程,就是把实参的引用传递给形参,使用实参的值来执行函数体的过程,形参的定义决定了实参传入方式。

def print_num(num):
    print(num)
a = 10
print_num(a)  # 实参引用传递給 形参 num

二,传参方式角度

Python 传参方式有两种:

按位置顺序传参:调用时根据参数位置顺序传递,包括位置参数、默认参数(缺省参数)和可变参数

按关键字传参:调用时以“关键字=值”形式传递参数,包括关键字参数

1,位置参数

按照声明时的位置顺序关系依次传递参数,形参与实参的数量、顺序、数据类型必须对应,否则报错。

def locationParams(m,n):
    print('第一个参数',m)
    print('第一个参数',n)
locationParams(1,2)

2,默认参数

定义函数时,为某个参数赋予一个默认值,具有默认值的参数称为默认参数

def defaultParams(m,n='xiaoming'):
    print('第一个参数',m)
    print('第一个参数',n)
defaultParams('Hello','xiaoli')
defaultParams('Hello') #未传入默认参数
"""
第一个参数 Hello
第二个参数 xiaoli
第一个参数 Hello
第二个参数 xiaoming
"""

Tips:

(1)默认参数不能在非默认参数之前,Python 按照顺序传参,无法识别默认参数,声明函数时,也会报错:

SyntaxError: non-default argument follows default argument

def defaultParams(m='xiaoming',n):
    print('第一个参数',m)
    print('第二个参数',n)
defaultParams('Hello')  #Python 按照顺序传参,那么没有实参会传递给形参n

(2)默认参数不能时可变参数,默认参数的值时固定的,如果是可变参数,则参数值会被修改。

def f(a,l=[]):
    l.append(a)
    return l
print(f(1))
print(f(2))
print(f(3))   
## 默认参数l为list,其对应的值也被修改了
"""
[1]
[1, 2]
[1, 2, 3]
"""

3,可变参数

可变参数是指参数个数是可以变化的,可以是0、1或多个,可变参数定义时符号“ * ” 表示。在函数调用时,可变参数接收的实参会被封装成一个元组。

def variableParams(*params):
    print("参数: ",params)
    sum = 0
    for i in params:
        sum+=i
    print(sum)
variableParams()  # 不传入参数
variableParams(1,2,3,4)  # 传入多个参数
num_list = [1,2,3,4]
variableParams(*num_list) # num_list 加上“*” 将num_list拆解,否则num_list被当成一个参数传入
variableParams(num_list[0],num_list[1]) 

"""
参数:  ()   # 元组
0
参数:  (1, 2, 3, 4)  # 元组
10
参数:  (1, 2, 3, 4)   # 元组
10
参数:  (1, 2)
3
"""

4,关键字参数

关键字参数与可变参数类似,参数的个数都是可变的,所以也被称作可变关键字参数。

关键字参数与可变参数区别

(1)关键字参数会被封装成一个字典,可变参数接收的实参会被封装成一个元组。

(2)函数调用时,关键字参数以以“关键字=值”形式传递参数

def keyWordParams(**params):
    print(params)
keyWordParams()  ## 不传参数
keyWordParams(name='xiaoming',age='11',gender='male')  ## 关键字传参
person_info = {'name': 'xiapli', 'age': '20', 'gender': 'male'}
keyWordParams(**person_info)  # **person_info 将字典拆分
"""
{}
{'name': 'xiaoming', 'age': '11', 'gender': 'male'}
{'name': 'xiapli', 'age': '20', 'gender': 'male'}
"""

四类参数可以混合使用,但在声明时,需要注意顺序:位置参数、默认参数、可变参数和关键字参数。否则Python将无法正常解析。

三,参数新特性

1,仅位置参数

Python3.8 新特性中,新增了仅位置参数。**新的函数参数语法 使用 “ / ” 指明有些函数参数必须被指定为位置参数, 不能被用作关键字参数。 仅位置参数 在“ / ”之前,“ / ”之后可以是任意类型参数 **

def pos_only(a,/):
    print(a)
pos_only(1)  # 1
pos_only(a=1)  
# TypeError: pos_only() got some positional-only arguments passed as keyword arguments: 'a'

2,仅关键字参数(命名关键字参数)

与仅位置参数,对应的是仅关键字参数,不过并非Python3.8 新特性,仅关键字参数也被称为命名关键字参数。声明函数时,在第一个关键字形参前添加“ * ”,表明必须以关键字参数形式传参。

def stu_info(name,gender,*,age,city):
    print('name is:',name,' gender is:',gender,' age:',age,' city:',city)
stu_info('Bob','M',age=7,city='TJ')
stu_info('Lucy','F',city='BJ',age=10)

关键字参数和命名关键字参数的区别在于,前者可以传递任何名字的参数,而后者只能传递 后面名字的参数。

stu_info('Lucy','F',city='BJ',addr=10)
# stu_info() got an unexpected keyword argument 'addr'

如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个“ * ”了

#args可以传递一个tuple 其后只能传递age和city参数
def stu_info(name,gender,*args,age,city):
    print('name is:',name,' gender is:',gender,' age:',age,' city:',city)
    for i in args:
        print('args:',i)
stu_info('Bob','M',age=7,city='TJ')
stu_info('Lucy','F',(2,3),city='BJ',age=10)
"""
name is: Bob  gender is: M  age: 7  city: TJ
name is: Lucy  gender is: F  age: 10  city: BJ
args: (2, 3)
"""

最后几个题目,大家可以测试下是否掌握:

def function1(a, b, c=0, *arg, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'arg=',arg, 'kw =', kw)
function1(1,2,3,4,5,A=1,B=2)
# a = 1 b = 2 c = 3 arg= (4, 5) kw = {'A': 1, 'B': 2}
def function2(a,/, b, c=0, *arg, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'arg=',arg, 'kw =', kw)
function2(1,2,3,4,5,A=1,B=2)
# a = 1 b = 2 c = 3 arg= (4, 5) kw = {'A': 1, 'B': 2}
def function3(a, b, c=0, *, d, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)  
function3(1,2,3,d=4,A=1,B=2)
# a = 1 b = 2 c = 3 d = 4 kw = {'A': 1, 'B': 2}
def function4(a, b, c=0, *arg, d, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'arg=',arg, 'd =', d, 'kw =', kw)
function4(1,2,3,4,5,d=6,A=1,B=2)
# a = 1 b = 2 c = 3 arg= (4, 5) d = 6 kw = {'A': 1, 'B': 2}

到此这篇关于Python函数参数分类使用与新特性详细分析讲解的文章就介绍到这了,更多相关Python函数参数分类内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python函数参数分类使用与新特性详细分析讲解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python函数参数分类使用与新特性详细分析讲解

在声明函数的时候,一般会根据函数所要实现的功能来决定函数是否需要参数。在多数情况下,我们声明的函数都会使用到参数,这篇文章主要介绍了Python函数参数
2023-01-28

Kotlin中Lambda表达式与高阶函数使用分析讲解

lambda本质上是可以传递给函数的一小段代码,Kotlin与Java中的Lambda有一定的区别,除了对lambda的全面支持外,还有内联函数等简洁高效的特性。下面我们来仔细看一下
2022-12-08

【Java基础教程】(七)面向对象篇 · 第一讲:上干货!面向对象的特性、类与对象、内存结构引用分析、垃圾收集器 GC处理、封装性详解、构造方法、匿名对象、简单 Java 类~

Java基础教程之面向对象 · 第一讲 🍉 篇章介绍本节学习目标1️⃣ 面向对象的三个特性2️⃣ 类与对象2.1 基本概念2.2 定义 3️⃣ 引用分析🔍 关于`垃圾收集器 GC`处理的介绍
2023-08-19

javascript当页面中的一部分或者全部的内容将被移离当前页面[剪贴]并移动到浏览者的系统剪贴板时触发此事件使用什么函数,详细讲解

JavaScript中用于在页面内容被剪切时触发的事件是copy事件。该事件可在可拷贝元素上监听,如或。copy事件对象包含剪切文本、防止剪切或停止冒泡等信息。通过监听copy事件并处理事件对象,开发者可以实现自定义剪切行为,如阻止某些内容剪切或显示剪切消息。请注意,copy事件在用户选择文本或使用键盘快捷键剪切时不会触发。
javascript当页面中的一部分或者全部的内容将被移离当前页面[剪贴]并移动到浏览者的系统剪贴板时触发此事件使用什么函数,详细讲解
2024-04-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录