Python第七课,函数的分类
时间:2023-2-27 21:13 作者:wen 分类: Python
# 函数的嵌套
def fun1():
print('fun1 start')
print('执行代码')
print('fun1 end')
pass
def fun2():
print('fun2 start')
print('执行代码')
fun1()
print('fun2 end')
pass
fun2()
函数的分类: 根据函数的返回值和函数的参数
有参数无返回值
有参数有返回值
无参数有返回值
无参数无返回值
# 全局变量和局部变量
# 局部变量, 函数内部的变量, 只能在函数内部使用, 当全部变量和局部变量出现重复, 优先使用函数内部定义的变量
def print_info():
name = "zhangsan"
print(name, '-', name)
print('%s,%s' % (name, name))
pass
# 全局变量
name = 'lisi'
def test_method():
print('{}'.format(name))
pass
def change_global():
"""
修改全部变量
:return:
"""
global name
name = 'wangwu'
print(name)
pass
print_info()
test_method()
change_global()
函数传递
# 在Python当中, 所有都是对象, 在函数调用的时候, 实参传递就是对象的引用
# 函数的传递
def func(x):
# 获取变量的内存地址
print('x地址: %d' % id(x))
x = 2
print('x修改地址: %d' % id(x))
pass
a = 1
func(a)
print('a地址: %d' % id(a))
"""
x地址: 13856896
x修改地址: 13856912
a地址: 13856896
"""
# 可变类型
li = []
def renc(param):
print('pram地址: %d' % id(param))
# 修改变量
li.append([1,2,3])
print('pram修改地址: %d' % id(param))
pass
renc(li)
print('li地址: %d' % id(li))
"""
pram地址: 35277352
pram修改地址: 36592168
li地址: 35277352
"""
匿名函数
Python中使用lambda关键字创建匿名函数, 所谓匿名即这个函数没有名字不要def关键字创建标准的函数.
lambda 参数1,参数2,参数3:执行代码
特点:
1: 使用lambda关键字去创建函数
2: 没有名字的函数
3: 匿名函数冒号后面的表达式有且只有一个, 注意: 是表达式, 而不是语句
4: 匿名函数自带return , 而这个return的结果就是表达式计算后的结果
# 匿名函数
# 实现两个数相加
func = lambda x, y: x + y
print(func(1, 2))
# 可以替换传统的双分支写法
age = 19
print('可以参军' if age>18 else '继续上学')
func_bijiao = lambda x, y: x if x > y else y
print(func_bijiao(12, 13))
# 直接调用
res = (lambda x, y: x * y)(10, 10)
print(res)
lambda只能是单个表达式, 不是一个代码块, lambda的设计就是为了满足简单函数场景
递归函数
递归函数必须有一个结束条件, 否则递归无法结束会一直递归下去, 直到最大递归深度报错
# 递归函数
# 求阶乘
def jiechang(n):
res = 1
for item in range(1, n + 1):
res *= item
pass
return res
pass
print('4的阶乘:%d' % jiechang(4))
# 递归方式求阶乘
def digui_jiechang(n):
if n == 1:
return 1
else:
return n * digui_jiechang(n - 1)
print('4的阶乘:%d' % digui_jiechang(4))
"""
4的阶乘:24
4的阶乘:24
"""
优点:逻辑简单,定义简单
缺点:容易导致栈溢出
# 递归函数
# 求阶乘
def jiechang(n):
res = 1
for item in range(1, n + 1):
res *= item
pass
return res
pass
print('4的阶乘:%d' % jiechang(4))
# 递归方式求阶乘
def digui_jiechang(n):
if n == 1:
return 1
else:
return n * digui_jiechang(n - 1)
print('4的阶乘:%d' % digui_jiechang(4))
# 递归遍历文件结构
import os
def find_file(file_path):
# 得到该路径下所有的文件和文件夹
list_rs = os.listdir(file_path)
for file_item in list_rs:
# 获取完整的文件路径
full_path = os.path.join(file_path, file_item)
if os.path.isdir(full_path):
find_file(full_path)
else:
print(file_item)
pass
else:
return
pass
# 调用
find_file('E:\python')
标签: python基础