如下是李刚老师《疯狂python讲义》的学习笔记
如有侵权,联系删除
努力是信仰,坚持是脚步,代码改变世界!
定义函数:
形式:>>>def 函数名(形参1,形参2):
函数主体
return 返回值1,返回值2
return返回值:可以返回值,也可以返回表达式,如
>>>return x if x>y else y
若直接返回值,Python会自动将多个返回值封装成元组,当然也可使用多个变量接受函数返回的多个值,如
>>>s,avg = my_def(my_list)
为函数提供解释文档:在自定义的函数中,同时协商''' '''的注释,然后使用如下命令输出注释
>>>pring(me_def._doc_)
也可以使用如下命令得到注释
>>>help(my_def)
神奇的递归调用函数:有一数列:f(0)=1,f(1)=4,f(n+2) = 2*f(n+1)+f(n),求f(10)的值
>>>def fn(n):
if n == 0:
return 1
elif n == 1:
return 4
else:
return 2*fn(n-1)+fn(n-2)
>>>print("fn(10)的结果是:",fn(10))
当一个函数不断调用自身时,必须在某个时刻函数的返回值是确定的,即不再调用它自身,因此,在定义递归函数时:递归一定要向已知方向进行。
位置参数和关键字参数:如定义函数 >>>def my_def(width,height)
调用时:>>> my_def(3,4) 这种调用之后,相当于width=3,height=4,按位置给变量赋值就是位置参数
调用时:>>>my_def(width=3,height=4),这种调用,就是关键字参数,直接指明赋值给哪个变量,
从而,关键字参数可以交换位置,即可以my_def(height=4,width=3)
关键字参数和位置参数混用时,规定:位置参数在前,关键字参数在后,
参数默认值:就是相当于当你没有给这个参数赋值时,它自己给自己赋个值,当你给它赋值时,它使用你赋的值,同样,位置参数在前,关键字参数在后
>>>def say_hi(name,message='欢迎来到疯狂软件")
个数可变的参数:*形参 就是在调用函数时传入任意多个参数,python允许在形参前面添加一个*,多个参数值就被当作元组传入。
>>>def test(*books,num)
>>>test('疯狂','讲义',num = 1)
这里就是说明一定要在形式上阻止*的作用,不然它就默认把所有值都赋给了*books了。
**形参 这里是传入字典
>>>def test(x,y,z=3,*books,**scores):
print(x,y,z)
print(books)
print(scores)
>>>test(1,2,"疯狂","讲义",语文=90,数学=97)
1 2 疯狂
(讲义)
{'语文':90,'数学':94}
逆向参数收集:在个数可变的参数那里,是在定义函数那里使用了*,而这里是在调用时使用*,作用是,将该值分成一部分一部分的拆开赋给函数
>>>def foo(name,*nums):
print("name参数:",name)
print("nums参数:",nums)
>>>my_tuple = (1,2,3)
>>>foo(*my_tuple)
name参数:1
nums参数:(2,3)
函数的参数传递机制:程序将参数传入函数,函数里被传入的参数怎么样不会影响程序中的参数,但是要注意字典,字典中key和value存入内存两个地方,将字典传
入函数,函数中对复制品key的操作,会影响value的,,传入的是key
变量作用域:变量作用域感觉看不懂,这里局部变量和全局变量,感觉是对那些没有参数传入的函数使用的,使用python程序验证书上的,并没有出现书上的错误。????
局部函数:就是函数内再定义函数,默认情况下,函数内的函数只在该函数中有效
使用函数变量:相当于将函数赋给一个变量,这个变量相当于这个函数的新名字
>>>def jia(a,b):
c = a+b
return c
>>> my_fun = jia
>>>print(my_fun(2,3))
使用函数作用函数形参:相当于把一个函数传入另一个函数,另一个函数操作时,也使用该函数的功能
>>>def show(a):
print(a)
>>>def my_fun(data,fn):
fn(data)
>>>my_fun(2,show)
使用函数作为返回值:就是将函数中的函数的返回值返回
>>>def get_math_func(type):
def square(n):
return n*n
def cube(n):
return n*n*n
if type == "square":
return square
else:
return cube
局部函数和lambda表达式:局部函数就是在函数内定义的函数,lambda就是将定义的单行函数进行简写
形式: lambda [parameter_list]:表达式
如: x = map(lambda x:x*x,range(8))