目录
知识点:
1、函数的定义和调用——什么是函数,有什么用和怎么用
2、参数——调用函数时的输入
3、匿名函数——lambda
4、作用域——变量的生效范围
1、定义函数的基本语法
def <函数名>(参数1,参数2,……,参数N):
<执行语句>
return<结果>
定义函数,使用def这个关键词作为开头。
然后空格,写上函数得名字。这个名字最好和该函数执行的功能相关。
函数名字后括号中的参数不是必须的。当没有参数时,可以留空。
执行语句是用来实现函数的功能的。需要缩进。
用return来结束一个函数。有返回值时,写上返回结果。没有结果时,写 return None
定义一个具有减法功能的函数。
def my_subtraction(minuend, subtrahend):
difference = minuend - subtrahend
return difference
测试一下是否正常
i=6;j=2
d = my_subtraction(i,j)
d
返回结果正常
再测试一下进行浮点数的减法计算
d2 = my_subtraction(7,2.0)
d2
返回结果正常,结果为浮点数
定义一个求绝对值的函数
def my_abs(x):
if x>=0:
return x
else:
return -x
使用表达式来作为参数,传入函数中。
a = 1; b=2
my_abs(a-b)
返回结果正确。
定义一个不需要参数的函数
def hello():
print('Hello World!')
返回结果正确
定义一个传回多个对象的函数。返回一个tuple容器
def my_arithmetic(x,y):
z1 = x+y
z2 = x-y
return z1, z2
返回结果正确
2、函数的参数
按位置传递参数
调用函数时,传入的函数一般按照位置顺序与形式参数绑定。
这种方法叫做“传递位置参数”
例如 my_subtraction(7,2.0),
7被赋值给minuend
2.0被赋值给subtrahend
如果写成my_subtraction(2.0,7)
则2.0被赋值给minuend
7被赋值给subtrahend
指定形式参数传递参数
my_subtraction(minuend=2, subtrahend=1)
或者:
my_subtraction(subtrahend=1,minuend=2)
在定义函数时指定参数的默认值
def my_print(arg1, arg2='World!'):
print(arg1, arg2)
返回结果:
以变量作为默认参数时,当变量发生改变,而没有再次作为参数传入函数时,函数依然使用原先的的变量值。
把变量重新传到进函数后,使用最新的变量值。
可选参数-参数的数量不固定时
使用容器类型作如(tuple, list, dict等)进行传递
def my_addition0(addend):
sum=0
for i in addend:
sum = sum+i
return sum
3、匿名函数
函数在Python中也是一个对象。
当我们把一个函数当作另一个函数的参数或返回值来传递时,使用匿名函数可以使代码看起来更简洁明了
使用lambda关键字来创建匿名函数。
语法:
lambda[arg1[,arg2,…,argN]]:expression
def greeting2():
print('Hellow world!')
greeting2()
greeting3 = lambda : print('Hello World!')
greeting3()
好了,匿名函数这篇和上一个可选参数,我觉得这两个地方,这本书写得很糟糕,我也看不太懂,这部分先跳过。
已经记录我的这两个知识盲点,回头换本教材补上。
4、作用域
在函数内部创建的变量为局部变量
在函数外部创建的变量为全局变量。
在函数中访问全局变量
函数中的本地变量(局部变量),外部不可见。
函数内部定义了局部变量y,
到了函数外部,调用失败,报错。
本地变量和全局变量相同时,函数只调用本地变量
在函数内部操作(修改)全局变量时,需要在变量前面加global声明
习题:
1、
函数permutation(x),把x的第一个元素和最后一个元素互换。
X是列表,属于可变对象。
所以经过内部元素的互换后,x的id不变。
Y被赋值为变换后顺序的x列表,id与x相同
Is,判断的是id,所以,输出结果为True
2、
3、不确定树木的形参,这本书写得不好,我也没学会,这题不做了。
4、写个fibonacci数列:
5,题目看不懂想问什么。
6、涉及到匿名表达lambda,这个部分这本书写得很差,我也没看懂