Python函数深度精讲:从作用域到lambda的进阶之路
今天和大家系统地聊聊Python函数的核心知识点。这些内容不仅是面试高频考点,更是写出高质量Python代码的基础。从变量作用域、可变数据、模块导入、递归到匿名函数,带你一步步打通任督二脉。
一、变量作用域:分清内外,避免踩坑
Python的变量作用域是初学者最容易混淆的概念之一。理解全局变量和局部变量的本质区别,是写出无bug代码的第一步。
1. 全局与局部的本质
• 全局变量:变量在整个代码文件内都可以被使用。
• 局部变量:变量只能在局部范围内被使用。
def fun5(a, b, c=10):
d = a*a + b*b + c*c
return d
fun5(1, 2, 3)
print(a)

a,b,c为局部变量只能在fun5内部使用,因此在执行时会出现报错。
def fun5(a, b, c=10):
d = a*a + b*b + c*c+e
return d
e=100
print(fun5(1,2,3))

2. 全局变量存在问题
当在函数中使用全局变量且对全局变量进行赋值时,会重新在函数内部创建一个同名的局部变量,而不是使用全局变量。
def fun7(b):
print('a+b的值:', a+b)
print('a+b的值:', a+b)
a=3
fun7(13)
print('a的值:', a)

def fun7(b):
a=2
print('a+b的值:', a+b)
a=3
fun7(13)
print('a的值:', a)
3.global声明全局变量
如果需要在函数外部和函数内部都使用一个变量(不会因为在函数内部而被重新赋值)可以在函数中使用global关键字都变量声明。
def fun7(b):
global a
print('a的值:', a)
a = 2
print('a+b的值:', a + b)
a = 3
fun7(13)
print('a的值:', a)
4.*变量为可变数据
Python中的数据类型可以分为可变和不可变两类,其中可变数据指数据变化后不会改变内存空间。
# 定义不可变类型变量a(整数),赋值为4
a = 4
# 定义可变类型变量b(列表),赋值为[2,3]
b = [2, 3]
# 打印a和b的内存地址(id()函数返回变量的内存编号)
print("第一次地址:", id(a), id(b))
# 给a重新赋值为5(不可变类型,会生成新内存地址)
a = 5
# 给列表b追加元素5(可变类型,内存地址不变)
b.append(5)
# 再次打印a和b的内存地址
print("第二次地址:", id(a), id(b))
5.函数中的可变数据
当可变数据为全局变量时,在函数中对可变数据进行修改会改变全局变量。
def fun10():
a.reverse()
print(a)
a = [2, 3, 4]
fun10()
print(a)

def func():
ls.append(1)
return ls
ls = []
a = func()
b = func()
print(a, b)

二、模块导入:优雅实现代码复用
1.导入文件模块
用import导入当前文件夹内的文件模块。

2.导入文件中指定函数
当文件存在多个函数,只需要使用其中摸个函数时,可以用from和import组合方式导入文件中的指定函数。

3.导入文件中全部函数
当需要导入文件中全部函数时,可以使用from并结合*。

4. __name__属性
每个Python文件都有一个__name__属性,当文件作为主程序运行时,__name__的值为"__main__";当文件作为模块被导入时,__name__的值为文件名。这个特性可以让我们在模块中编写测试代码:


这是Python开发中的一个最佳实践,它让我们的模块既可以被导入使用,也可以直接运行测试。
三、匿名函数lambda:简洁处理简单逻辑
lambda函数是Python中的匿名函数,适用于创建一些简单函数。
1.将lambda作为函数
函数名 = lambda 参数: 函数内代码
fun1 = lambda x,y:y+x
等效为以下代码:
def fun1(x,y):
return y+x
2.将lambda作为函数的参数
以sorted()函数为例,sorted()函数形式如下:
sorted(iterable, key=None, reverse=False)
• iterable:表示可迭代的数据对象,例如字符串、列表或元组。
• key:表示比较函数,其值可以为lambda语句(用于自定义排序规则)。
• reverse:指明排序顺序,False(默认)为从小到大排序,True为从大到小排序。
a = [3,7,9,4,0,2]
b = 'nfweubv'
c = sorted(a)
d = sorted(a, reverse=True)
e = sorted(b)
print(c, d, e)
a = [3,7,9,4,0,2]
b = sorted(a, key=lambda x: abs(x-5), reverse=False)
print(b)
更多推荐


所有评论(0)