首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python学习之旅(十一)

Python学习之旅(十一)

作者头像
py3study
发布2020-01-20 11:03:49
3100
发布2020-01-20 11:03:49
举报
文章被收录于专栏:python3python3python3

Python基础知识(10):函数(Ⅱ)

一、全局变量和局部变量

局部变量:在函数内定义的变量,在函数内使用

全局变量:在函数外定义的变量,在程序任何地方都可以使用

1、全局变量与局部变量同名

这时函数内部只调用局部变量,如果要调用全局变量需要在函数内加一句“global 同名变量”

x=1
#x:全局变量
def test():
    global x
    x=5
    #x:局部变量
    print(x)
    return x

test()

结果:1

2、一个函数中的内层函数调用外层函数中的变量

内层函数调用外层函数中的变量要在内层函数中加一句“nonlocal 变量”

def demo1():
    num=2
    def demo2():
        nonlocal num
        num+=1
        
    return demo2()
demo1()

demo1()

结果:3

3、全局变量一般不可修改,如果函数中想要修改全局变量要加上“global 变量”语句

如果B函数要调用A函数中的c变量,需要在A函数内部加一句“global c”

x=1
def test1():
    global x
    global y
    y=2
    x=x+y
    print(x)
    return x
def test2():
    print(y)
    print(x)
    
test1()
test2()

结果:

3 2

二、函数递归

1、一个函数自己调用自己

2、有明确的结束条件:加if判断

3、无穷递归:运行后它会永远运行下去,进而导致程序崩溃

4、理论上所有递归函数都可以写成循环的方式

计算阶乘

#用循环语句
def fact1(num):
    result=num
    for i in range(1,num):
        result *=i
    return result

print(fact1(3))

#用递归函数
def fact2(n):
    if n==1:
        return 1
    else:
        return n*fact2(n-1)

print(fact2(3))

结果:6

5、使用递归函数时要防止栈溢出,解决栈溢出的方法是通过尾递归优化

6、匿名函数

用lambda定义,只能有一个表达式,没有函数名

lambda x:x+1等价于def test(x):x+=1 retrun x

(1)可以把匿名函数赋值给一个变量,用该变量调用匿名函数

y=lambda x:x+2
y(1)
结果:3

(2)可以把匿名函数作为返回值返回

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Python基础知识(10):函数(Ⅱ)
    • 一、全局变量和局部变量
      • 1、全局变量与局部变量同名
    • 2、一个函数中的内层函数调用外层函数中的变量
      • 3、全局变量一般不可修改,如果函数中想要修改全局变量要加上“global 变量”语句
    • 二、函数递归
      • 1、一个函数自己调用自己
      • 2、有明确的结束条件:加if判断
      • 3、无穷递归:运行后它会永远运行下去,进而导致程序崩溃
      • 4、理论上所有递归函数都可以写成循环的方式
      • 5、使用递归函数时要防止栈溢出,解决栈溢出的方法是通过尾递归优化
      • 6、匿名函数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档