ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

20201112-1 函数式编程之参数详解2

2020-11-12 15:31:53  阅读:204  来源: 互联网

标签:name age 编程 20201112 详解 参数 kwargs print def


  3. 默认参数 3-1-1 def test(x,y=2):     print(x)     print(y) # 在写形参的时候,提前赋值,等于 2 了  test(1) --->  1 2 没有赋值给y,因为 y 是默认等于 2   3-1-2 可以赋值吗? def test(x,y=2):            print(x)     print(y) test(1,y=3)          # 关键字调用 --->  1 3   3-1-3 def test(x,y=2):     print(x)     print(y) test(1,3)           # 位置调用 --->  1 3 # 默认参数特点:调用函数的时候,默认参数非必须传递 # 用途: # 1. 默认安装值   比如,安装软件,默认一键安装,和自定义安装的区别 # 2. 比如连接数据库端口号   3-1-4  1. 默认安装值 def test(x,soft1=True,soft2=True):     print(x) 2. 比如连接数据库端口号 def conn(host,port=3306):     pass   4. 参数组 def test():     pass # 前面提到的,位置参数,关键字参数,默认参数;参数定义好后,都有一个特点,调用个数超过形参,就报错,少了也不行 # 默认参数在参数调用时,可有可无 需求:实参数目不固定,形参应该如何定义? 参数组的定义:*args (变量名随意) 方式1 def test(*args):     print(args) test(1,2,3,4,5,5) # 形参以 *开头,定义一个变量名 方式2 def test(*args):     print(args) test(*[1,2,4,5,5])     # *args = *[1,2,3,4,5] 会变成元组 -→ args = tuple([1,2,3,4,5]) # *代表一个功能,是一个功能代号   4-1 将* 和位置参数结合起来 def test1(x,*args):     print(x)     print(args) test1(1,2,3,4,5,6,7) --->  1 (2,3,4,5,6,7) 应用:函数在定义时,业务发展一段时间后,参数可能会不够,这样只能改源代码,为了避免不多传一个参数就改源代码就会用到了,以后会经常用到 元组就是 只读列表   4-2 可以传字典吗? def test2(**kwargs):     print(kwargs) test2(name='gabriel',age=8,sex = '?')     # name相当于 key  gabriel 相当于 value;可以无限向下传 # 会将 三个 关键字参数传给 kwargs --->  {'name': 'gabriel', 'age': 8, 'sex': '?'} # 这就是把关键字转换成字典的方式 存放起来 # **kwargs: 把关键字参数,转换成字典的方式   4-2-1 可以跟位置参数吗? def test2(**kwargs):     print(kwargs)     print(kwargs['name'])     print(kwargs['age']) test2(**{'name':'gabriel','age':8}) --->  {'name': 'gabriel', 'age': 8} gabriel 8   4-2-2 可以跟位置参数吗? def test3(name,**kwargs):     print(name)     print(kwargs) test3('gabriel') --->  gabriel {} # name 必须指定一个值,kwargs 需要指定一个吗?   4-2-2-1 def test3(name, **kwargs):     print(name)     print(kwargs) test3('gabriel','xxx') # 'xxx' 是位置参数,不是关键字参数,所以会报错,相当于给 name 赋值两个 # 所以,应该用 关键字的方式去写

 

4-2-2-2 def test3(name,**kwargs):     print(name)     print(kwargs) test3('gabriel',age=18000,sex='N') ---> gabriel {'age': 18000, 'sex': 'N'} # 这是和位置参数结合   4-2-3 如果和默认参数加一起 参数组有两种方式 *args 接收多个参数,转成元组的形式 **kwargs 把关键字参数,转换成字典的方式 # 可以把默认参数写在后面吗?不可以!!一定要放前面! 参数组一定要往后放!! def test4(name,age=10000,**kwargs):     print(name)     print(age)     print(kwargs) test4('celestial',sex='N',hobby='sleep') ---> celestial 10000 {'sex': 'N', 'hobby': 'sleep'}

 

4-2-3-1 def test4(name,age=9999,**kwargs):     print(name)     print(age)     print(kwargs) test4('gabriel',sex='N',hobby='fly',age=99999999) ---> gabriel 99999999 {'sex': 'N', 'hobby': 'fly'} # 结果同样可行,给默认参数赋值时,默认参数可以不赋值,可以以位置参数的方式赋值,也可以关键字赋值对应   4-2-3-2 def test4(name,age=0,**kwargs):     print(name)     print(age)     print(kwargs) test4('gabriel',99999,sex='N',hobby='sleep',age=10000) ---> Traceback (most recent call last):   File "f:/Visual Studio Code/PyFiles/MML/Management_Project_2/blank_module_name/tobp_2.py", line 5, in <module>     test4('gabriel',99999,sex='N',hobby='sleep',age=10000) TypeError: test4() got multiple values for argument 'age' # 多个值给 age了,给默认参数赋值,两种方式,位置参数已经对应了,关键字参数又给对应了一遍,所以报错了   4-3 如果全部放在一起弄呢? def test4(name,age=0,*args,**kwargs):     print(name)     print(age)     print(args)     print(kwargs) test4('gabriel',age=10000,sex='N',hobby='sleep') ---> gabriel 10000 () {'sex': 'N', 'hobby': 'sleep'} # *args 接收的是位置参数,不能接收关键字参数 # *args 接收 N 个位置参数,转换成元组的形式 这里的 *args 无法接收位置参数,所以直接变为 空 sex='N',hobby='sleep' 给 kwargs 了,所以是生成字典 位置参数,不能写关键字参数后面

标签:name,age,编程,20201112,详解,参数,kwargs,print,def
来源: https://www.cnblogs.com/azxsdcv/p/13964190.html

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

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

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

ICode9版权所有