python函数支持哪些参数类型_Python函数的几种参数类型
以下代码均以Python3为基础理解。
初识Python函数
大部分常见的语言如C、Java、PHP、C#、JavaScript等属于C系语言,Python不属于他们中的一员(ruby亦然)。在这些语言中,Python也属于比较新奇的一派,就函数来说,它没有大括号,用def关键字定义一个函数,定义后用:然后换行tab指定函数函数的范围,当然也不存在什么分号。
作为一个函数,那个它肯定是有参数的,Python对于参数的定义比较繁杂,如果了解ES6,那么在Python函数的各个参数中差不多都能够找到对应的ES6定义,因为JS是我最为熟悉的编程语言,所以在下面介绍各种参数类型时都会对照JS中对应的类型,以加强理解。
Python函数参数分为位置参数、默认参数、可变参数、关键字参数、命名关键字参数五大类。
位置参数
这是最大众化的一种参数类型了,就是函数中定义确定的形参,然后调用函数的实参传入一一对应的参数,参数的位置、个数都不得有偏差。不同于JS中实参与形参可不同个数,这里的要求是非常严格的。
def desc(name,age,city)
print('name = ' , name,'age = ' , age,'city = ' , city)
# name = zhaobo age = 12 city = luzhou
desc('zhaobo',12,'luzhou')
默认参数
ES6中也有默认参数这种用法,Python中的用法与在ES中的用法出差不多的。在定义形参时即指定好默认参数,如果在实参没有传入这个位置的参数,那么这里的参数就为默认参数,默认参数要写在位置参数后面。
def desc(name,gender,city = 'luzhou',age = 15):
print('name = ' , name,'gender = ' , gender,'city = ' , city,'age = ' , age)
desc('zhaobo','male') # name = zhaobo gender = male city = luzhou age = 15
desc('YeJ.Q','female','Deyang') # name = YeJ.Q gender = female city = Deyang age = 15
desc('WeiC.M','female',age = 16) # name = WeiC.M gender = female city = luzhou age = 16
如上代码,desc函数有四个参数,其中后面两个是默认参数,第一种调用方式只传了必选的两个位置参数,那么通过打印结果来看,name和age是我们传进去的值,后面的city和age是默认参数中的值;第二种方式按照顺序三个值,前两个必选参数自然不必说,第三个参数覆盖了默认参数的值,第四个参数还是默认参数的值,是实际写代码的时候,要将变化小的参数写在参数列后面;最后一种调用方式,我们想的是在city上取默认值,但是在age上需要传新值,这个就在实参里面直接指定age的值,所以体现出默认参数的传递不一定要按照参数的顺序来传值。
总结:
默认参数必须在必选参数之后;
当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。
默认参数也可以不安默认的顺序提供参数,enroll(‘Adam’, ‘M’, city=’Tianjin’),这样调用即可
默认参数必须指向不变对象(str、None、int、float等)!不可指向list
可变参数
ES6中新增了一种rest参数(不定参数),是JS中arguments的语法糖,在传参的时候可传不定个数的参数,在函数中打印出不定参数是一个数组。
在Python中也有类似的语法,叫做不定参数,他的参数用*param定义,写在函数的最后(有且只能写一个),进行传参的时候,也可传也可不传参数,参数的个数也可变。
def power(name,*desc):
# 打印出来是一个tuple
# ('12', 'male', 'student')
print(desc)
power('zhaobo','12','male','student')
power('zhaobo',*['12','male','student'])
power('zhaobo',*('12','male','student'))
上述代码定义了使用不定参数的三种类型
完全体现“不定”两个字的含义,在对位置参数进行了对应的传参之后,剩下的就是不定参数,注意这里总共传入了四个参数,第一个是位置参数,后三个都将作为不定参数传入,在函数中作为不定参数打印出来的是一个元组(tuple);
传入了两个参数,第一个是位置参数,第二个在列表(list)的前面加上了一个*,这样就可以直接传入一个列表,然后打印结果与第一种是一样的。利用这一个语法糖就可以直接将参数传入一个列表。
这种方式与传入列表几乎无异,只是可以传入一个元组。
关键字参数
在使用JS尤其是jQuery的时候,常见用对象当作参数传递,在Python中也有类似的用法,而且功能也非常强大。
def foo(name,**kw):
# {'age': 8, 'gender': 'male'}
print(kw)
foo('zhaobo',**{'age': 8,'gender': 'male'})
foo('zhaobo',age = 8,gender = 'male')
关键字参数有两个调用方式,第一种,最简单直接的调用,可以在字典前加入**,然后直接传入字典,打印出来之后就是传入的这一个字典;第二种,将字典的key-value写成对应的表达式,然后每一个表达式对应一个参数传入,最后也会打印出这个字典,注意在写参数的时候,key不能用引号包起来。
命名关键字参数
前面的关键字参数是传一个字典到函数中,然后在函数中打印出来也是一个字典的形式。命名关键字参数,即是指定这个字典的key,使得传入的参数只能是当前指定的这些key。如下代码:
# 一般情况
def power(name,*,age,gender):
print(name) # zhaobo
print(age) # 12
print(gender) # male
power('zhaobo',age = 12, gender = 'male')
power('zhaobo',**{'age': 12,'gender': 'male'})
# 有可变参数的情况
def power(name,*kw,age = 10,gender):
print(name) # zhaobo
print(kw) # ('param1', 'param2', 'param3')
print(age) # 12
print(gender) # male
power('zhaobo','param1','param2','param3',age = 12,gender = 'male')
power('zhaobo','param1','param2','param3',**{'age': 12, 'gender': 'male'})
power('zhaobo','param1','param2','param3',**{'gender': 'male'})
上述代码展示了对命名关键字调用的两种形式。在一般的形式中,命名关键字参数用*分隔,注意*两边要打上逗号,然后就是指定命名命名关键字参数的key值,在调用函数时,有两种方式,一是key = value的形式,key与定义函数的命名关键字参数对应(顺序可以不一样),注意这里的key不要用引号包起来;另一中方式就是直接传一个字典,然后在字典前面加上**。
在有可变参数的情况下,对函数的定义就不用再单独写*了,指定在可变参数后面定义好关键字参数即可,在调用上,也是有key = value,直接传字典两种形式,在可变参数后面指定关键字参数即可。
需要注意的是,命名关键字参数也可以指定默认值,指定了默认值即代表这个key可传可不传,如果没有指定默认值那个key的参数多传或者是漏传都会导致语法错误。
多种参数类型
在Python中定义函数,上述的五种参数是可以混合定义的,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
# 定义一个函数,包含上述若干种参数:
def f1(a, b, c=0, *args, **kw):
print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
def f2(a, b, c=0, *, d, **kw):
print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)
# 在函数调用的时候,Python解释器自动按照参数位置和参数名把对应的参数传进去。
>>> f1(1, 2)
a = 1 b = 2 c = 0 args = () kw = {}
>>> f1(1, 2, c=3)
a = 1 b = 2 c = 3 args = () kw = {}
>>> f1(1, 2, 3, 'a', 'b')
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {}
>>> f1(1, 2, 3, 'a', 'b', x=99)
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': 99}
>>> f2(1, 2, d=99, ext=None)
a = 1 b = 2 c = 0 d = 99 kw = {'ext': None}
# 最神奇的是通过一个tuple和dict,你也可以调用上述函数:
>>> args = (1, 2, 3, 4)
>>> kw = {'d': 99, 'x': '#'}
>>> f1(*args, **kw)
a = 1 b = 2 c = 3 args = (4,) kw = {'d': 99, 'x': '#'}
>>> args = (1, 2, 3)
>>> kw = {'d': 88, 'x': '#'}
>>> f2(*args, **kw)
a = 1 b = 2 c = 3 d = 88 kw = {'x': '#'}
所以,对于任意函数,都可以通过类似func(args, *kw)的形式调用它,无论它的参数是如何定义的。
python函数支持哪些参数类型_Python函数的几种参数类型相关推荐
- dhcp服务器有哪些消息类型,DHCP 协议的 8 种消息类型及功能服务器
1) 主机发送 DHCP Discover 广播包在网络上寻找 DHCP 服务器: 单播数据包, 地址. 2) DHCP 服务器向主机发送 DHCP Offer 单播数据包,包含 IP 地址.MAC ...
- python冒号声明类型_Python 函数参数有冒号 声明后有- 箭头 返回值注释 参数类型注释...
在python3.7 环境下 函数声明时能在参数后加冒号,如图: 1 def f(ham: str, eggs: str = 'eggs') -> str : 2 print("Ann ...
- python函数定义中参数列表里的参数是_python函数参数中的/和*是什么意思?
在python3.8之后函数参数中允许出现/和*号,/用来指明某些函数形参必须使用位置参数而非关键字参数的形式,*出现在函数参数中第一种含义可以表示为可变参数,一般写作*args:对于单独出现在参数中 ...
- python函数定义中参数列表里的参数是_python函数定义中的参数说明
原博文 2020-05-23 07:50 − > 描述函数定义时 涉及到的 位置参数,默认参数,关键字参数,可变参数等的概念及用法 ## 1 示例代码 ``` #! /usr/bin/env p ...
- python函数参数学习_python函数学习1
函数1 (1)定义: def 函数名(参数列表) 函数体 (2)参数传递: 在python中,一切都是对象,类型也属于对象,变量是没有类型的. a = [1,2,3] a = "hellow ...
- python中函数分为哪四类_Python函数参数分类原理详解
1.函数的参数在哪里定义 在python中定义函数的时候,函数名后面的括号里就是用来定义参数的,如果有多个参数的话,那么参数之间直接用逗号,隔开 案列: # 利用函数的参数,定义一个可以完成任意两个数 ...
- 定义一个没有参数的函数、输出python3次_Python函数参数详解,三天让你掌握python,不再是小白
原标题:Python函数参数详解,三天让你掌握python,不再是小白 引言 随着程序功能的增多,代码量随之增大,此时仍不加区分地把所有功能的实现代码放到一起,将会使得程序的组织结构不清晰,可读性变差 ...
- python函数参数列表_python函数列表
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python函数函数是python里组织代码的最小单元,python函数包含以下 ...
- python函数参数定义_Python函数定义及参数详解
函数定义 首先我们来创建一个函数,输出指定范围内的斐波拉契数列(Fibonacci series). #!/usr/bin/env python #coding=utf-8 ''' Created o ...
最新文章
- 数组-移除元素(交换移除)
- java斗破苍穹游戏阵容,斗破苍穹手游竞技场阵容搭配解析 最强阵容你知道吗
- VTK:可视化之TextureMapImageData
- java web redis_java web redis使用(二)
- 2020年浙江高考考python吗_2020年浙江高考改革最新消息 浙江新高考规则解读
- 浮点类型float double 以及BigDecimal
- 无可奈何花落去,数据丢失时时来;何当共谈完整性,却话巴山夜雨时----详解SQL Server 数据库库完整性检查和置疑修复
- Linux 系统编程技巧与概念 第11章 不透明指针
- Lync Server新特性
- xxl-job使用笔记
- linux 递归查看文件个数,Linux下递归读取文件数量
- web测试 结果存储类型为“Database”,但尚未指定结果储存库连接字符串
- C文件编译、链接指令
- VS Code好看的主题
- 20155339 《信息安全技术》实验二、Windows口令破解实验报告
- w10 计算机配置在哪里,w10如何查看电脑配置
- 网盘有哪些?网盘哪个好用?
- 用网盘和git来管理资源
- 《CSS菜鸟教程》学习
- windows server2012R2 apache+mod_wsgi+django