可变形参即是参数可以任意:
// An highlighted block
def hello(*name):
print(name)
hello("10")
hello("许嵩")
运行结果如下:
('10',)
('许嵩',)
字典形参表示传给函数的参数是字典类型(键值对):
// An highlighted block
def hello(**name):
print(name)
hello(year='2020',month=10,day=10)
运行结果如下:
{
'year': '2020', 'month': 10, 'day': 10}
注意:如果函数定义里面既有可变形参,又有字典形参,则字典形参必须位于可变形参的后面!
用两个“ * ”来解封字典,用一个“ * ”来解封其他对象:
// An highlighted block
def f(a,b):
print(a+b)
ab = [3,5]
f(*ab)
运行结果如下:
8
ab = [3,7]
l = [i for i in range(*ab)]
print(l)
运行结果如下:
[3, 4, 5, 6]
d = {
"name1":"许嵩","name2":"周杰伦"}
def f(name1,name2):
print(name1)
print(name2)
f(**d)
运行结果如下:
许嵩
周杰伦
def f():
'''
这是函数文档
'''
print("这是一个函数")
return 1
print(help(f))
运行结果如下:
f()
这是函数文档
None
将函数放在"容器"内:
// An highlighted block
def square(x):
return x*x
def cube(x):
return x*x*x
funcs = {
'sq':square,
'cb':cube,
}
x = 2
print(square(x))
print(cube(x))
print("-----容器内-----")
for func in funcs:
print(funcs[func](x))
运行结果如下:
4
8
-----容器内-----
4
8
// An highlighted block
def square(x):
return x*x
def cube(x):
return x*x*x
funcs = {
'sq':square,
'cb':cube,
}
x = 2
func = [square,cube]
for fun in func:
print(fun(x))
运行结果如下:
4
8
在一个函数中返回另一个函数的名字:
// An highlighted block
def f(a):
print(a)
def f1():
return f
a = f1()
a(0)
运行结果如下:
0
在一个函数中定义并调用另一个函数:
// An highlighted block
def Square(x):
def f():
return x*x
y = f()
return y*x
print(Square(5))
运行结果如下:
125
注意对比二者的异同,nonlocal相当于声明全局变量。
// An highlighted block
def Square(x):
def f():
#nonlocal x
x = 2
return x*x
y = f()
return y+x
print(Square(5))
运行结果如下
9
def Square(x):
def f():
nonlocal x
x = 2
return x*x
y = f()
return y+x
print(Square(5))
运行结果如下
6
// An highlighted block
def square(x):
return(x*x)
def SquList(L,fun):
for e in L:
print(fun(e),end=" ")
SquList([2,3,4,5],square)
运行结果如下
4 9 16 25
相当于定义了一个函数
// An highlighted block
add = lambda x,y:x+y//add是函数名
print(add(3,5))
运行结果如下 8
*map第二个形参接受多个可迭代对象,函数原型:map(function,iterable),iterable是可变形参,function是函数,返回一个迭代器对象
:
// An highlighted block
def Square(x):
return x*x
l = [1,2,3,4,5]
ret = map(Square,l)//相当于把l中的所有元素都进行了Square操作
print(list(ret))
#二者都可以构造,但只可以构造一次
print(tuple(ret))
运行结果如下:
[1, 4, 9, 16, 25]
()
// An highlighted block
ret = map(lambda x,y:x*y,[1,4,3],[3,5,2,6])
print(tuple(ret))
ret = map(lambda x,y:(x*y,x+y),[1,4,3],[3,5,2,6])
print(tuple(ret))
运行结果如下:
(3, 20, 6)
((3, 4), (20, 9), (6, 5))
filter 返回被判断为True的元素,函数原型为:filter(function of None,interable)
// An highlighted block
a = [i for i in range(-5,5)]
ret = filter(lambda x:x<0,a)
print(list(ret))
运行结果如下:
[-5, -4, -3, -2, -1]