一、作用域(全局变量、局部变量)
1.作用域:就是作用范围, 按照生效范围来看分为全局作用域和局部作用域。
?全局变量:当前py文件内都能使用的变量(函数内外都能获取)。
局部变量:只能在函数内部使用的变量(函数外部不能获取)。
函数内部(局部变量a)能对全局变量重新赋值吗?
a = 10 # 全局变量
def add():
a = 20 # 局部变量(企图对全局变量重新赋值)
print(a,"局部变量a")
add()
print(a,"全局变量a")
直接赋值很显然是不行的,这时该怎么办?接着往下走!
2.global关键字
如果我们想在函数内部对全局变量进行赋值,就要用到一个关键字:global
这样就可以修改全局变量了。
作用:声明该变量是全局变量(可直接对全局变量进行修改)
a = 10 # 全局变量
def add():
global a
a = 20 # 局部变量(企图对全局变量重新赋值)
print(a,"局部变量a")
add()
print(a,"全局变量a")
3.nonlocal关键字
在函数嵌套中也存在作用域,例如第一层函数定义的局部变量,第二层是无法直接进行重新赋值的,想要在函数嵌套内修改上一级局部变量就需要用到nonlocal关键字。
nonlocal关键字只会在函数内部找上一级,如果找不到就会报错。
1.这是没有使用nonlocal关键字的:相当于又定义了一个新变量。
a = 10 # 全局变量
def add():
a = 20 # 局部变量(企图对全局变量重新赋值)
def bdd():
a = 30
print("第二层局部变量a:",a)
bdd()
print("局部变量a:",a)
print("全局变量a",a)
add()
??2.这是使用过nonlocal关键字的:直接修改了上一级的局部变量。
a = 10 # 全局变量
def add():
a = 20 # 局部变量(企图对全局变量重新赋值)
def bdd():
nonlocal a
a = 30
print("第二层局部变量a:",a)
bdd()
print("局部变量a:",a)
print("全局变量a",a)
add()
三、内置函数
什么是内置函数?
内置函数就是python自带的函数。(例如:input()、print()这类函数)
下面我们挑几个常用函数:zip(),map(),reduce(),filter(),
zip():拉链函数:把多个可迭代对象一一对应打包成一个元组格式的对象(<zip object at 0x000002071F1EB5C0>)。如果想要查看该数据需要转换数据类型。
????????转换格式:数据类型(zip( l1 , l2 ))?
????????注意:如果几组可迭代对象参数个数不一致则会忽略多出的参数。
# zip()
l1 = [1,2,3,4,5,6,7,8,9]
l2 = ["a","b","c","d","e","e","f","g","h"]
zip_1 = zip(l1,l2) # 将两个列表里的数据一一对应并打包。
print(zip_1) # 运行结果:<zip object at 0x000002071F1EB5C0>
print(list(zip_1)) # 转换格式:列表(zip(l1,l2))
运行结果:
?
map():映射函数:将可迭代对象以实参方式传输到我们定义的函数中进行处理,之后会得出一个新的值<map object at 0x000001E876F62BB0>。如果想要查看该数据需要转换数据类型。
# map()映射函数
l1 = [1,2,3,4,5,6,7,8,9]
def a(a): # 函数名(形参)
return a**2
print(map(a,l1)) # 格式:map(函数名,可迭代对象)
print(list(map(a,l1))) # 查看方式:转换数据类型(map(函数名,可迭代对象))
运行结果:
?
该函数需要从functools库中导入后才能使用。
reduce():将可迭代对象中的第一个参数和第二个参数先进行运算将其结果与第三个参数再进行运算。例:li = [1,2,3,4] (1+2=2)得到参数1?,将参数1(1+2的值)与参数2(3)进行运算以此累计到可迭代对象最后一位。
格式:from functools import reduce?
reduce(函数名,可迭代对象)
# reduce():
from functools import reduce
l1 = [1,2,3,4]
def b(a,b):
return a + b
print(reduce(b,l1))
运行结果:
?
filter() :函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
# filter()
l1 = [1,2,3,4,8,9,10,20,30,40,15,18,]
def c(a):
return a>10 #返回>10的参数
print(list(filter(c,l1))) # 格式和上面一样
运行结果:
?
eval():将数据还原成原数据格式。
例:l_1 = “[1,2,3,4]”这是个数据现在是字符串,eval(l_1)以后将会变成列表格式。因为这个数据原本是列表,只不过被引号盖住了所以成了字符串。eval()函数作用就是还原数据格式。
# eval()
l1 = "[1,2,3,4]"
print(type(l1))
print(type(eval(l1)))
运行结果: