函数式编程中的参数

函数式编程中参数使用的学习笔记

def test(x,y,z):

    print('参数x=',x)
print('参数y=',y)
print('参数z=',z)

test('a','b','z')
#实参与形参一一对应
'''
x= a
y= b
z= z
'''
print('---->')
test(y= 'a',x= 'b',z='c' )
#关键参数调用,跟形参位置无关
'''
x= b
y= a
z= c
'''
print('*********')
#关键字参数不能写在位置参数前面.如果写成test(4,z= 'a','b')运行时会报错
#关键字参数不能写在位置参数前面.
#关键字参数不能写在位置参数前面.
test(4,z= 'a',y='b')
'''
x= 4
y= b
z= a
'''
test([1,2],2,3)
'''
x= [1, 2]
y= 2
z= 3
'''
#这里的所有x、y、z都只是参数,而不是变量

def test2(x,y=0):
print(x,y)
print(y)

test2(1,9)
print('--->')
test2(1)
'''
1 9
9
--->
1 0
0
当调用函数test2时,把1赋值给了x,把9重新赋值给y
如果不重新赋值给y,那么y就用test2的默认y=0

默认参数的特点:在调用函数时,默认参数是非必须传递的参数,
即可以重新传递新的参数,也可以使用原有函数的参数
'''
def test3(x,z,y=2):
print(x)
print(y)
print(z)

test3(1,3)
'''
1
2
3
如果是test3是 def test3(x,y=2,z):
同样test3(1,3)时,系统会报错,这是因为
关键字参数不能写在位置参数前面,是语法错误,
而不是因为1赋值给X,3重新赋值给y,这样子缺少第三个参数
def test3(x,y=2,z):
print(x)
print(y)
print(z)
test3(1,3,4)
SyntaxError: non-default argument follows default argument
'''
def test4(*u):
print(u)
test4(1,2,3,4,5,5,5)
'''
(1, 2, 3, 4, 5, 5, 5)
用*开头,则是把实参变成元组
'''
test4(*[1,2,9])
'''
(1, 2, 9)
传列表作为参数也要加一个 * 号,还是返回一个tuple
'''
def test5(x,*agrs):
print(x)
print(agrs)
test5(1,2,3,4,5,6,7,8,9,)
'''
1
(2, 3, 4, 5, 6, 7, 8, 9)
'''
def test6(**kvargs):
print(kvargs )
test6(name='JC',age='34')
'''
{'name': 'JC', 'age': '34'}
两个 * 号把N个关键字参数转换成一个字典
'''

#*args:接收N个位置参数,转换成元组的方式
#**kwars:接收N个关键字参数,转换成字典的方式

def test7(name,age=34,*args ,**kwargs ):
print('name是',name)
print('age是',age)
print(args)
print(kwargs )

test7('jc',34,4,349,job='IT',salary=6000)
'''
name是 jc
age是 34
(4, 349)
{'job': 'IT', 'salary': 6000}
当*args被赋参数时,默认参数age=34要在位置参数上重新赋值,而且不能使用关键字参数赋值,
否则系统会先使用位置参数赋值给age,然后在后找到关键字参数age=(关键字参数‘age=’必需放在位置参数后面)时,
会造成age接收到2个值产生错误。
'''
posted @ 2020-05-11 02:20  逝水无痕L  阅读(480)  评论(0)    收藏  举报