ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

函数、参数

2022-03-29 11:33:21  阅读:127  来源: 互联网

标签:函数 args 关键字 参数 kwargs print def


 

#为解决可读性差,重复代码

#定义格式
"""
    def 函数名(形参):
        函数体
        return 返回值/结束函数,多个值以元组形式返回

#执行
函数名(实参)#需要和函数形参数量一致
"""


#1、示例
def my_len(OBJ):
    count = 0
    for i in OBJ:
        count += 1
    return count

a = [1, 2, 3]
print(my_len(a))
#2、关键字参数 直接给形参赋值, 但位置传参一定在最后
def Test1(a, b, c):
    print(a, b, c)
    return a, b
#Test1(1, 2, b = 3) #报错,不能给中间形参关键字传参
Test1(1, c = 2, b = 3) #可以,最后的关键字参数顺序可变

#3、默认参数
def Test2(a, b, c = 110): #1、默认参数必须放在形参最后;2、不传取默认,传值覆盖默认值
    print(a, b, c)
Test2(1, 2) #1 2 110
Test2(1, 2, 3) #1 2 3

#!!!函数的默认参数是可变数据类型时,无论使用多少次默认参数,都是同一个(共用)
def L(a, list = []):
    list.append(a)
    return list

list1 = L(10)#没传使用默认参数
list2 = L(123, [])#传空列表后,默认参数被覆盖
list3 = L('a')#没传仍然使用默认参数,当前默认参数为[10]

print(list1, list2, list3)#[10, 'a'] [123] [10, 'a']


#4、动态参数,数量不确定或方便扩展,用 *args  **kwargs(args和kwargs是约定俗成的写法,不是必须用这两个变量名)
def Test3(*args, **kwargs):
    print("args", args)#(1, 2, 3)#接收位置参数,元组类型
    print("kwargs", kwargs)#{'x': 4, 'y': 5}#接收关键字参数,字典类型

Test3(1, 2, 3, x=4, y=5)

#!!!动态参数*args接收位置参数时,必须放在其他参数位置后,关键字参数之前;
"""!!!同理,**kwargs 也必须放在其他关键字参数之后,所以传参顺序是 (位置参数, *args, 关键字参数, **kwargs)"""
# def Test4(a, b, c='test',*args):
def Test4(a, b, *args, c='test'):
    print(a, b, args, c)

Test4(1, 2, 4, c='Test')#1 2 (4,) Test

#例
def Test5(*args):
    sum = 0
    for i in args:
        sum += i
    return sum

print(Test5(1, 2, 3, 5, 8))#19

 

#在函数的定义中, * 是聚合对象,所以如上 *args 接收多个参数
#在函数执行时, * 是打散可迭代对象,如下:
def Test6(*args, **kwargs):
    #接收位置参数,元组类型
    print("args", args)#args (1, 2, 3, 4, 5, 'x')
    print("*args", *args)#*args 1 2 3 4 5 x
    #接收关键字参数,字典类型
    print("kwargs", kwargs)#kwargs {'y': 5, 'z': 6}
    # print("**kwargs", **kwargs)#报错,print()函数不支持关键字参数

a = [1, 2, 3]
b = [4, 5]
c = {'x': 4}
d = {'y': 5}
e = {'z': 6}
Test6(*a, *b, *c, **d, **e)#这里实参的* 和 **为了标识传给不同类型的形参

 

标签:函数,args,关键字,参数,kwargs,print,def
来源: https://www.cnblogs.com/ggsdddup/p/16056643.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有