«

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基础