函数进阶_1

2020-04-25  本文已影响0人  qjh_py

目录

  1. 函数返回值
  2. 文档字符串和help()
  3. 函数的作用域
  4. 命名空间
  5. 递归函数

1. 函数返回值

返回值就是函数执行以后返回的结果

通过return来指定函数的返回值

return后面可以跟任意且不限于一个的对象,返回值甚至可以是一个函数

# 求任意数的和

def fn(*nums):

    result = 0

    for n in nums:

        result += n

    # print(result)
    return result
    print('我不会执行')

r = fn(1,2)
def fn1():

    return 100

print(fn1)
print(fn1())

2. 文档字符串和help()

# 自定义函数

def fn(a, b, c):
    """
    这个函数式一个文档字符串的实例
    参数
        a:作用 类型 默认值......
        b:作用 类型 默认值......
        c:作用 类型 默认值......

    """

    return 100


help(fn)
  1. 函数的作用域

Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。
变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。
所以作用域指的就是变量生效的区域

简单介绍两种:

注意:
• 如果在函数中修改全局变量,那么就需要使用global进行声明,否则出错
• 如果全局变量的名字和局部变量的名字相同,那么使用的是局部变量的,小技巧强龙不压地头蛇

global的本质:

1.在函数中不使用global声明全局变量时不能修改全局变量的本质是不能修改全局变量的指向,即不能将全局变量指向新的数据。

2.对于不可变类型的全局变量来说,因其指向的数据不能修改,所以不使用global时无法修改全局变量。

3.对于可变类型的全局变量来说,因其指向的数据可以修改,所以不使用global时也可修改全局变量。

4. 命名空间

命名空间实际上就是一个字典,是一个专门用来存储变量的字典
locals()用来获取当前作用域的命名空间

如果在全局作用域中调用locals()则获取全局命名空间,如果在函数作用域中调用locals()则获取函数命名空间

返回值是一个字典

a = 20

def fn3():

    global a
    a = 50

    print('函数内部:','a =',a)

s = locals()

print(s)
print(a)
print(s['a'])

5. 递归函数

递归是解决问题的一种方式,它的整体思想,是将一个大问题分解为一个个的小问题,直到问题无法分解时,在去解决问题

递归简单理解就是自己去引用自己
递归式函数即在函数中自己调用自己
无穷递归 类似于死循环

# 用递归的方式求任意数的阶乘
# 10!= 10 * 9!
# 9! = 9 * 8!
# 8! = 8 * 7!
# ....
# 1! = 1


def fn2(n):

    # 参数 n要求阶乘的数字

    # 1.基线条件

    if n == 1:
        # 1的阶乘就是1 直接返回结果
        return 1


    # 2.递归条件

    return n * fn2(n-1)

print(fn2(10))
上一篇 下一篇

猜你喜欢

热点阅读