Python函数作用域&&一些常见内置函数

135 阅读3分钟

「这是我参与11月更文挑战的第24天,活动详情查看:2021最后一次更文挑战

作用域:

全局变量(全局作用域)与局部变量(局部作用域)
1.局部变量是定义在函数内部的,在函数内部有效
2.全局变量是定义在函数外部的,在整个文件中有效
注意:
1.局部变量只在定义的函数内部有效,函数间的局部变量不能共享使用
2.全局变量可以在函数内直接使用
3.函数内部和外部定义了同名的变量时,函数内部使用的是局部变量

升华:::

函数内部和外部定义了同名的变量时,使用全局变量必须在函数内声 明,格式:global 全局变量名 \
声明局部变量 nonlocal
如果在函数内部声明了全局变量,那么在函数内部就可以更改全局变量,因为现在函数内部使用的就是全局变量,指向了同一片内存空间。

外部不能访问函数内部变量。
函数内部的变量能够访问函数外部的变量。
函数内部不可以修改函数外部的变量。
函数里面和函数外部变量名相同时:指向同一个地址;类型浅复制。

def zhangsan():
        x = 4         #内部变量赋值   局部变量

        def  wumou():
             nonlocal x     #声明局部变量,如果不声明这个局部变量,就会报错,用不到这个局部变量x
             x = x+1
                 print(x)
                 return x  

    return wumou()
    
    
    

举例讲解一些常见函数:

普通的:
之前列表里的sort和reverse会改变原来的值,没有返回值 列表的方法
sorted和reversed不会改变原来的值,有返回值 内置函数
例子:

li = [1,2,3,4]
print(sorted(li))                   	从小到大排序
print(sorted(li,reverse = True))		从大到小排序
print(list(reversed(li)))     

转化为二进制:
print(bin(3))
输出为ob11

转换为八进制:
print(oct(9))
输出为0o11

转化为十六进制:
print(hex(15))
输出为15

字符转化为ASCII码:
print(ord('寒'))
ASCII转化为字符:
print(char('23565'))

高级的:
(1)枚举:会把索引值给拿出来

li = ['寒沙','剑来','低调']
a = enumerate(li)
print(tuple(a))      输出为:((0, '寒沙'), (1, '剑来'), (2, '低调'))
###tuple可换为dictlist

(2)eval和exec
eval 取出字符串的内容,将字符串当做有效的表达式来计算,返回结果。
a = eval('1+1')
print(a) 输出为2

exec 将字符串当做代码执行
a = exec('aa = 1 + 1')
print(aa) 输出为2

(3)filter 过滤器\

def aa(obj):   
        pass  
f = filter(aa,'adfsfaaf')

用参数二过滤返回为true的元素
list(f) :类型转换的时候调用

例子:

def func(x):
        if x>3:
                return 	True
        else:
                return False

li = [1,2,3,4,5,6]

f = filter(func,li) filter有两个参数,第一个参数是函数名字,第二个参数是可迭代对象(序列类型和散列类型)
作用:把列表里面的每一个元素放到函数里面进行过滤。
如果是True就保留下来;如果是False就不要。
print(list(f))


上为filter:::
filter 根据True或者是False过滤列表里面的东西,列表不变
map 把列表放到函数里面运算,返回结果
下为map:::

(4)map 跟filter差不多,它拿到的是返回值
对于参数iterable中的每个元素都应用fuction函数,并将结果作为列表返回

例子:

li = [1,2,3,4,5,6]
def fun(x)return x + x

m = map(fun,li)         把列表里面每一个元素放到函数里面计算运算,返回运算的结果
print(list(m)

拓展:
list(map(abs,[-1,-2,0,1,2]))
把后面的列表里的所有数都经过函数abs。

(5)zip 将对象逐一配对
li1 = ['寒沙','罗汉','龙雨','剑威']
li2 = ['小姐姐','鳄鱼','大汉','剑来']
z = zip(li1,li2) #zip可以配对多个,大于两个也可以。
print(list(z))
输出为{'寒沙': '小姐姐', '罗汉': '鳄鱼', '龙雨': '大汉', '剑威': '剑来'}