python中(*args, **kw)这两类参数 的正确打开方式

一、(*args, **kw)是在python函数定义中使用的

  • 在分析(*args, **kw)两个参数之前,先讲讲在python中函数的定义:
      在Python中定义函数,分为:1、必选参数、2、默认参数、3、可变参数、4、关键字参数和5、命名关键字参数,这5种参数都可以组合使用。
      但参数定义的顺序必须是:
    必选参数默认参数可变参数(*args)命名关键字参数关键字参数(kw)

二、 主要参数描述

1、必选参数、默认参数
# 必选参数  x:必须得要输入的参数
# 默认参数  y:非必填项,在定义函数的时候,就给了一个默认的值,你不输入的话,就默认为这个数值
 
def sum(x, y=2):
    s= x+y
    return s
 
# 仅输入必选参数
print('仅输入必选参数')
print(sum(3))
# 输出结果
5
 
# 输入必选参数与默认参数
print('输入必选参数与默认参数')
print(sum(3, 4))
 
# 输出结果
7
2、可变参数(*args)
# 可变参数 *args :可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。
# 可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple
 
'''
给出一组数字a,b,c……,请计算a**2 + b**2 + c**2 + ……。首先,a,b,c均是变量,数值可变化
解决方案1:将a,b,c...定义为列表或者元组进行计算;
解决方案2:将a,b,c...定义为可变参数进行计算;
'''
--------------------------------------------------------------
 
# 方案1 代码: 
def calc(numbers):
    sum = 0
    for nums in numbers:
        sum = sum + nums ** 2
    print(sum)
 
 
# 结果验证
print('输入为列表')
numbers1 = [3, 4, 6]
calc(numbers1)
 
print('输入为元组')
numbers2 = (3, 4, 6)
calc(numbers2)
 
# 输出结果
输入为列表
50
输入为元组
50
 
---------------------------------------------------------------
# 方案2 代码;
def calc(*numbers):
    sum = 0
    for nums in numbers:
        sum = sum + nums ** 2
    print(sum)
 
# 结果验证,直接在函数中输入动态个数的参数值
 
print('直接输入参数值')
calc(3, 4, 5)
 
# 输出结果
直接输入参数值
50
 
# 若已经定义了列表或者元组,可以将元组元素提取出来单独输入/
# 或者,直接在元组或者列表前加 “*”号,将元组列表转变为可变参数 *args
 
 
print('单独提元组或列表内容')
numbers2 = (3, 4, 6)
calc(numbers2[0],numbers2[1],numbers2[2])
 
print('将列表或元组转换为可变参数')
numbers2 = (3, 4, 6)
calc(*numbers2)
 
#输出结果 
单独提元组或列表内容
61
将列表或元组转换为可变参数
61
3、关键字参数( **kw)
#关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict
#关键字参数有什么用?它可以扩展函数的功能。

'''
例:当我们需要获取到一些个人基本信息时,当然是越多对个人的描述越详细
 def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)
'''
 
#实例展示:
print('**kw中 加入性别、职位')
person('Jack', 24, gender='man', major='Engineer')
 
#输出结果、**kw蔬菜为字典形式:
**kw中 加入性别、职位
name: Jack age: 24 other: {'gender': 'man', 'major': 'Engineer'}
 
4、命名关键字参数(*,kw,kw, ... ,)
'''
1、如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和job作为关键字参数。
这种方式定义的函数如下:
2、和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数。
3、使用命名关键字参数时,要特别注意,如果没有可变参数,就必须加一个*作为特殊分隔符。如果缺
少*,Python解释器将无法识别位置参数和命名关键字参数:
'''
 
 
'''
例:首先默认参数为name、age、除此之外,我们还想要加入一些固定的命名关键字参数city, job
def person(name, age, *, city, job):
    print(name, age, city, job)
'''
 
# 实例展示1:正常输入
print('直接传入city、job参数')
person('Jack', 24, city='Beijing', job='Engineer')
 
# 输出结果
直接传入city、job参数
Jack 24 Beijing Engineer
 
 
# 实例展示2:异常输入,会出现TypeError
print('传入city、job其他参数、gender')
person('Jack', 24, city='Beijing', job='Engineer',gender='man')
 
# 输出结果
传入city、job其他参数、gender
....
TypeError: person() got an unexpected keyword argument 'gender'
 
 
# 实例展示3:如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔
#符*了:,但是命名关键字参数必须传入参数名,这和位置参数不同。如果没有传入参数名,调用将报错:
#(因为可变参数处不能理解输入的内容属于可变部分还是命名关键字部分)
 
def person(name, age, *args, city, job):
    print(name, age, args, city, job)
 
# 验证代码
print('传入参数名')
person('Jack', 24, city='Beijing', job='Engineer')
print('不传入参数名')
person('Jack', 24, 'Beijing', 'Engineer')
 
 
#输出结果
 
传入参数名
Jack 24 () Beijing Engineer
不传入参数名
...
TypeError: person() missing 2 required keyword-only arguments: 'city' and 'job'

原文链接==https://blog.csdn.net/u010801439/article/details/103719415

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

推荐阅读更多精彩内容