一、封装一个功能
1.容器是对数据的封装、函数是对语句的封装、类是对方法和属性的封装
2.函数(function)程序中实现明确功能的代码段可以封装成一个函数,以便复用(reuse)。
3.定义与调用函数
3.1定义函数:
用def语句创建一个函数,用return关键字指定函数返回的值。语法如下图:
def <函数名> (<参数表>): #def后面是一个函数名然后是一个圆括号,参数写在圆括号中,如果没有参数圆括号也要写上
<缩进的代码段>
return <函数返回值>
#定义一个函数
def printme(str):
print(str)
return
3.2调用函数语法如下图:
<函数名>(<参数>)
无返回值:<函数名>(<参数表>)
返回值赋值:n = <函数名>(<参数表>)
#定义一个函数
def printme(str):
print(str)#打印任何传入的字符串
return
#调用函数
printme("我要调用自定义函数") #函数名圆括号里面填上参数
printme("我要你再次调用函数")
#输出
F:\j\venv\Scripts\python.exe F:/j/demo5.py
我要调用自定义函数
我要你再次调用函数
Process finished with exit code 0
3.3函数的定义和调用实例如下图:
def sum_list(alist): #定义一个带参数的函数
sum_temp = 0 #求和变量
for i in alist:
sum_temp+=i #累加循环
return sum_temp #函数返回值
print(sum_list) #查看函数对象sum_list
my_list = [123,45,67,89,100]
my_sum = sum_list(my_list)#调用函数,将返回值赋值给my_sum这时上面的(alist)参数列表已经指向了(my_list)
print("sum of my list:%d" % (my_sum,))#打印输出my_sum列表的累加之和
输出
F:\j\venv\Scripts\python.exe F:/j/demo5.py
<function sum_list at 0x0000000001E8E2F0>
sum of my list:424
Process finished with exit code 0
4.变量的作用区域
4.1局部变量(local variable):在函数内部定义的参数以及变量,只有在该函数定义范围内有效,函数外边无法访问到。如下图所示:
def addnum(num1,num2):
result = num1+num2 #这个result是属于addnum函数的局部变量,在函数之外无法引用
return result
print(result)
输出
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
print(result)
NameError: name 'result' is not defined
#结果报错说result没有被定义
4.2全局变量(Global variable):在函数外部定义的,作用区域是整个代码段如下图:
def addnum (num1,num2):
result = num1+num2
return result
num1 = 5 #num1和num2这两个变量都是在是函数addnum之外定义的所以它的作用区域为整个代码段
num2 = 10
print(addnum(num1,num2))
输出
F:\j\venv\Scripts\python.exe F:/j/demo5.py
15
Process finished with exit code 0
4.3 global关键字:在函数内部使用与全局变量同名的变量时,若未在函数内进行定义,则使用全局变量的值。一旦在函数内部进行定义,python会在函数内部创建一个局部变量,与全局变量就不相关了,使用global关键字可以在函数中改变全局变量的值。如下图所示:
num1 = 1
num2 = 2
def addnum():
num1,num2 = 2,3#在函数内部定义两个变量并赋值,注意如果没有这句代码,那么python语言就会在该作用域中找不到的情况下向外面去寻找即寻找全局变量num1和num2值为1,2最后调用addnum函数时的结果就1+2=3
return(num1+num2)#即使前面我们已经设定了num1和num2的值为1,2,但是这里num1和num2是在函数内部的赋值的所以它是一个局部变量,所以后面调用addnum函数时它返回值依然是2+3=5
print(addnum())
print(num1,num2) #这里的num1和num2是函数外面的变量 即全局变量所以它们的值是前面设定的1,2
def addnum():
global num1,num2 #虽然这里面global后面的num1和num2是在函数内部,但是因为加了global关键字所以它们是代表了外面的全局变量的num1和num2
num1,num2 = 2,3 #这里的num1和num2是全局变量num1和num2它们以前的值为1,2现在重新给它们赋值为2,3改变全局变量的值
return(num1+num2)
print(addnum())
print(num1,num2)
输出
F:\j\venv\Scripts\python.exe F:/j/demo5.py
5
1 2
5
2 3
Process finished with exit code 0
5.函数小技巧:map()函数
5.1 map函数map的意思为映射的意思,有时候需要对列表中每个元素做一个相同的处理,得到新的列表,例如:所有数据乘以3、所有字符串转换为整数、两个列表对应值相加语法如下图:
map(func,list1,list2....) #将一个函数传进去
#函数func有几个参数,后面跟几个列表
5.2map函数的基本用法举个例子如下图所示:
#一个列表中的元素处理
num = [10,20,40,80,160] #创建两个列表并且每个列表都包含5个元素
lst = [2,4,6,8,10]
def nul3(a): #设定一个函数并设置一个参数(a)
return a*3 #返回参数乘以3之后的值
print(list(map(nul3,num))) #引用map函数将nul3函数和num列表传进去得到一个生成器,这个生成器包含了num列表中每个元素乘以3的值然后转换成列表输出
#两个列表中的元素处理
def atob(a,b): #设定一个函数atob并设置两个参数
return a + 1/b #返回参数a加b分之一的值
print(list(map(atob,num,lst))) #前面设置了两个参数后面就必须跟两个列表,那么这时参数a和b分别指向了列表num和lst,再将这两个列表计算的返回值转换成列表进行输出
输出
F:\j\venv\Scripts\python.exe F:/j/demo9.py
[30, 60, 120, 240, 480]
[10.5, 20.25, 40.166666666666664, 80.125, 160.1]
Process finished with exit code 0
5.3函数小技巧:匿名函数lambda
5.3.1 有时候函数值用一次,其名称也就不重要,可以无需费神去def一个,可以用lambda表达式生成一个,lambda表达式会返回一个匿名函数。语法如下图:
lambda <参数表>:<表达式> #参数表中的参数可以是一个也可以是多个
5.3.2引用匿名函数lambda举个例子如下图:
num = [10,20,40,80,160]
lst = [2,4,6,8,10]
print(list(map(lambda a:a*3,num)))#引用lambda函数生成一个匿名函数,函数后面设一个参数a然后冒号后面跟一个表达式最后一个列表,这样参数a指向了列表num然后最列表中的每个元素进行计算转换成列表输出
print(list(map(lambda a,b:a+1/b,num,lst)))#引用lambda函数生成一个匿名函数,函数后面设两个参数a和b然后冒号后面跟一个表达式最后两个列表,参数a,b分别指向了列表num和lst两个列表进行计算之后输出
输出
F:\j\venv\Scripts\python.exe F:/j/demo9.py
[30, 60, 120, 240, 480]
[10.5, 20.25, 40.166666666666664, 80.125, 160.1]
Process finished with exit code 0
网友评论