一、作用域
- 局部变量< 全局变量
- 在函数内部使用变量一般先从函数内部找(就像有私人手机情况下一般不用公用电话)
- 函数间不能 共享内部定义的 函数变量
- 函数间可以使用全局变量
- 全局作用域–全局变量
函数外部定义的变零在整个文件中有效
6.局部作用域–局部变量
函数内部定义的变量 从定义位置 开始到定义结束
7.将局部变量 转为 全局变量
gloabal(局部声明全局变量时需在使用此变量之前进行)+变量名,变量名, , ,
nonlocal(不能转换为全局变量)(在内层函数里 将内层函数的 变量声明为 外层函数的 局部变量,只限于一层,且此变量不能是 全局变量)
8.Python函数对变量的作用遵守如下原则:
1.简单数据类型变量无论是否与全局变量重名,仅在函数内部创建和使用,函数退出后变量被释放;
2.简单数据类型变量在用global保留字声明后,作为全局变量;
3.对于组合数据类型的全局变量,如果在函数内部没有被真实创建的同名变量,则函数内部可直接使用并修改全局变量的值;
4.如果函数内部真实创建了组合数据类型变量,无论是否有同名全局变量,函数仅对局部变量进行操作。
二、匿名函数
- 语法:函数名=lambda 形参:返回值
- lambda 是定义匿名函数的关键字, 相当于def
- 调用: 结果=函数名(实参)
三、内置函数
- 查看所有内置函数
import builtins
print(dir(builtins))
2.print()/ list()
3.abs() 返回绝对值
4. set()创建无序不重复元素集 tuple() 将一个可迭代对象转换为元组
5. sum() 求和
6. min() 求最小值 max() 求最大值
7. zip(可迭代对象) 将可迭代对象作为参数,将对象中的对应的元素打包成一个个元组
8. map(函数,可迭代对象) 可以对迭代对象中的每一个元素进行映射 ,分别执行
9. reduce(函数(x,y)(必须为两个参数),可迭代对象) 对参数序列中的元素进行累积
先把对象中的前两个元素取出,计算成一个新值保存,在将此值与第三个元素计算
四、拆包
- 对于函数多个返回数据,去掉元组列表和字典,直接获取里面数据的过程
- 取值 用下标 用切片 用循环遍历 用推导式+“ ”.join() 用拆包
- 和函数参数一样,对应
name1='全局name1'
name='全局name'
def fun():
# nonlocal name# 不能转换为全局变量
name1='外层name1'
name2='外层name2'
def fun1():
nonlocal name1
name1='嵌套name1'
name2='嵌套name2'
print('嵌套函数的变量',name1,name2)#嵌套函数的变量 嵌套name1 嵌套name2
def fun2(name1):
nonlocal name2
name2='嵌套内name2'
# name1='嵌套内嵌套name1'
print('嵌套内的嵌套的变量',name1,name2)#嵌套内的嵌套 嵌套name1 嵌套内name2
fun2(name1)
print('嵌套函数的变量', name1, name2)#嵌套函数的变量 嵌套name1 嵌套内name2
fun1()
# name1='外层name1'
global name#可以转换为全局变零,
name='外层name'
print('外层函数的变量',name,name1,name2)#外层函数的变量 外层name 嵌套name1 外层name2
fun()
print('全局变量',name,name1)#全局变量 外层name 全局name1
# 匿名函数 与三目运算符的使用
res=lambda a,b:a+b#
#不需要写return 本身包含
# 三目运算 为真 if 条件 else 为假
print(res(2,3))#5
#匿名函数与if 三目运算
res1=lambda a:print(a) if a>4 else print('输小了')# 多个None
res2=lambda a:a if a>4 else '输小了'
print(res1(10),res2(10))
pf=lambda a:a**2
print(pf(2))#4
# 查看内置函数(所有)
import builtins
# print('\n'.join(dir(builtins)))
# print(dir(builtins))# 控制台第三个键
print(sum([1,2,3,4,5]))
# zip 拉链函数 函数将对象作为参数 将里面对应的元素打包岑戈元组
a=[1,2,3]
print(min(a),max(a))#1 3
b=['a','b','c']
print(zip(a,b))#<zip object at 0x000002460F4E8848>
print(list(zip(a,b)))# 转换为列表输出 [(1, 'a'), (2, 'b'), (3, 'c')]
print([i for i in zip(a,b)])#for循环遍历输出
# map 映射函数 将对象中每一个元素进行映射
li=[1,2,3]
def fun(x):
return x+3
n=map(fun,li)#将fun函数依次作用在li列表每个元素上
print(list(n))#[4, 5, 6]
print(list(map(lambda x:x*3,[1,2,3])))#[3, 6, 9]
# 拆包
tu=(1,2,3,4)
a,b,c,d=tu
e,*f=tu
g,h,j=f
print(a,b,c,d)#1 2 3 4
*当全世界都说你是疯子的时候,你就离成功不远了