1、函数
1.1 定义与调用
在Python中,定义一个函数要使用def
语句,依次写出函数名、括号、括号中的参数和冒号:
,然后,在缩进块中编写函数体,函数的返回值用return
语句返回。
例:
x=2;y=3
def mathtest(x,y):
a=10
t=10*x*y
return t #return后面的将不会被执行
if __name__=="__main__":
print(mathtest(x,y))
1.2 全局变量与局部变量
程序中的变量不是在任何地方都可以访问的,变量作用域决定了在程序的哪个部分可以访问哪个变量。
- 全局作用域:定义在函数之外的变量,可以在程序的任何位置使用。(或者在函数内部第一行在变量前global使变量变为全局作用域的变量)
- 局部作用域:定义在函数内部的变量,只能在声明函数的内部起作用,起的是局部作用域。
执行时,会有一个顺序,局部优先,外部最后,按照以下标识别,只有找不到,才从外部找。
例1:
info="address:" #全局变量 4
def fa(country): #调用变量 3
city="shanghai" #fa的局部变量2
def sun(area):
city="beijing" #sun 的局部变量 1
print(info+area+"."+city+"."+country)
sun("haidian")
print(city)
fa("china")
#address:haidian.beijing.china
#shanghai
例2:
global i
i=5
def f1():
#global i
i=10
print(i)
global j
j=20
print(j)
print(i)
f1()
print(i)
print(j)
#5 10 20 5 20
例3:
#global i
i=5
def f1():
global i
i=10
print(i)
global j
j=20
print(j)
print(i)
f1()
print(i)
print(j)
#5 10 20 10 20
2、lambda函数
平时创建函数的时候,都需要先定义,然后再设计好这个函数要返回什么东西。Lambda表达式可以简化这一过程,把一切浓缩进一行代码里;有了lambda,就可以告别过去繁琐的函数创建过程。
#传统方式
def fuction(a):
b=a*2
return(b)
fuction(2) #4
#Lambda方式:
fuction=lambda a:a*2
fuction(2) #4
3、fliter
用来过滤现有列表里的内容,并把符合要求的放进新列表里。filter接受两个参数,第一个是lambda表达式提供的过滤条件,第二个是要进行过滤的现有列表。基本格式为:
filter(fuc,seq)
例:
l=[4,5,6,7]
def f1(x):
if x>5:
return x
l2=list(filter(f1,l))
l2 # 6,7
####
l2=list(filter(lambda x:x>5,l))
l2 # 6,7
4、map
主要为将fuc作用于给定序列的每一个元素,并用一个列表返回。map()方法会将 一个函数 映射到序列的每一个元素上,生成新序列,包含所有函数返回值。也就是说序列里每一个元素都被当做x变量,放到一个函数f(x)里,其结果是f(x1)、f(x2)、f(x3)......组成的新序列。
主要格式为:
map(func,seq1,[seq2])
![c08d7bb87ad035c87e4752bc8eb09649.png](https://i-blog.csdnimg.cn/blog_migrate/b9738fd3c1ca3106d251f2fa1e49f013.png)
例:
###加和
l1=[1,2,3]
l2=[1,2,3]
i3=list(map(lambda x,y:x+y,l1,l2))
i3 ###2,4,6
###乘积
y=list(map(lambda x:x*2,range(0,20)))
#[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38]
5、reduce
reduce的工作过程是 :在迭代序列的过程中,首先把前两个元素(只能两个)传给函数,函数加工后,然后把得到的结果和第三个元素作为两个参数传给函数参数,函数加工后得到的结果又和第四个元素作为两个参数传给函数参数,依次类推。主要格式:
reduce(fuc,seq,[init])
与map不同,reduce不可以直接使用,需要用from functools import reduce导入。
![062e0f191ad427d46cb2dbe53b1fbb9d.png](https://i-blog.csdnimg.cn/blog_migrate/aa9dc42ba9478d31550a77e233f02f55.png)
例如:
#sample1
from functools import reduce
def f(x,y):
return x*y
items = range(1,6)
result = reduce(f,items)
print(result)
#sample2
from functools import reduce
l=[1,4,8]
def f3(x,y):
return(x+y)
t=reduce(f3,l,100)
t
参考:
1、https://zhuanlan.zhihu.com/p/21950096
2、https://zhuanlan.zhihu.com/p/77311224