前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 基础知识第11讲:函数的返回值、作用域、命名空间、递归、高级函数

python 基础知识第11讲:函数的返回值、作用域、命名空间、递归、高级函数

作者头像
小海怪的互联网
发布2019-08-23 16:43:22
8710
发布2019-08-23 16:43:22
举报

1.函数的返回值

第一个案例:

# 求任意数的和
# 可以通过return 来指定函数的返回值
def fn(*nums):
    # 定义一个变量来保存结果
    result = 0
    # 遍历元组 并将元组中的元素累加
    for n in nums:
        result += n
    # print(result)
    return result
r = fn(1,2,3)
print(r+6)

  • 返回值可以直接使用,也可以通过一个变量来接收函数返回值的结果。

第二个案例:

def fn():

    # return 100
    # return [1,2,3]
    # return 1+1
    def fn2():
        print('python')
    return fn2
r = fn()
r()
print(r)

  • return后面可以跟任意的对象,甚至可以是一个函数。

第三个案例:

def fn2():
    return
    a = 10
r = fn2()
print(r)

  • 如果仅仅写一个return 或者 不写return 则相当于return None

第四个案例:

def fn3():
    print('hello')
    return
    print('abc')
r = fn3()

  • 在函数中 return后面的代码都不会执行, return 一旦执行函数将自动结束

第五个案例:return,break,continue 区别

def fn4():
    for i in range(5):
        if i == 3:
            #break # 用来退出当前循环
            # continue # 用来跳过当次循环
            return # 用来结束函数
        print(i)
    print('循环结束')
fn4()

由结果我们看出:

  • break 用来退出当前循环
  • continue 用来跳过当次循环
  • return 用来结束函数

第六个案例:fn 和 fn() 的 区别

def fn():
    return 10
print(fn) 
print(fn()) 

执行结果分别是: <function fn at 0x0000016C54C51268> 10

  • fn 是函数对象 实际上在打印函数对象
  • fn() 是在调用函数 实际上在打印fn()函数的返回值

2. 文档字符串

  • help() 可以查询python 函数中的用法
  • 语法 help(函数对象)
help(print)
def fn(a:int,b:str,c:bool) -> int:
    '''
    函数的参数
    :param a: 作用 ....
    :param b: 作用 ....
    :param c: 作用 ....
    :return: int
    '''
    return 10

help(fn)

3. 函数的作用域

作用域指的是变量生效的区域

  • 在Python中有2种作用域
  • 1 全局作用域 全局作用域在程序执行时创建,在程序结束时销毁; 所以函数以为的区域都是全局作用域; 在全局作用域中定义的变量,都属于全局变量,全局变量可以在程序汇总的任意位置访问;
  • 2 函数作用域 函数作用域在函数调用时创建,在调用结束时销毁; 函数每调用一次就会产生一个新函数的作用域; 在函数作用域中定义的变量 都是局部变量,它只能在函数内部被访问;

示例代码:

a = 20
b = 20
def fn():
    a = 10 #a定义在函数内部,所以它的作用域就是函数内部,函数外部是无法访问的
    print('函数内部:','a =',a)

    print('函数内部:', 'b =', b)
fn()
# print('函数外部:','a =',a)
print('函数内部:','b =',b)

3.1 通过global 关键字改变变量的作用域

a = 20
def fn2():
    # 如果希望在函数内部修改全局变量,则需要使用global关键字,来声明变量
    global a # 声明在函数内部的使用a是全局变量,此时在去修改a时,就是修改全局变量
    a = 10
    print('函数内部:','a =',a)
fn2()
print('函数外部:','a =',a)

4.命名空间

命名空间实际上就是一个字典,是一个专门用来存储变量的字典

  • 使用locals()来获取当前作用域的命名空间
  • 如果在全局作用域中调用locals()函数则获取全局作用域命名空间; 如果在函数作用域中调用locals()则获取函数命名空间; locals() 返回的就是一个字典
a = 1
b = 2
c = 3
s = locals() # 获取当前的命名空间
print(s)
print(a)
print(s['a'])  # 就是s中一个一个的键值对
s['c'] = 200 #增加一个c的变量
print(s)
def fn4():
    a = 10
    s = locals() #在函数内部调用locals()会获取函数的命名空间
    s['b'] = 20 # 可以通过s来操作函数的命名空间,但是不建议这么做
    print(s['b'])
    print(s)
fn4()

一般不建议用这种方法来定义和操作变量

5. 递归

递归式的函数 递归简单理解就是自己去调用自己 递归式函数就是在函数中调用自己

5.1 递归的作用

递归式解决问题的一种方式 递归式函数的两个条件 1.基线条件 问题可以被分解成最小的问题,当满足基线条件时,递归不在执行了 2.递归条件 将问题继续分解的条件 看个例子:

def fn2(n):
    # 基线条件
    if n == 1:
        # 1的阶乘是它本身
        return 1
    # 递归条件
    return  n * fn2(n-1)
print(fn2(10))

5.2 递归练习

  • 1 创建一个函数 来为任意数做任意幂运算
def fn4(n,i):
    # 定义了一个函数 其中有2个参数 n 要做幂运算的数字 i 做幂运算的次数
    # 基线条件 幂为1
    if i == 1:
        return n
    # 递归条件 2*2*2*2 = 16 2**4 2**3 2 ** 2
    return n * fn4(n,i-1)
print(fn4(2,4))
  • 练习二 创建一个函数 用来检查任意的字符串是否是回文字符串,如果是返回True,不是返回False
# 回文字符串 字符串从后往前念和从前往后念是一样的 abcba
# abcdefgfedcba
# 先检查第一个字符和最后一个字符是否一致,如果不一致不是回文字符串
# 如果一致,则看剩余部分是否是回文字符串
# 检查bcdefgfedcb 是不是回文
# 检查cdefgfedc 是不是回文
# 检查defgfed 是不是回文
# 检查 efgfe是不是回文
# 检查 fgf 是不是回文
# 检查 g 是不是回文
def fn5(s):
    # 这个函数就是检查任意一个字符串是否是回文
    # 参数s 就是我们要检查的字符串
    # 基线条件
    if len(s) < 2:
        # 字符串的长度小于2 则这个字符串一定是回文
        return True
    elif s[0] != s[-1]:
        # 第一个字符和最后一个字符不相等,不是回文
        return False
    # 递归条件
    return fn5(s[1:-1])
print(fn5('abcdefgfedcba'))

6.高级函数

特点: 1.接收一个或多个函数作为参数 2.将函数作为返回值返回 满足任意一个特点就是高级函数

def fn(func,lst):
    for n in lst:
        if func(n):
            new_list.append(n)
    # 返回新的列表
    return new_list
print(fn(fn4,l))

当我们使用一个函数作为参数时,实际上是将指定的代码传递进了目标函数,根据传入的不同的函数,就改变了实现的规则。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.07.23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.函数的返回值
  • 2. 文档字符串
  • 3. 函数的作用域
    • 3.1 通过global 关键字改变变量的作用域
    • 4.命名空间
    • 5. 递归
      • 5.1 递归的作用
        • 5.2 递归练习
        • 6.高级函数
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档