目录
1、定义及调用函数
1.1、定义函数
?1.2、return函数
2、参数
2.1、形参和实参
2.2、默认参数
2.3、关键字参数
2.4、收集参数
3、函数内部嵌套和闭包
3.1、全局变量和局部变量
3.2、global和nonlocal关键字
3.3、内部嵌套和闭包
?4、匿名函数
1、定义及调用函数
1.1、定义函数
定义一个函数:
①以def开头,后面跟上函数名,加上括号(括号里面可以放参数,也可以不放),最后以冒号结尾
②换行后,注意缩进,然后加上函数内容
③函数写完后,换行减一次缩进就结束
④调用函数直接用函数名加参数调用即可
def Myworld(name): #Myworld是函数名,name是参数
print(name + '我爱你')
print('永远永远')
Myworld('周杰伦') #调用函数Myworld
def number(a,b): #函数number
reulst = a + b
print(reulst)
number(1,1) #调用函数number
结果:
?1.2、return函数
>>> def number(a,b): #函数number
return (a+b) #返回值为a和b的和
>>> print(number(33,44)) #输出返回值
77
>>> def back():
return [1,'cat',3.14] #返回值为列表
>>> back()
[1, 'cat', 3.14]
>>> def back():
return 1,'cat',3.14 #返回值有逗号,所以默认为元组
>>> back()
(1, 'cat', 3.14)
2、参数
2.1、形参和实参
>>> def PrintMyword(name):
'函数定义过程中的name是形参' #函数文档
#因为ta只是一个形式,代表占据一个参数位置
print("输入进来的" + name + "叫做实参,因为ta是具体的参数值。")
>>> PrintMyword('tiger')
输入进来的tiger叫做实参,因为ta是具体的参数值。
>>> PrintMyword.__doc__
'函数定义过程中的name是形参'
2.2、默认参数
>>> def MoRen(canshu = '参数是默认的'): #canshu是默认参数
print(canshu) #默认参数相当于给参数一个初值
>>> MoRen()
参数是默认的
>>> MoRen('但是也可以改变')
但是也可以改变
2.3、关键字参数
>>> def say(n1,n2):
print('我说' + n1 +', 你做' +n2)
>>> say('东','西') #这个顺序是正确的
我说东, 你做西
>>> say('西','东') #但是输入不正确的时候
我说西, 你做东
>>> say(n2 = '西',n1 = '东') #这时候就可以用关键字参数
我说东, 你做西
2.4、收集参数
①当不确定参数的个数时,就可以用收集参数
②在参数前面加一个*号,就是收集参数
③这样输入参数的时候,就可以任意输入
④收集参数一般是以元组导入
>>> def test(*params): #这里的*params是收集参数
print('参数的长度是:',len(params))
print('第二个参数是: ',params[1])
>>> test(1,'周杰伦',2,3.14,2.88)
参数的长度是: 5
第二个参数是: 周杰伦
3、函数内部嵌套和闭包
3.1、全局变量和局部变量
全局变量:在模块内、在所有函数外面、在class外面,这就是全局变量 局部变量: 在函数内、在class的方法内(未加self修饰),这就是局部变量
在下面这个例子中,虽然都是count,但是一个是全局变量,一个是局部变量。由此可见,在函数中不能修改全局变量的值
>>> count = 5 #这个count是全局变量
>>> def funx():
count = 10 #这个count是局部变量
print(10)
>>> funx()
10
>>> print(count) #所以在函数中全局变量不能修改
5
3.2、global和nonlocal关键字
global关键字的作用是声明变量是全局变量
>>> count = 5
>>> def funx():
global count #global关键字,声明count是个全局变量
count = 10 #这时候全局变量count就被改变成10了
print(10)
>>> funx()
10
>>> print(count)
10
nonlocal关键字的作用是声明变量不是局部变量
>>> def fun1():
count = 5
def fun2():
nonlocal count #nonlocal关键字
count*= count
return count
return fun2()
>>> fun1()
25
3.3、内部嵌套和闭包
从名字上也可以看出来,就是在一个函数中嵌套另一个函数,并且在函数中调用
>>> def funx():
print('这里funx函数将被调用。。。')
def funy():
print('这里funy将被调用。。。')
funy()
>>> funx()
这里funx函数将被调用。。。
这里funy将被调用。。。
闭包是嵌套函数模型中的一个重要应用。外函数把内函数作为返回值返回,并且内函数中使用了外函数的局部变量,这样的情况下被返回的内函数就被称为闭包
>>> def fun1(a):
def fun2(b):
return (a+b) #在fun2中使用了fun1的参数a
return fun2 #返回和b的和
>>> fun1(5)
<function fun1.<locals>.fun2 at 0x0000027059B419D0>
>>> i = fun1(5)
>>> i
<function fun1.<locals>.fun2 at 0x0000027059B41B80>
>>> i(8) 第一种调用方法
13
>>> fun1(5)(8) 第二种调用方法
13
?4、匿名函数
lambda表达式:
先写lambda关键字,然后依次写匿名函数的参数,多个参数中间用逗号连接,然后是一个冒号,冒号后面写返回的表达式。
使用lambda函数可以省去函数的定义,不需要声明一个函数然后使用,而可以在写函数的同时直接使用函数。
使用场景:
1.需要将一个函数对象作为参数来传递时,可以直接定义一个lambda函数(作为函数的参数或返回值)
2.要处理的业务符合lambda函数的情况(任意多个参数和一个返回值),并且只有一个地方会使用这个函数,不会在其他地方重用,可以使用lambda函数
3.与一些Python的内置函数配合使用,提高代码的可读性
>>> def ds(x): #普通函数
return 2 * x + 1
>>> ds(5)
11
>>> g = lambda x : 2 * x + 1 #匿名函数,省略了函数名
>>> g(5)
11
>>> def add(a,b): #多个参数的普通函数
return a+b
>>> add(3,4)
7
>>> j = lambda a,b: a+b #多个函数的lambda表达式
>>> j(3,4)
7
lambda表达式作为参数 :
def sub_func(a, b, func):
print('a =', a)
print('b =', b)
print('a - b =', func(a, b))
sub_func(100, 1, lambda a, b: a + b) #lambda表达式作为参数
|