python函数进阶之特殊参数

简介: 前言python作为一门高级语言,其一个重要的特征就是 “灵活” 。例如在函数的参数这方面,除了普通的位置参数之外还涉及了“默认参数”、“可变参数”、“关键字参数”之类的概念。今天我们就一起看看除了位置参数之外,python的“参数”还能玩出什么花样~”文假设我们已经有如何定义一个函数的基础知识储备。但是如果对这个概念不大熟悉的话也不要紧,我们简要介绍一下

前言


python作为一门高级语言,其一个重要的特征就是 “灵活” 。例如在函数的参数这方面,除了普通的位置参数之外还涉及了“默认参数”、“可变参数”、“关键字参数”之类的概念。

今天我们就一起看看除了位置参数之外,python的“参数”还能玩出什么花样~”

文假设我们已经有如何定义一个函数的基础知识储备。但是如果对这个概念不大熟悉的话也不要紧,我们简要介绍一下


1.函数定义与位置参数


我们可以用def语句定义一个函数:

def function(x,y):
    <code>

如上,我们就定义了一个名字叫function的h函数(函数名可以自由取),x,y就是我们的位置参数,会默认按照x,y的顺序将你输入的数据赋值给函数变量。


2.默认参数


在使用函数的时候,如果发现一种参数需要反复重复地输入,这就很妨碍程序员的coding效率(也很影响心情)。

有没有可能在定义的时候就让我们的函数知道,如果没有特殊指定,某个参数就按照预设的值赋值

显然是有的,这就是“默认参数”

def function(x,y=10):
    <code>

这样一来,我们调用函数的时候如果输入的是function(5),那么实际上计算机调用的是function(5,10)。这样就省去了可能在调用function的时候反复赋值y的情况。或者这个y非常重要,不赋值可能造成程序出错等严重结果


3.可变参数


这时候问题又来了。既然python是个“灵活”的语言,那我们是不是不需要在定义的时候就明确设置好需要的参数呢?

在实际生活当中,有些输入就是不定的,比如有些人有很多爱好,有些人计划没爱好;大部分学生可能就一个专业,但也有一些双修三修的大佬……

都用if来构造分支语句吗?不够灵活

python支持设置可变参数,把所有未匹配的位置参数组成一个tuple元组对象,用我们定义的可变对象名作为局部变量指向这个元组。

具体是什么意思呢?

def func(*args):
    <code>

我们不论输入的是func(1)还是func(1,2,3,4),这些数据都会存成一个元组,用args指向这个元组。

def func(*args):
    print(args)

如上,我们这样写了之后如果调用func(1,2,3,4),那我们就能看到(1,2,3,4)这个输出。

当我们输入了一个序列类型的数据时,就可以很好地利用序列的操作进行运算了,比如:

def calclu(x,*y):
    return x*sum(y)


如此就可以计算函数输入的第一个数字乘之后全部数字之和了,此时我们不需要知道之后的数字有多少个。


4.关键字参数


可变参数感觉实际上是“位置参数”加上了“可变”的特性。我们知道传入的参数可以不按照位置来定,你可以在调用函数的时候通过指定一个参数的名字来把值赋给它,我们把这样传入的参数叫做“关键字参数”。

那有没有类似这样的“关键字参数”的“可变参数”呢?

显然是有的。

def func(**kw):
    print(kw)
>>>func(a=1,b=2)
{"a":1,"b":2}

func(a=1,b=2)当我们这样调用函数的时候,得到的输出是一个字典。的确,关键字参数数据在传入的时候,会优先匹配和位置参数对上的参数,然后把剩下没匹配上的参数统一打包成dict字典并传入,用**后面的参数指向这个字典。

我们再看一个例子:

def func(a,**b):
    print(a)
    print(b)
>>>func(a=1,b=2,c=3)
1
{"b":2,"c":3}

很直观,因为在传入的时候a匹配上了我们之前定义的位置参数,所以1赋值给a变量;

b,c没有在位置参数中出现,又是以关键字参数的形式传入的。我们把它封装成一个字典。

这样一来,python就更加灵活了。我们除了可以处理不知道数量的数据之外,还可以允许给不定数量的参数添加信息

def func(name,**kw):
    print(f"{name},{kw}")
>>> func("小明",age=18,gender="male")
小明,{"age":18,"gnder":"male"}

是不是很直观?如此灵活的语言,印证了那句话:

人生苦短,我学python


相关文章
|
2天前
|
大数据 测试技术 数据库
【Python篇】Python 函数综合指南——从基础到高阶
【Python篇】Python 函数综合指南——从基础到高阶
7 2
|
2天前
|
存储 人工智能 开发工具
AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片
只需要通过向AI助理提问的方式输入您的需求,即可瞬间获得核心流程代码及参数,缩短学习路径、提升开发效率。
58 0
AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片
|
11天前
|
Python
python函数进阶
python函数进阶
|
11天前
|
安全 Python
Python量化炒股的获取数据函数—get_industry()
Python量化炒股的获取数据函数—get_industry()
21 3
|
11天前
|
Python
Python sorted() 函数和sort()函数对比分析
Python sorted() 函数和sort()函数对比分析
|
11天前
|
Python
Python量化炒股的获取数据函数—get_security_info()
Python量化炒股的获取数据函数—get_security_info()
21 1
|
14天前
|
数据库 开发者 Python
实战指南:用Python协程与异步函数优化高性能Web应用
在快速发展的Web开发领域,高性能与高效响应是衡量应用质量的重要标准。随着Python在Web开发中的广泛应用,如何利用Python的协程(Coroutine)与异步函数(Async Functions)特性来优化Web应用的性能,成为了许多开发者关注的焦点。本文将从实战角度出发,通过具体案例展示如何运用这些技术来提升Web应用的响应速度和吞吐量。
13 1
|
2天前
|
Python
从零到一:构建Python异步编程思维,掌握协程与异步函数
从零到一:构建Python异步编程思维,掌握协程与异步函数
8 0
|
2天前
|
存储 索引 Python
深度解密函数的 local 名字空间(当 Python 中混进一只薛定谔的猫……)
深度解密函数的 local 名字空间(当 Python 中混进一只薛定谔的猫……)
10 0
|
2天前
|
存储 IDE 编译器
解密 Python 函数的实现原理
解密 Python 函数的实现原理
9 0