函数(简化代码、易更改):
1、定义函数def + 函数名(****) + ‘:’。
2、函数定义形式决定了函数调用的方式。
def function(x,y):
print('x is ',x)
print('y is ',y)
return x + y
>>> function(1,2)
x is 1
y is 2
3
3、return表示返回值(结束这个函数)。返回值可以赋值给变量。
>>> a = function(1,2)
x is 1
y is 2
>>> a
3
4、当函数不写return时,默认返回None。
5、function表示函数整体,function(1,2)表示一个值。
>>> type(function), type(function(1,2))
x is 1
y is 2
(<class 'function'>, <class 'int'>)
6、改变一个函数名。
>>> d = function
>>> d(3,4)
x is 3
y is 4
7
7、
def f1(x, y = 10):
print(x)
print(y)
>>> f1(1)
1
10
#x为必备参数,y为默认参数。
>>> f1(1, 2)
1
2
#默认参数可以更改。
def f1(x, y ):
y = 10
print(x)
print(y)
会报错,y不是默认参数。
8、
def f1(x, y = 10, *args, **kwargs):
print(x)
print(y)
print(args)
print(kwargs)
>>> f1(20,'a',30,40,50,60,70)
20
a
(30, 40, 50, 60, 70)
{}
#*args 不定长参数,超过的单个元素都会被元组接受。(args可以换)
>>> f1(20,'a',30,40,50,60,70,a = 1, b = 2)
20
a
(30, 40, 50, 60, 70)
{'a': 1, 'b': 2}
#kwargs 不定长参数, 键值对的形式(字典),只能放在最后的位置。
9、正确传入函数元组和字典参数
>>> f1(10,20,ta,di)
10
20
((1, 2, 3, 4, 5), {'a': 1, 'b': 2, 'c': 3})
{}
>>> f1(10,20,*ta,**di)
10
20
(1, 2, 3, 4, 5)
{'a': 1, 'b': 2, 'c': 3}
10、定义在函数内部的变量是局部变量,不能在外部使用。
11、全局变量如果想在函数内更改,要先把函数global(可以直接使用全局变量)。
variable = 223
def f3():
global variable
variable += 1
return variable
f3()
print(variable)
224#variable发生了改变。
12、函数内部nonlocal
def f4():
var1 = 10
def f5():
nonlocal var1
var1 += 1
print('***',var1)
return var1
f5()
print('f4 is var1', var1)
return var1
13、函数里嵌套的函数和变量都称为闭包,想要使用闭包里的函数,如下。
def f4():
var1 = 10
def f5():
nonlocal var1
var1 += 1
print('***',var1)
return var1
return f5
>>> a = f4()
>>> a
<function f4.<locals>.f5 at 0x0000014CFB700160>
>>> a()
*** 11
11
14、递归函数(自己调用自己):
def r(n):
if n <= 1:
return 1
else:
return n * r(n - 1)
15、匿名函数:
>>> g = lambda x: x + 1
>>> g(10)
11
相当于
def g(x):
return x + 1
16、
li = [2, 'a', 'b', 1]
>>> li.sort(key = lambda x:str(x)[0])
>>> li
[1, 2, 'a', 'b']
key把列表中的每一个元素传到匿名函数中去,再根据匿名函数返回的结果进行排序。
#[0]表示无论列表中元素有多少字母,只比较第一个字母。