Python基础07 函数(2)作用域、前向引用、递归

一、作用域

1、全局变量与局部变量

name = 'CRTao'      #全局变量

def change_name():
    name = 'tao'    #局部变量
    print(name)

change_name()       #tao
print(name)         #CRTao

2、关键字global

关键字global可以声明变量为全局变量

name = 'CRTao'      #全局变量

def change_name():
    global name     #声明name为全局变量
    name = 'tao'
    print(name)

change_name()       #tao
print(name)         #tao

(1)一般来说:全局变量变量名大写;局部变量变量名小写。
(2)优先读取局部变量,能读取全局变量,在局部作用域内无法对全局变量重新赋值,但可以使用全部变量的方法。例:

l = [1,2,3]

def func():
    l.append(10)

func()
print(l)         #[1, 2, 3, 10]

3、关键字nonlocal

关键字nonlocal声明该变量不是本层局部变量,依次向外一层找,找到为止。如果局部变量都没找到,而是找到全局变量,则报错。

l = [1,2,3]

def func1():
    l = ['a','b']
    def func2():
        # nonlocal l
        l = 'CRTao'
    func2()
    print(l)    #['a', 'b']

func1()
print(l)        #[1, 2, 3]
l = [1,2,3]

def func1():
    l = ['a','b']
    def func2():
        nonlocal l
        l = 'CRTao'
    func2()
    print(l)    #CRTao

func1()
print(l)        #[1, 2, 3]

二、前向引用

函数即变量。下述代码中,函数f1可以写在f2前面,程序正常运行,不报错。因为可以把函数理解为存储一些字符串(函数体语句)的变量。

def f1():
    print('from f1')
    f2()

def f2():
    print('from f2')

f1()
'''
from f1
from f2
'''

三、递归

def calc(n):
    print(n)
    if int(n / 2) == 0:
        return n
    res=calc(int(n / 2))
    return res

res=calc(10)
print('res:',res)
'''
10
5
2
1
res: 1
'''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值