本文共 2805 字,大约阅读时间需要 9 分钟。
目录
一、函数定义
二、函数编写说明文档
三、函数的返回值
四、函数参数
1、位置参数与关键字参数
2、默认参数
3、可变长参数
4、可变关键字参数
五、作用域
1、全局变量
2、局部变量
3、global关键字
4、内嵌函数与 nonlocal关键字
5、闭包
6、递归
7、lambda匿名函数
一、函数定义
In [17]:def info_1(a,b,c): print(a) print(b) print(c)In [20]:info_1(1,2,3) # 赋值调用,这样就可以重复调用123
二、函数编写说明文档
def test(a,b): # test的函数解释就是‘用来实现两个数的求和’ ''' 用来实现两个数的求和 ''' print(a+b)
三、函数的返回值
def abs_1(x): # return返回一个值,下面的程序就不会执行 if x >=0: return(x) else: return(-x)In [32]:abs_1(-444)Out[32]:444
四、函数参数
1、位置参数与关键字参数
# 位置参数In [53]:def test(a,b,c): print(a) print(b) print(c)In [54]:test(1,2,3) # 1,2,3分别对应a,b,c123
# 关键字参数In [57]:test(a=2,b=1,c=3)213
关键字参数必须放在位置参数后⾯
使⽤名称指定的参数,有助于澄清各个参数的作⽤。这样,函数调⽤不再像下⾯这样怪异⽽神秘。
使⽤关键字参数使每个参数的作⽤清晰明了。另外,参数的顺序错了也没关系。 另外,关键字参数最⼤的优点还在于可以指定默认值。2、默认参数
def test(a,b,c=1): print(a) print(b) print(c)In [64]:test(b=1,a=2) # c=1是默认参数211
必选参数在前,默认参数在后,否则会报错。
默认参数降低了函数调⽤的难度,⽽⼀旦需要更复杂的调⽤时,⼜可以传递更多的参数来实现。⽆ 论是简单调⽤还是复杂调⽤,函数只需要定义⼀个。3、可变长参数
in[76]:def sum_2(*x_list): # 在参数前面加个* n=0 for i in x_list: n+=i return nIn [77]:sum_2(3,4,5,1,2,3,4,5,1,2,3)Out[77]:33
4、可变关键字参数
⼀个星号不会收集关键字参数,要收集关键字参数,可使⽤两个星号。
⼀个星号就是打包成元组传⼊进来,两个星号就是打包成字典传⼊进来。
In[79]:def test(**x): # 在参数前加两个* return xIn [80]:test(a=1,b=2,c=3,d=4) Out[80]:{ 'a': 1, 'b': 2, 'c': 3, 'd': 4}
五、作用域
1、全局变量和局部变量
# 全局作用域a=1# 局部作用域 n= 0即为局部变量def test_1(*args): n=0 for i in args: n+=i*i return n
在函数外边定义的变量叫做全局变量
全局变量能够在所有的函数中进⾏访问 如果在函数中修改全局变量,那么就需要使⽤global进⾏声明,否则出错 如果全局变量的名字和局部变量的名字相同,那么使⽤的是局部变量的,⼩技巧:强⻰不压地头蛇2、global关键字
# global关键字,全局变量不可变时使用a=100def test5(): global a # 调用全局变量 a+=1 print(a)test5()
3、内嵌函数与 nonlocal关键字
def outer(): num = 10 def inner(): nonlocal num # nonlocal关键字声明 num = 100 print(num) inner() print(num)outer()100100
4、闭包
In [111]:def funcX(x): def funcY(y): return x *y return funcYIn [112]:funcX(1)(2)Out[112]:2
5、递归
在程序上,递归实质上是函数调⽤⾃身的⾏为。
# 递归def caljie(n): if n>1: result = n* caljie(n-1) else: result=1 return resultIn [131]:caljie(3)Out[131]:6
6、lambda匿名函数
①基本语法
⽤lambda关键词能创建⼩型匿名函数,这种函数得名于省略了⽤def声明函数的标准步骤。
lambda函数的语法只包含⼀个语句。In [148]:f = lambda x:x*2 if x>5 else x/2 # else不能省略 可用else nonef(3)Out[148]:1.5
②使用场景
函数作为参数进⾏传递
Lambda函数能接收任何数量的参数,但只能返回⼀个表达式的值
匿名函数不能直接调⽤print,因为lambda需要⼀个表达式把函数功能屏蔽
import timetime.sleep(10) # 让程序休眠10秒print('------zZZ-------')
③作为高级函数的参数
a、map
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]In [152]:list(map(lambda x:x*2+10, a))Out[152]:[12, 14, 16, 18, 20, 22, 24, 26, 28, 30]
b、filter
In[153]:def f(x): if x % 2==0: # 函数⽤于过滤序列 return x list(filter(f,a))Out[153]:[2, 4, 6, 8, 10]
c、sorted
In[159]:sorted(a, key=lambda x: abs(5 - x)) #对所有可迭代的对象进⾏排序操作。Out[159]:[5, 6, 4, 4, 3, 3, 2, 8, 2, 1, 1, 10, 22, 55, 77]
转载地址:http://dxqbb.baihongyu.com/