美文网首页Python全栈工程师
14-3 keyword-only参数和参数解构

14-3 keyword-only参数和参数解构

作者: BeautifulSoulpy | 来源:发表于2019-07-23 10:48 被阅读3次

你有多自律,就有多自由。没有特别幸运,请先特别努力。失败不是因为跌倒,而是从来不敢奔跑!
别让过去决定你的未来!

外面=好附近最好有空格,在括号里面最好挨着一起写;
t = 1     ;(x=100)

# 打印值和返回值是两个概念;
print(1)
return(x)

1.参数槽(keyword-only参数)

特点

  1. 没缺省值必须得传参数
    2.*之后的参数,必须以关键字参数的形式传递,称之为参数槽
没缺省值必须得传参数
def fn(a,b,c):
  print(a,b,c)

fn(a=1,b=2,c=3)

*之后的参数,必须以关键字参数的形式传递,称之为参数槽;
def fn(*,a,b,c):
  print(a,b,c)

fn(a=1,b=2,c=3)

参数槽之坑:
1. *之后必须有参数
2. 非命名参数有默认值时,命名参数可以没有默认值
3. 默认参数应该在每段参数的最后
4. 使用参数槽时,不能使用可变位置参数,可变关键之参数必须放在命名参数之后

2.keyword-only的两种形式:
fn(*args,x,y):
fn(*,x,y):

1. keyword-only
def fn(*args,x):
    print(x)
    print(args) 

fn(3,5,x=7)  | 7   (3, 5)

2. keyword-only + 缺省值  可以改变这种用法;
def fd(*args,x=100):
    print(x)  
    print(args)    
#必须给出缺省值;
fd(3,5)   |     100   (3, 5)

3. **kwargs 只能放到最后(语法)
#可以理解为kwargs会截获所有的关键字参数,就算你写了x=5,x也永远得不到这个值,所以语法错误

def ff(**kwargs,x):    #错误形式
    print(x)
    print(kwargs)

keyword-only 参数的另一种形式:
add(*,x,y):
    print(x)
    print(y)
 最常用的函数标准形式:
def connect(host='localhost',port='3306',user='admin',passwd='admin',**kwargs):
    print(host,port)
    print(user,passwd)
    print(kwargs)

connect(db='cmdb')
--------------------------------
localhost 3306
admin admin
{'db': 'cmdb'}

connect(host='192.168.1.123',db='cmdb')
-----------------------------------------------------
192.168.1.123 3306
admin admin
{'db': 'cmdb'}

connect(host='192.168.1.123',db='cmdb',passwd='mysql')
-----------------------------------------------------------------------
192.168.1.123 3306
admin mysql
{'db': 'cmdb'}

2.函数参数解构

必须作为函数的参数时,才可以解构;
参数 必须是可迭代对象

  1. 给函数提供实参的时候,可以在集合类型前使用或者*,把集合类型的结构解开,提取出所有元素作为函数的实参
  2. 非字典类型使用*解构成位置参数(一维数组)
  3. 字典类型使用**解构成关键字参数(二维数组)
def add(x,y):
    return(x+y)

add(4,5),add((4,5)[0],(4,5)[1]),add(*[4,5]),add(*(4,5)),add(*{4,5})
----------------------------------------------------------------------------------
(9, 9, 9, 9, 9)

add(*'45')   #作为函数的参数时,才可以解构;  
--------------------------
'45'

# 参数不能多也不能少;
add(*range(100,102))      |   201


# 函数参数为字典时 解构:
add(*{'x':100,'y':200})   # add('x','y')
--------------------------------------
'xy'

add(**{'x':100,'y':200})   # add(x=100,y=200)
---------------------------------------------------------
300

add(*{'a':100,'b':200})  #add('a','b')'
------------------
'ab'

def ad(x,y,**kwargs):
    return(x+y)
ad(**{'a':100,'b':200,'x':300,'y':400})  #add(a=100,b=200,x=300,y=400)

# 函数参数解构易错点:
def add(*iterable):  #(range(10),)
    result=0
    for x in iterable:
        result += x # 0+range(10)
    return(result)
----------------------------------------------------
add(*(1,2,3))

add(*range(10))    
# 1.错误写法:把元祖解构后,可迭代+加法
#add(range(10))   # range(10) 生成的是一个元祖;

相关文章

  • 14-3 keyword-only参数和参数解构

    你有多自律,就有多自由。没有特别幸运,请先特别努力。失败不是因为跌倒,而是从来不敢奔跑!别让过去决定你的未来! 1...

  • Python函数参数匹配模型通用规则keyword-only参数

    概述 Python3对函数参数的排序规则更加通用化了,即Python3 keyword-only参数,该参数即为必...

  • ES6系列 (十)解构参数

    疑惑: 如何解构数组参数? 如何解构对象参数? 如何模拟命名参数? 如何创建别名参数? 解构数组参数 假如有一个 ...

  • ES6-函数参数的赋值

    函数参数的解构赋值: 函数参数解构赋值的默认值: 函数参数解构赋值的默认值undefined:

  • 函数扩展

    1、参数给定默认值 2、剩余参数 3、函数传参数的同时可以解构 3.1数组解构 3.2对象解构

  • es6

    解构赋值 默认值 解构赋值 解构默认值和参数默认值的区别

  • ES6学习笔记

    1. 变量的解构赋值 数组解构 对象解构 2. 箭头函数,rest参数 箭头函数 rest 参数 3. 数组: 扩...

  • def 函数

    定义 调用 默认参数 关键子参数 不定参数 多返回值 拆包/解构

  • 2019-01-29

    5.函数参数的解构赋值 函数的参数也可以使用解构赋值 函数add的参数表面上是一个数组,但在传入参数的那一刻,数组...

  • ES6特性

    箭头操作符 类的支持 增强的对象字面量 字符串模板 解构 参数默认,不定参数, 拓展参数 默认参数值 不定参数 拓...

网友评论

    本文标题:14-3 keyword-only参数和参数解构

    本文链接:https://www.haomeiwen.com/subject/eyeflctx.html