Python函数(二):全局变量和局部变量、匿名函数lambda、递归函数

本文介绍了Python编程中的全局变量和局部变量的概念及使用,强调了修改全局变量的方法。此外,讲解了匿名函数lambda的特点和使用示例,并通过阶乘计算展示了递归函数的工作原理。最后,给出了一个使用递归遍历目录结构的示例,演示了如何在实际编程中应用递归。
摘要由CSDN通过智能技术生成

全局变量和局部变量

  • 全局变量可以作用于整个程序中
  • 局部变量在函数内部定义,只能作用在函数内部
name1 = 'lzh' # 全局变量,整个程序都可以使用

def sum(a,b):
    name2 = 'ssd' # 局部变量,作用仅限于函数内部
    print(a+b)
    print(name2)
    return


print(name1)
sum(2,6)
print(name2)

'''
lzh
8
ssd
NameError: name 'name2' is not defined
'''

对全局变量的修改:
在外部使用赋值等操作进行修改

在函数内部需要使用global关键字进行声明后进行修改,否则定义为一个新的局部变量。

name1 = 'ddd'

def ChangeGlobalVari1():
    global name1  # 若在函数内部修改全局变量,必须在用global对该变量声明
    name1 = 'dfg'
    return
    
def ChangeGlobalVari2():
	name1 = 'dfg'
	return
	
print(name1)

# 若运行ChangeGlobalVari1(),打印结果为dfg
# 若运行ChangeGlobalVari2(),打印结果为ddd

如果全局变量是列表或字典类型,则不需要声明全局变量

li = [66]  # 可变类型,不用声明全局变量,可在函数内直接修改,地址不变
# 还有字典类型
print(li)
print(id(li))
def changeList(l):
    l.append(23)
    print(id(l))
    return
changeList(li)
print(li)

'''
[66]
id值
id值
[66, 23]
'''

匿名函数

特点

  • 使用lambda关键字创建函数
  • 没有名字
  • 冒号后面的表达式只能是一个,不是语句
  • 自带return,返回表达式的结果

定义语法

变量 = lambda 参数1,参数2,...:表达式
# 变量用于接收表达式的值

调用语法

变量名(参数1,参数2,...)

示例:

def sum(a,b):
    return a+b

SUM = lambda a,b:a+b

print(sum(23,4))
print(SUM(4,5))

# 选择逻辑运算,但只能实现简单逻辑
MaxNum = lambda a,b:a if a>b else b
print(MaxNum(3,5))

'''
27
9
5
'''

★递归函数

  • 在函数内部调用函数本身
  • 必须有一个结束条件,否则一直递归下去直到到达最大深度报错

示例:

# 求阶乘
def func1(n):
    if n==1:
        return 1 # 结束条件
    else:
        return n * func1(n-1)

print(func1(4))

'''
24
'''

使用递归函数打印出一个目录下所有的文件名(需要使用Python中的os模块)

import os # 导入文件操作模块
def findFile(filePath):
    fileList = os.listdir(filePath)
    # os.listdir 获取该路径下的所有文件名和文件夹名
    for item in fileList: # item为文件名或文件夹名
        if item =='$RECYCLE.BIN' or item == 'System Volume Information':
            # $RECYCLE.BIN(回收站文件夹) 和 System Volume Information(缓存文件夹)通常隐藏
            # 递归文件路径时应该避开这两个文件夹,否则会出错
            continue

        fullPath = os.path.join(filePath,item) # 得到item文件或文件夹所在的完整路径,并用于判断
        # 组合filePath和item为新的路径并返回

        if os.path.isdir(fullPath): # 判断fullPath是否是文件夹
            print(os.path.isdir(fullPath))
            findFile(fullPath) # 递归调用
        else:
            print(item)

        pass
    else:
        return

findFile('文件夹路径')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚风也很浪漫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值