Python中的参数传递都有哪些

  • 大体上分为三种(位置传参和关键字传参以及综合传参)
    位置传参又包含普通位置传参和序列传参(也是位置传参的一种)
    关键字传参又包含普通的关键字传参和字典传参
    综合传参是以上传参的方式混合使用
1.位置传参(实参和形参按照对应的位置进行传参)
#位置传参
def myfun(a,b,c):
    print('a = ',a)
    print('b = ',b)
    print('c = ',c)

myfun(1,,2,3) #形参和实参按照位置进行传参
2.序列传参(将实参序列按照*进行拆解,然后按照对应的位置进行传参)
#序列传参(将序列)

def func(a,b,c):
    print("a = ",a,end=" ")
    print("b = ",b,end=" ")
    print("c = ",c,end=" ")


lst = [1,2,3] #列表序列
s = "xyz" #String序列
t = (4,5,6) #元组序列
st = {2,3,4} #集合序列

func(*lst)
func(*s)
func(*t)
func(*st)
3.关键字传参(按照形参的名称对形参进行赋值,实参和形参一一进行匹配)
# 此示例示意关键字传参
def myfun(a,b,c):
    print("a = ",a)
    print("b = ",b)
    print("c = ",c)

myfun(b = 2,c = 3, a = 1)
myfun(c = 222,a = 1111,b = 333) #关键字传参不要求传递顺序
# myfun(a = 1,b = 2) 错误,参数不能缺少
# myfun(a = 1,b = 2,a = 3) 错误,参数必须一一对应
4.字典传参(是指实参为字典,将字典用**进行拆分后按照关键字传参的方式)
  • 说明

1> 字典的键名和形参名必须一致,字典的键名要在形参当中
2>字典的键名必须为字符串

# 此示例示意字典关键字传参

def func(a,b,c):
    print('a = ',a)
    print('b = ',b)
    print('c = ',c)

d = {'a':111,'c':333,'b':222}
func(**d) #等同于func(a = 111,c = 333,b = 222)

# 以下是错误的写法
# d2 = {1:'一','c':333,'b':222}
# func(**d2)
5.函数的综合传参:
  • 函数的传参方式在能够确定形参能够唯一匹配到当前实参的情况下可以任意的组合.
  • 要求:

位置传参在前,关键字传参在后.

# 函数的组合传参

def myfunc(a,b,c):
    print("a = ",a)
    print("b = ",b)
    print("c = ",c)

myfunc(1,c = 3,b = 2) #正确
# myfunc(b =  2,a = 1,3) #错误,关键字传参必须在位置传参的后面
myfunc(100,*[200,300]) #正确,前面是位置传参,后面是星号序列传参
myfunc(*"AB",300)#正确,前面是星号序列传参,位置传参,后面也是位置传参
myfunc(*[100],c = 300, b = 200) #正确,
6.函数的缺省参数
  • def 函数名(形参1=默认值1,形参2=默认值2,...)

1> 调用的时候可以不提供参数,使用默认的缺省参数就可.
2>缺省参数必须从右到左边依次存在,如果一个参数是缺省参数,则它的右边必须全部是缺省参数.
右边可以有可变参数,命名关键字参数,字典双星参数.
3>缺省参数可以有1个或多个,甚至可以全部是缺省参数.

# 缺省参数的使用

def info(name,age = 1,address = "不详")
    print(name,"今年",age,"岁, 住在:",address)

# info() 出错,至少要提供一个实参给name绑定
info('小李')
info('tarena',15)
info('小魏',3,'北京市朝阳区')
7.位置形参
  • def 函数名(形参1,形参2,....)
8.星号元组形参
  • def 函数名(*args):

*收集多余的位置传参.

  • 写一个函数可以接收n个参数,然后返回这些参数的和
def mysum(*args):
    # args实际上是一个元组
    return sum(args)

print(mysum(1,2,3))
print(mysum(4,3,2,3,5))
9.命名关键字形参
  • def 函数名(,形参1,形参2): 或是 def 函数名(args,形参1,形参2)

作用:强制*后面的参数必须是关键字传参.字典传参也是关键字传参的一种

def fa(a, b, *, c, d):
    '''强制c,d必须用关键字传参 '''
    print(a, b, c, d)

fa(1, 2, d=400, c=300)  # 对的


def fb(a, b, *args, c, d):
    print(a, b, args, c, d)

fb(1, 2, 3, 4, d=400, c=200)
fb(1, 2, 3, 4, 5, **{'d': 400, 'c': 300})

# 问题:
# fb(1,2,3,4, c=400, d=300, e=500)  # 出错,e是多余的

# fa(1, 2, 3, 4)  # 错的
10.双星号字典传参
  • def 函数名(**字典形参名):
    作用: 收集多余的关键字传参
# 双星号字典形参的用法

def fa(**kwargs):
    ''' kwargs是一个字典,里面用键值对的方式存放了参数名称和对应的值
        作用就是收集多余的关键字参数
    '''
    print("多余的关键字传参的个数是:",len(kwargs))
    print("kwargs = ",kwargs)

fa(a = 10,b = 20,c = 30)
# fa(10,a = 10,b = 20,c = 30)错误,没有位置形参
# 多余的关键字传参的个数是: 3
# kwargs =  {'b': 20, 'c': 30, 'a': 10}


# *args是星号元组传参,会收集前面n个位置传的形参,a必须是命名关键字形参.
# **kwargs负责收集后面的命名关键字传参(b and c)
def fb(*args,a,**kwargs):
    print(args,a,kwargs)

fb(1,2,3, b = 30,c = 30,a = 10)
#(1, 2, 3) 10 {'b': 30, 'c': 30}
  • 注意:
    python中参数传递的一般顺序是:
    位置传参 > 默认参数 > 星号元组传参 > 命名关键字传参 > 双星号字典传参
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容

  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 18,941评论 17 410
  • 一、快捷键 ctr+b 执行ctr+/ 单行注释ctr+c ...
    o_8319阅读 5,801评论 2 16
  • 第5章 函数和函数式编程 5.1 引言函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数...
    VIVAFT阅读 950评论 0 5
  • 今天周六,下周六加油。 今天起得早,打算晒晒被子,晒晒娃 看看错题,复复习。 11点半吃饭,12点寄快递,安排得明...
    草莓酱的烤鸡腿阅读 201评论 0 1
  • 蝴蝶是我 我是蝴蝶 自然梦境 你我共享 蝴蝶翅膀所及之地 便为山川 吾心澎湃所念之言 便起骇浪 ...
    Yu蔓越莓阅读 180评论 0 1