Python中函数传递和接收参数(形式参数和实际参数中使用单个*和使用两个**的示例)

总结:

(1)函数实参中含有*号,如*contents,则表示把列表变量或者元组变量contents拆开作为位置参数传入函数.如果函数实参中含有**号,如**contents,则表示把字典变量contents拆开作为关键字参数传入函数,字典的键和值分别作为函数的形参和实参
(2)函数形参中含有*号,如*contents,则表示该函数可以接受任意数量的位置实参,在函数内部,变量contents是作为元组tuple来对待.如果函数形参中含有**号,如**contents,那么表示该函数可以接受任意数量的关键字实参,在函数内部,变量contents是作为字典来对待的.

函数从列表、元组和字典中接收参数:

# 函数接收列表、元组和字典中的参数

def printInfo(name,gender,age,weight):
    print("name:",name)
    print("gender:",gender)
    print("age:",age)
    print("weight:",weight)

print("示例1".center(50,"-"))
ls = ["甲","男",25,100]
printInfo(*ls)


print("示例2".center(50,"-"))
tp = ("乙","女",44,150)
printInfo(*tp)

print("示例3".center(50,"-"))
dict1 = {"name":"丙","gender":"Male","age":55,"weight":78}
printInfo(**dict1)

print("示例4".center(50,"-"))
dict2 = dict(name="丁",gender="Female",age=66,weight=847)
printInfo(**dict2)

控制台下的输出:

Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。

尝试新的跨平台 PowerShell https://aka.ms/pscore6

PS C:\Users\chenxuqi\Desktop\新建文件夹\新建文件夹>  & 'D:\Python\Python37\python.exe' 'c:\Users\chenxuqi\.vscode\extensions\ms-python.python-2020.11.371526539\pythonFiles\lib\python\debugpy\launcher' '54332' '--' 'c:\Users\chenxuqi\Desktop\新建文件夹\新建文件夹\test.py'
-----------------------示例1------------------------
name: 甲
gender: 男
age: 25
weight: 100
-----------------------示例2------------------------
name: 乙
gender: 女
age: 44
weight: 150
-----------------------示例3------------------------
name: 丙
gender: Male
age: 55
weight: 78
-----------------------示例4------------------------
name: 丁
gender: Female
age: 66
weight: 847
PS C:\Users\chenxuqi\Desktop\新建文件夹\新建文件夹> 

形参中的*号和**号的作用:

# 函数接收列表

def printInfo(name,gender,age,weight):
    print("name:",name)
    print("gender:",gender)
    print("age:",age)
    print("weight:",weight)

# print("示例1".center(50,"-"))
# ls = ["甲","男",25,100]
# printInfo(*ls)

# 接收元组
def getFunc1(*contents):
    print("传入的参数的类型是:",type(contents))
    for city in contents:
        print(city)

def getFunc1_(contents):
    print("传入的参数的类型是:",type(contents))
    for city in contents:
        print(city)

# 接收字典
def getFunc2(**contents):
    print("传入的参数的类型是:",type(contents))
    for k,v in contents.items():
        print("关键字是:{0} 值是:{1}".format(k,v))


print("示例1A".center(50,"-"))
ls = ["上海","北京","重庆","天津"]
getFunc1(ls)

print("示例1B".center(50,"-"))
ls = ["上海","北京","重庆","天津"]
getFunc1(*ls)

print("示例1C".center(50,"-"))
ls = ["上海","北京","重庆","天津"]
getFunc1_(ls)

print("示例1D".center(50,"-"))
getFunc1("北京","上海","广州","深圳")


print("示例2A".center(50,"-"))
tp = ("舟山","衢州","金华","杭州","嘉兴")
getFunc1(tp)

print("示例2B".center(50,"-"))
tp = ("舟山","衢州","金华","杭州","嘉兴")
getFunc1(*tp)

print("示例3".center(50,"-"))
getFunc2(heilongjiang="哈尔滨",zhejiang="杭州",福建="福州",山东="济南",江苏="南京")

print("示例4".center(50,"-"))
dic = dict(江苏="南京",zhejiang="杭州",hebei="石家庄")
# print(dic)
getFunc2(**dic)

print("示例5".center(50,"-"))
dic = {'江苏':"南京",'zhejiang':"杭州","hebei":"石家庄"}
# print(dic)
getFunc2(**dic)

控制台下的输出:

Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。

尝试新的跨平台 PowerShell https://aka.ms/pscore6

PS C:\Users\chenxuqi\Desktop\新建文件夹\新建文件夹>  & 'D:\Python\Python37\python.exe' 'c:\Users\chenxuqi\.vscode\extensions\ms-python.python-2020.11.371526539\pythonFiles\lib\python\debugpy\launcher' '55714' '--' 'c:\Users\chenxuqi\Desktop\新建文件夹\新建文
件夹\test.py'
-----------------------示例1A-----------------------
传入的参数的类型是: <class 'tuple'>
['上海', '北京', '重庆', '天津']
-----------------------示例1B-----------------------
传入的参数的类型是: <class 'tuple'>
上海
北京
重庆
天津
-----------------------示例1C-----------------------
传入的参数的类型是: <class 'list'>
上海
北京
重庆
天津
-----------------------示例1D-----------------------
传入的参数的类型是: <class 'tuple'>
北京
上海
广州
深圳
-----------------------示例2A-----------------------
传入的参数的类型是: <class 'tuple'>
('舟山', '衢州', '金华', '杭州', '嘉兴')
-----------------------示例2B-----------------------
传入的参数的类型是: <class 'tuple'>
舟山
衢州
金华
杭州
嘉兴
-----------------------示例3------------------------
传入的参数的类型是: <class 'dict'>
关键字是:heilongjiang 值是:哈尔滨
关键字是:zhejiang 值是:杭州
关键字是:福建 值是:福州
关键字是:山东 值是:济南
关键字是:江苏 值是:南京
-----------------------示例4------------------------
传入的参数的类型是: <class 'dict'>
关键字是:江苏 值是:南京
关键字是:zhejiang 值是:杭州
关键字是:hebei 值是:石家庄
-----------------------示例5------------------------
传入的参数的类型是: <class 'dict'>
关键字是:江苏 值是:南京
关键字是:zhejiang 值是:杭州
关键字是:hebei 值是:石家庄
PS C:\Users\chenxuqi\Desktop\新建文件夹\新建文件夹>

同时使用*形参和**形参:



# def printStuInfo(ID,hoppy="打篮球",*Info,**content):
def printStuInfo_1(ID,*Info,**contents):
    print("ID =",ID)
    for info in Info:
        print(info,end=", ")  
    print()
    for k,v in contents.items():
        print("关键字是:{0} 值是:{1}".format(k,v))


print("示例1".center(50,"-"))
printStuInfo_1(10008,"性别男","民族汉",\
    江苏="南京",zhejiang="杭州",hebei="石家庄")


def printStuInfo_2(ID,hobby="打篮球",*Info,**contents):
    print("ID =",ID)
    for info in Info:
        print(info,end=", ")  
    print()
    for k,v in contents.items():
        print("关键字是:{0} 值是:{1}".format(k,v))
    print("业余爱好是:",hobby)

print("示例2".center(50,"-"))
printStuInfo_2(10008,"性别男","民族汉","籍贯浙江",\
    江苏="南京",zhejiang="杭州",hebei="石家庄")
# 注意,这里的业余爱好的参数会有问题

print("示例3".center(50,"-"))
printStuInfo_2(10008,"打篮球","性别男","民族汉","籍贯浙江",\
    江苏="南京",zhejiang="杭州",hebei="石家庄")




def printStuInfo_3(ID,*Info,hobby="打篮球",**contents):
    print("ID =",ID)
    for info in Info:
        print(info,end=", ")  
    print()
    for k,v in contents.items():
        print("关键字是:{0} 值是:{1}".format(k,v))
    print("业余爱好是:",hobby)
print("示例4".center(50,"-"))
printStuInfo_3(10008,"性别男","民族汉","籍贯浙江","打篮球",\
    江苏="南京",zhejiang="杭州",hebei="石家庄")

print("示例5".center(50,"-"))
printStuInfo_3(10008,"性别男","民族汉","籍贯浙江",hobby="打篮球",\
    江苏="南京",zhejiang="杭州",hebei="石家庄")

""" 
# 将关键词参数放在**contents之后会报错
def printStuInfo_4(ID,*Info,**contents,hobby="打篮球"):
    pass 

 """



""" 
# 默认值的参数 放在无默认值的参数前也会报错
# SyntaxError: non-default argument follows default argument
def printStuInfo_5(hobby="打篮球",ID,*Info,**contents):
    pass 

 """




""" 
# **contents放在*Info前面也会报错,
#   File "c:\Users\chenxuqi\Desktop\新建文件夹\新建文件夹\test.py", line 79
#     def printStuInfo_5(**contents,*Info):
#                                   ^
# SyntaxError: invalid syntax
def printStuInfo_5(**contents,*Info):
    pass 

 """


控制台下的输出:

Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。

尝试新的跨平台 PowerShell https://aka.ms/pscore6

PS C:\Users\chenxuqi\Desktop\新建文件夹\新建文件夹>  & 'D:\Python\Python37\python.exe' 'c:\Users\chenxuqi\.vscode\extensions\ms-python.python-2020.11.371526539\pythonFiles\lib\python\debugpy\launcher' '56328' '--' 'c:\Users\chenxuqi\Desktop\新建文件夹\新建文
件夹\test.py'
-----------------------示例1------------------------
ID = 10008
性别男, 民族汉, 
关键字是:江苏 值是:南京
关键字是:zhejiang 值是:杭州
关键字是:hebei 值是:石家庄
-----------------------示例2------------------------
ID = 10008
民族汉, 籍贯浙江, 
关键字是:江苏 值是:南京
关键字是:zhejiang 值是:杭州
关键字是:hebei 值是:石家庄
业余爱好是: 性别男
-----------------------示例3------------------------
ID = 10008
性别男, 民族汉, 籍贯浙江, 
关键字是:江苏 值是:南京
关键字是:zhejiang 值是:杭州
关键字是:hebei 值是:石家庄
业余爱好是: 打篮球
-----------------------示例4------------------------
ID = 10008
性别男, 民族汉, 籍贯浙江, 打篮球, 
关键字是:江苏 值是:南京
关键字是:zhejiang 值是:杭州
关键字是:hebei 值是:石家庄
业余爱好是: 打篮球
-----------------------示例5------------------------
ID = 10008
性别男, 民族汉, 籍贯浙江, 
关键字是:江苏 值是:南京
关键字是:zhejiang 值是:杭州
关键字是:hebei 值是:石家庄
业余爱好是: 打篮球
PS C:\Users\chenxuqi\Desktop\新建文件夹\新建文件夹> 

位置参数、默认参数、可变参数和可变关键字参数的排列顺序:

Python 3.7.4 (tags/v3.7.4:e09359112e, Jul  8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> def f(a,b,c='1',*args,**kwargs):
	pass

>>> def f(a,b,*args,c='1',**kwargs):
	pass

>>> 
>>> def f(a,b,*args,**kwargs,c='1'):
	pass
SyntaxError: invalid syntax
>>> 
>>> def f(c='1',a,b,*args,**kwargs):
	pass
SyntaxError: non-default argument follows default argument
>>> 
>>> def f(a,b,c='1',**kwargs,*args):
	pass
SyntaxError: invalid syntax
>>> 
>>> 
>>> 
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值