函数的基本操作
定义函数
1
2
3
| #使用def来定义一个函数myfun,来实现x的累加
def myfunadd(x):
x = x + 1
|
位置参数
1
2
3
4
5
6
7
8
9
10
11
| #位置参数
def func(a,b,c):
return"".join((c,b,a)) #使用join表示在后面添加字符串
print(func("我", "是", "你"))
#帮助函数中的/:代表着/的左边不能指定参数的名字,只能指定其值,但是/的右边就无所谓了。
#我们还可以用*来代替/ *的左边不能用参数的名字,但是右边要用
def fun(a,*,b,c):
print(a,b,c)
fun("d","e","g") #error,第二第三个参数要加参数名字
fun("d",b="e",c="g") #d e g
|
收集参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| #收集函数即只指定一个参数,然后允许调用函数时传入任意数量的参数。在函数的形式参数之前加上*号即可
def myfun(*var):
print("一共传入了{}个参数".format(len(var)))
print("第二个参数是{}".format(var[1]))
#注意只能指定一个带*号的参数,要是需要其他的形式参数,那么需要用到关键字参数。
def myfun2(*var,a,b):
print(var,a,b)
myfun2("Deng",a="Gao",b="zheng") #像这样a和b使用了关键字参数即可
#在形式参数之前加上两个*代表着传入的参数可以自动转换成为字典
def myfun(**var):
print(var) #
myfun(a=1,b=2,c=3) #('a':'1','b':'2','c':'3')即为字典形式
#综合
def xing(a,*b,**c):
print("a=",a,"b=",b,"c=",c)
xing("deng",1,2,3,c="zheng")
|
#!!!个人总结:1.对于没有星的参数来说,在传入参数时只要出现“,”,那么就会自动跳到下一个参数!2.对于有一个星的参数来说,不能使用关键字参数来传递参数给它!!!否则会报错,它会自动收集剩下的数,即捡破烂。3.对于有两个*的参数来说,你必须要使用关键字参数来传递,因为它会让你的数变成字典!
综上:没有星无所谓使不使用关键字参数,有一个星不能使用关键字参数,两个星必须使用关键字参数。
解包参数
1
2
3
4
5
6
7
8
9
10
11
| #先定义参数的值,然后再传递参数
var = (1,2,3)
def fun(a,b,c):
print(a,b,c)
fun(*var) #1,2,3 这样就是解包啦!
#字典的解包
var = ('a' = '1','b' = '2','c' = '3')
def fun(a,b,c):
print(a,b,c)
fun(**var)
|
闭包
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| #在函数中定义函数
def funA():
x = 888
def funB(): #这个funB函数的作用域就在funA中,外部调用funB会报错的。
print(x)
funB()
def outer():
x=0
y=0
def inner(x1,y1):
print(x,y)
#使用下列语句可以调用inner函数!
outer()() #第一个括号表示调用outer函数,第二个括号表示inner函数
|
回调函数
1
2
3
4
5
6
| #函数中函数的名称可以做参数
def avg(x,y):
return (x+y)/2
def f(函数名,x,y):
函数名(x,y) #我们这里把参数的名字当中函数名
f(avg,2,4) #这里实现的就是avg(2,4) = 3 |