广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python中的函数参数(位置参数、默认参数、可变参数)
  • 349
分享到

Python中的函数参数(位置参数、默认参数、可变参数)

2024-04-02 19:04:59 349人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录一、位置参数二、默认参数三、可变参数四、关键字参数五、命名关键字参数六、各种参数之间的组合函数的参数:python中函数定义非常简单,由于函数参数的存在,使函数变得非常灵活应用广

函数的参数:python中函数定义非常简单,由于函数参数的存在,使函数变得非常灵活应用广泛;不但使得函数能够处理复杂多变的参数,还能简化函数的调用。

Python中的函数参数有如下几种:位置参数、默认参数、可变参数、关键字参数和命名关键字参数

一、位置参数

位置参数(positional arguments)就是其他语言的参数,其他语言没有分参数的种类是因为只有这一种参数, 所有参数都遵循按位置一一对应的原则

计算x^2 的函数:


def power(x):
    return x * x
power(2)


对于power(x) 函数,参数x就是一个 位置参数 ,也叫做 必选参数 。当我们调用power函数时,必须传入有且仅有的一个参数x。

现在,如果我们要计算 x^3 怎么办?可以再定义一个power3 函数,但是如果要计算 x^4 、 x^5 ……怎么办?我们不可能定义无限多个函数。

你也许想到了,可以把power(x) 修改为power(x, n) ,用来计算 x^n ,说干就干:


def power(x,n):
    s = 1
    while n > 0:
        s = s*x
        n = n-1
    return s

对于这个修改后的power(x, n) 函数,可以计算任意n次方


print(power(2,10))
print(power(1,10))


输出:

1024

1

修改后的power(x, n) 函数有两个参数:x和n,这两个参数都是位置参数,调用函数时,传入的两个值 按照位置顺序 依次赋给参数x 和n 。

二、默认参数

由于我们经常计算 x^2 ,所以,完全可以把第二个参数n 的默认值设定为2,这个时候,默认参数就派上用场了。


def power(x,n=2):
s = 1
while n > 0:
s = s*x
n = n-1
return s
print(power(4))
print(power(3,n=3))
print(power(2,4))


输出:

16

27

16

这样,当我们调用power(4) 时,相当于调用power(4, 2) :而对于n > 2 的其他情况,就必须明确地传入n ,比如power(2, 4) 。

从上面的例子可以看出, 默认参数可以简化函数的调用

设置默认参数时,有几点要注意:

1、必选参数(位置参数)在前,默认参数在后,否则Python的解释器会报错

2、当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数

使用默认参数有什么好处

举个例子,我们写个一年级小学生注册的函数,需要传入name 、gender 、age、city四个参数:

由于大多数学生注册时年龄和城市基本一样,就可以把年龄和城市设置为默认参数,这样,大多数学生注册时不需要提供年龄和城市,只提供必须的两个参数,只有与默认参数不符的学生才需要提供额外的信息。


#学籍输入
def enroll(name,gender,age=6,city='BJ'):
print('name is: ',name)
print('gender is: ',gender)
print('age is: ',age)
print('city is: ',city,'\n')
enroll('Tom','M')
enroll('Lisa','f')
enroll('Bob','M',7)
enroll('Lucy','F',7,'TJ')
enroll('Jerry','M',city='SH')


输出:

name is: Tom

gender is: M

age is: 6

city is: BJ

name is: Lisa

gender is: f

age is: 6

city is: BJ

name is: Bob

gender is: M

age is: 7

city is: BJ

name is: Lucy

gender is: F

age is: 7

city is: TJ

name is: Jerry

gender is: M

age is: 6

city is: SH

可见,默认参数降低了函数调用的难度,而一旦需要更复杂的调用时,又可以传递更多的参数来实现。无论是简单调用还是复杂调用,函数只需要定义一个。

注意:默认参数有个最大的坑,演示如下:

先定义一个函数,传入一个list,添加一个end 再返回:


def add_end(list=[]):
list.append('end')
return list


当你正常调用时,结果似乎不错:


print(add_end([1,2,3]))
print(add_end(['x','y']))


输出:

[1, 2, 3, 'end']

['x', 'y', 'end']


#当你使用默认参数调用时,一开始结果也是对的:
print(add_end())
#但是,再次调用add_end() 时,结果就不对了:
print(add_end())
print(add_end())


输出:

['end']

['end', 'end']

['end', 'end', 'end']

很多初学者很疑惑,默认参数是[] ,但是函数似乎每次都“记住了”上次添加了'end' 后的list。原因解释如下:

Python函数在定义的时候,默认参数list的值就被计算出来了,即[] ,因为默认参数list也是一个变量,它指向对象[] ,每次调用该函数,如果改变了list的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。

定义默认参数要牢记一点:默认参数必须指向不变对象!

因此定义默认参数时一定要使用不可变对象(int、float、str、tuple)。使用可变对象语法上没错,但在逻辑上是不安全的,代码量非常大时,容易产生很难查找的bug。

要修改上面的例子,我们可以用None 这个不变对象来实现:


def add_end(list=None):
if list == None:
list = []
list.append('end')
return list
print(add_end([1,2,3]))
print(add_end(['x','y']))
print(add_end())
print(add_end())
print(add_end())


输出:

[1, 2, 3, 'end']

['x', 'y', 'end']

['end']

['end']

['end']

现在,无论调用多少次,都不会有问题。

为什么要设计str 、 None 这样的不变对象呢?因为不变对象一旦创建,对象内部的数据就不能修改,这样就减少了由于修改数据导致的错误。此外,由于对象不变,多任务环境下同时读取对象不需要加,同时读一点问题都没有。我们在编写程序时,如果可以设计一个不变对象,那就尽量设计成不变对象。

三、可变参数

在Python函数中,还可以定义可变参数。顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。

我们以数学题为例子,给定一组数字a,b,c…… ,请计算a^2 + b^2 + c^2 +...

要定义出这个函数,我们必须确定输入的参数。由于参数个数不确定,我们首先想到可以把a,b,c……作为一个list或tuple传进来,这样,函数可以定义如下:


def calculator(numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
print(calculator([2,3]))
print(calculator((3,5,6)))


输出:

13

70

但是调用的时候,需要先组装出一个list 或tuple,如果利用可变参数,调用函数的方式就可以简化:


def calculator(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
print(calculator(2,3))
print(calculator(3,5,6))


输出:

13

70

定义可变参数和定义一个list 或tuple 参数相比,仅仅在参数前面加了一个* 号。在函数内部,参数numbers接收到的是一个tuple(可变参数将以tuple形式传递),因此,函数代码完全不变。但是,调用该函数时,可以传入任意个参数,包括0个参数。

如果已经有一个list或者tuple,要调用一个可变参数怎么办?可以这样做:


nums = [2,3,4]
print(calculator(nums[0],nums[1],nums[2]))


输出:

29

这种写法当然是可行的,问题是太繁琐,所以Python允许你* 在list或tuple前面加一个 号**,把list或tuple的元素变成可变参数传进去:


nums = [2,3,4]
print(calculator(*nums))


输出:

29

nums 表示把nums 这个list的所有元素作为可变参数传进去。这种写法相当有用,而且很常见。

四、关键字参数

python的可变参数以tuple形式传递,而关键字参数则是以dict形式传递。

即可变参数传递的是参数值,关键字参数传递的是参数名:参数值键值对。

形式: **kw 这是惯用写法,建议使用,容易被理解


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


输出:

name is: Bob gender is: M other is : {'age': 7, 'city': 'TJ'}

name is: Lucy gender is: F other is : {'city': 'BJ'}

可变参数和关键字参数都可以接受0个或者多个参数

五、命名关键字参数

Python的命名关键字参数对传入的关键字参数做了进一步的限制。

格式:在关键字参数前增加一个”*”。


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)


输出:

name is: Bob gender is: M age: 7 city: TJ

name is: Lucy gender is: F age: 10 city: BJ

* 关键字参数和命名关键字参数的区别在于,前者可以传递任何名字的参数,而后者只能传递 后面名字的参数。* 如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符 了:


#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 function(a, b, c=0, *, d, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)


可读性是代码的一个很重要的要求,所以尽量避免使用多种参数的组合。

到此这篇关于Python中的多个函数参数的文章就介绍到这了,更多相关Python中的函数参数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python中的函数参数(位置参数、默认参数、可变参数)

本文链接: https://www.lsjlt.com/news/135066.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Python中的函数参数(位置参数、默认参数、可变参数)
    目录一、位置参数二、默认参数三、可变参数四、关键字参数五、命名关键字参数六、各种参数之间的组合函数的参数:Python中函数定义非常简单,由于函数参数的存在,使函数变得非常灵活应用广...
    99+
    2022-11-12
  • 浅析C/C++中的可变参数与默认参数
    千万要注意,C不支持默认参数 C/C++支持可变参数个数的函数定义,这一点与C/C++语言函数参数调用时入栈顺序有关,首先引用其他网友的一段文字,来描述函数调用,及参数入栈: ---...
    99+
    2022-11-15
    可变参数 默认参数
  • Python函数默认参数如何设置
    这篇文章主要介绍“Python函数默认参数如何设置”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python函数默认参数如何设置”文章能帮助大家解决问题。我们知道,在调用函数时如果不指定某个参数,P...
    99+
    2023-07-05
  • 默认参数
    默认参数可以简化函数的调用,降低调用函数的难度 设置默认参数时,有几点要注意:   1) 必选参数在前,默认参数在后,否则Python的解释器会报错   2) 如何设置默认参数   当函数有多个参数时,把变化大的参...
    99+
    2023-01-31
    参数
  • php函数如何用默认参数和可变长度参数方式传递
    这篇文章主要讲解了“php函数如何用默认参数和可变长度参数方式传递”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php函数如何用默认参数和可变长度参数方式传递”吧!向函数传递参数的方式有四种...
    99+
    2023-06-20
  • golang给函数参数设置默认值的几种方式小结(函数参数默认值
    目录前言强制改变使用可变参数语法糖利用结构体的config转换函数的全部参数补充知识:Golang中设置函数默认参数的优雅实现总结前言 这个问题相当麻烦,根据golang-nuts/...
    99+
    2023-01-06
    golang 参数默认值 golang函数参数设置默认值 golang函数定义
  • Python 默认参数值
    Python 默认参数值,对于一些函数来说,你可能为希望使一些参数可选并使用默认的值,以避免用户不想为他们提供值的情况。默认参数值可以有效帮助解决这一情况。你可以通过在函数定义时附加一个赋值运算符(=)来为参数指定默认参数值。 要注意到,...
    99+
    2023-01-31
    参数 Python
  • C++中占位参数和默认参数的示例分析
    这篇文章将为大家详细讲解有关C++中占位参数和默认参数的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1,默认参数在c++中,函数的形参列表中的形参是可以有默认值的。语法: 返回值类型 函数名 (...
    99+
    2023-06-29
  • ES6中函数参数的默认值
    小编给大家分享一下ES6中函数参数的默认值,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!函数参数的默认值形参初始值function add(a, b, c&n...
    99+
    2022-10-19
  • C++核心编程之占位参数和默认参数
    目录1,默认参数2,函数占位参数1,默认参数 在c++中,函数的形参列表中的形参是可以有默认值的。 语法: 返回值类型 函数名 (参数 = 默认值)注意事项:1从左到右设置默认参数。...
    99+
    2022-11-13
  • Python 关键字参数和可变参数
    关键字参数 如果你有一些具有许多参数的函数,而你又希望只对其中的一些进行指定,那么你可以通过命名它们来给这些参数赋值——这就是python关键字参数(Keyword Arguments)——我们使用命名(关键字)而非位置(一直以来我们所使...
    99+
    2023-01-31
    参数 关键字 Python
  • Python进阶-函数默认参数(详解)
    一、默认参数 python为了简化函数的调用,提供了默认参数机制: def pow(x, n = 2): r = 1 while n > 0: r *= x n -= 1...
    99+
    2022-06-04
    进阶 详解 函数
  • C++函数的默认参数详情
    文章转自微信 公众号:Coder梁(ID:Coder_LT) C++当中的支持默认参数,如果你学过Python,那么想必对此不会陌生。C++中的默认参数的用法和Python基本一致...
    99+
    2022-11-12
  • Python函数默认参数设置的具体方法
    我们知道,在调用函数时如果不指定某个参数,Python 解释器会抛出异常。为了解决这个问题,Python 允许为参数设置默认值,即在定义函数时,直接给形式参数指定一个默认值。这样的话...
    99+
    2023-05-14
    Python函数默认参数 python 默认参数
  • 深入讲解Python函数中参数的使用及默认参数的陷阱
    C++里函数可以设置缺省参数,Java不可以,只能通过重载的方式来实现,python里也可以设置默认参数,最大的好处就是降低函数难度,函数的定义只有一个,并且python是动态语言,在同一名称空间里不能有想...
    99+
    2022-06-04
    参数 函数 陷阱
  • python默认参数陷阱
    对于学习python的人都有这样的困惑   def foo(a=[]): a.append(5) return a Python新手希望这个函数总是返回一个只包含一个元素的列表:[5]。结果却非常不同,而且非常惊人(对...
    99+
    2023-01-31
    陷阱 参数 python
  • Python 函数教程:如何使用默认参数和关键字参数?
    函数是 Python 中最基本的编程元素之一,可以将一段逻辑代码封装成一个可重复利用的单元。在 Python 中,函数定义的格式如下: def function_name(parameters): """docstring""" ...
    99+
    2023-06-29
    函数 教程 关键字
  • python函数的默认参数请勿定义可变类型详解
    目录函数的默认参数请勿定义可变类型可变类型和不可变类型定义可变类型会有什么问题?导致的原因解决方法关于可变类型作为默认参数时的注意点测试:将可变类型列表换为字典测试:来个不可变类型字...
    99+
    2022-11-13
  • Python 函数 —— 定义,参数,参
    函数函数    数学定义:y = f(x), y是x的函数,x是自变量。 y = f(x0,x1,x2,...,xn)    python函数:        - 由 若干语句组成的语句块、函数名称、参数列表 构成,它是组织代码的最小单元 ...
    99+
    2023-01-31
    函数 定义 参数
  • Python函数可变参数有哪些
    Python函数可变参数有两种类型。分别是*args 和 **kwargs。详细介绍:1、*args:这种参数允许函数接受任意数量的位置参数。在函数定义中,*args 表示一个元组,其中包含了所有传递给函数的位置参数;2、**kwargs:...
    99+
    2023-12-13
    Python函数
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作