Python学习记录 函数基础

本文深入讲解了Python中的函数特性,包括eval()函数的使用方法、递归函数的设计原则及应用案例、嵌套函数的作用和nonlocal关键字的功能。通过具体实例帮助读者理解这些高级概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2022.08.10 DAY24

1. 函数基础

1. eval()函数
  • 将字符串str作为有效的表达式来求值并返回计算结果。
  • 语法:
    • eval(source[ , globals[ , locals]]) -> value
  • 参数:
    • source:一个python表达式或函数compile返回的代码对象。
    • globals:可选。必须是dictionary。
    • locas:可选。任意映像对象。

示例:

def test_eval():
    str = "print('string')"
    eval(str)

    a = 10
    b = 20
    c = eval("a+b")
    print("c = {0}".format(c))

if __name__ == '__main__':
    test_eval()

结果:

string
c = 30
2. 递归函数
  • 自己调用自己
  • 终止条件
    • 表示递归什么时候结束。一般用于返回值,不再调用自己。
  • 递归步骤
    • 把第n步的值和n-1步相关联。

示例:

def test_01(n):
    """ 递归函数 """
    print("*test01,n = ", n)
    if(n == 0):
        print("over...")
    else:
        test_01(n - 1);
    print("*test01,n = ", n)


if __name__ == '__main__':
    test_01(5)

结果:

*test01,n =  5
*test01,n =  4
*test01,n =  3
*test01,n =  2
*test01,n =  1
*test01,n =  0
over...
*test01,n =  0
*test01,n =  1
*test01,n =  2
*test01,n =  3
*test01,n =  4
*test01,n =  5

递归算阶乘:

def factorial(number):
    """ 递归算阶乘 """
    if number == 1:
        return 1;
    else:
        return number * factorial(number - 1);


if __name__ == '__main__':
    print("5! = {0}".format(factorial(5)))

结果:

5! = 120
3. 嵌套函数(内部函数)
  • 嵌套函数:在函数内部定义的函数
  • 使用说明:
    • 封装 - 数据隐藏
      • 外部无法访问’嵌套函数’
    • DRY
      • 可以让函数内部避免重复代码
    • 闭包

示例:

def test_02():
    """ 嵌套函数 """
    print('outer running')

    def inner01():
        """ 只能内部可用 """
        print('inner01 running')

    inner01()


if __name__ == '__main__':
    test_02()

结果:

outer running
inner01 running
4. nonlocal 关键字
  • nonlocal 用来声明外层的局部变量
  • global 用来声明全局变量

示例:

def outer():
    b = 10

    def inner():
        nonlocal b  # 声明外部函数的局部变量
        print("inner b:",b)
        b = 20

    inner()
    print("outer b:", b)


if __name__ == '__main__':
    outer()

结果:

inner b: 10
outer b: 20
5. LEGB规则
  • Python在查找名称时,是按照LEGB规则查找的:
  • Local --> Enclosed --> Global --> Built in
  • Local 函数或者类的方法内部
  • Enclosed 嵌套函数
  • Global 模块中的全局变量
  • Built in Python为自己保留的特殊名称

测试LEGB:

str = "global"
def outer():
    str = "outer"

    def inner():
        str = "inner"
        print(str)

    inner()

outer()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值