Python函数传参方式超级大汇总

枫铃3年前 (2021-09-30)Python207

位置参数

位置参数传递是最为简单的传递方式,按照函数参数的位置顺序逐个匹配传入,传入参数的个数必须与函数参数个数一致。

见示例1,根据位置顺序进行匹配,a,b,c分别赋值为2,3,4

示例1

def func(a,b,c):
    print("args:",a,b,c)
    
if __name__ == "__main__":
    func(2,3,4) #输出结果 args: 2 3 4

关键字参数

通过关键字对变量进行赋值,可以对全部关键字进行赋值,这时候位置可以随意改变。见示例2,输出结果与示例1一致。

示例2

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def func(a,b,c):
    print("args:",a,b,c)
    
if __name__ == "__main__":
    func(c=4,a=2,b=3) #输出结果 args: 2 3 4

也可以对部分关键字进行赋值,这属于位置参数和关键字参数的混用,有关键字的部分必须放在后面,见示例3

示例3

def func(a,b,c):
    print("args:",a,b,c)
    
if __name__ == "__main__":
    func(2,c=4,b=3) #输出结果 args: 2 3 4

默认参数

有些函数参数提供了默认值,如果要使用,可不传入,如示例4

示例4

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def func(a,b,c=4):
    print("args:",a,b,c)
    
if __name__ == "__main__":
    func(2,3) #输出结果 args: 2 3 4

如果不使用其定义的默认值,可自行传入,对其修改,如示例5

示例5

def func(a,b,c=4):
    print("args:",a,b,c)
    
if __name__ == "__main__":
    func(2,3,5) #输出结果 args: 2 3 5

命名关键字参数

与普通关键字参数不同,命名关键字参数必须用进行区分,后面的参数必须通过关键字传入,见示例6

示例6

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def func(a,b,*,c):
    print("args:",a,b,c)
    
if __name__ == "__main__":
    func(2,3,c=4) #输出结果 args: 2 3 4

如果不按照关键字传入,则报TypeError的错误,见示例7

示例7

def func(a,b,*,c):
    print("args:",a,b,c)
    
if __name__ == "__main__":
    func(2,3,4)  
#TypeError: func() takes 2 positional arguments but 3 were given

可变参数

如果定义的函数中带有*args或者**args都是属于可变参数方式进行参数传入
*args是以元组的方式收集不匹配的的位置参数,见示例8

示例8

def func(a,b,*c):
    print("args c:"c)
if __name__ == "__main__":
    func(2,3,4,5,6) #输出结果 args c: (4, 5, 6)

在示例8中,有a,b,c3个形式参数,但是按照位置参数的形式传入了5个参数,最后的3个参数都按照元组的形式(4,5,6)传给了c。

定义函数时候,*args必须放在位置参数后面,否则报TypeError的错误,见示例9。

#示例9
def func(a,*c,d):
    print("args c:",c,d)

if __name__ == "__main__":
    func(2,3,4,5,6)
#TypeError: func() missing 1 required keyword-only argument: 'd'

**args是以字典的形式收集不匹配的位置参数,仅对关键字参数传入有效,见示例10

示例10

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def func(a,b,**c):
    print("args c:",c)

if __name__ == "__main__":
    func(2,3,c=4,d=5,e=6)#输出结果 args c: {'c': 4, 'd': 5, 'e': 6}

在示例10中,参数c收集了以字典的形式收集了后面的3个参数。跟*args一样,函数中的**args必须放在位置参数后面。

再看一个传参方式混合使用的的例子,见示例11。

示例11

def func(a,*b,c=None,**d):
    print("a:",a)
    print("b:",b)
    print("c:",c)
    print("d:",d)

if __name__ == "__main__":
    func(2,3,4,c=4,d=5,e=6

输出结果如下所示:

a: 2
b: (3, 4)
c: 4
d: {'d': 5, 'e': 6}    

从示例11可见,2赋值给a,b以元组的形式收集了3,4,c=4修改了默认参数的值,d以字典的形式收集了4,5,6

前面所说的args或者**args是出现在函数定义中的,其实在参数传入时候也可以使用使用和**,他们会数据进行解包。如示例12和示例13

示例12

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def func(a,b,c):
   print("a:",a,",b:",b,",c:",c)
if __name__ == "__main__":
    a=(2,3,4)
    func(*a)#输出结果 a: 2 ,b: 3 ,c: 4

示例13

def func(a,b,c):
   print("a:",a,",b:",b,",c:",c)
if __name__ == "__main__":
    a={'a':1,'b':2,'c':3}
    func(**a)#输出结果 a: 2 ,b: 3 ,c: 4

相关文章

利用python同步windows和linux文件

写python脚本的初衷,每次在windows编辑完文件后,想同步到linux上去,只能够登录服务器,...

爬虫基本原理

爬虫基本原理 一、爬虫是什么? 百度百科和维基百科对网络爬虫的定义:简单来说爬虫就是抓取目标网站内容的工具,一般是根据定义的行...

Django 函数和方法的区别

函数和方法的区别 1、函数要手动传self,方法不用传 2、如果是一个函数,用类名去调用,如果是一个方法...

Django 知识补漏单例模式

单例模式:(说白了就是)创建一个类的实例。在 Python 中,我们可以用多种方法来实现单例模式&#x...

Django基础知识MTV

Django简介 Django是使用Python编写的一个开源Web框架。可以用它来快速搭建一个高性能的网站。 Django也是一个MVC框架。但是在Dj...

Python mysql 索引原理与慢查询优化

一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。