函数和局部作用域

本文介绍了Python中的函数定义与使用方法,并深入探讨了变量的作用域问题。通过具体示例讲解了如何定义函数、传递参数以及如何处理不同作用域中的变量。

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

    在前一篇:循环语句中已经接触到代码的重用了,为了缩减代码长度,开始使用循环语句for和while,回忆一下,格式是 for i in range(x, y):  和  while i < x: 。可是在有些时候,单纯的循环语句满足不了我们的代码需求,为了将这一个或者多个代码块重复使用,我们用函数来“命名”一下“它们”,每次使用到“它们”的时候,只需要调用命名好的函数就可以了,这样不仅缩减了代码长度,又提高了可读性和可维护性。所以说,一个合格的程序猿,不能把所有的功能像丢垃圾一样堆进一个主函数里;而是要分离功能,模块化编程。

    啰嗦了这么多,下面开始讲述python中的函数使用规则。

    还记得分支语句那节里的样例吗,emmmm

age = eval(input())  
if age >= 18 and age <=60:  
    print("澳门首家线上*场上线啦!")  
elif age < 18:#这里的elif就是 else if 的缩写 233  
    print("You are too young to watch the video!")  
else:  
    print("Are you OK?!!!") 
现在我们把它变成一个函数并且使用它

def checkage(_age):
    if _age >= 18 and _age <= 60:
        print("澳门首家线上*场上线啦!")
    elif _age < 18:
        print("You are too young to watch the video!")
    else:
        print("Are you OK?")
checkage(17)
checkage(18)
age = eval(input())
checkage(age)

输入及输出

You are too young to watch the video!
澳门首家线上*场上线啦!
61
Are you OK?

def是define的缩写(你有没有发现python的关键词都是英文单词缩写?!)

    括号中的参数只用来完成函数中的运算(形式参数)只有函数使用时才存在,对函数外不造成影响,也可以使用多个参数,多个参数需要用逗号分隔开。同时还需要提到变量和作用域问题。

    为了讲清楚形参,也为了以后复习的方便,这里借用书上的代码样例

def variable_test():
    first_variable = 10
    second_variable = 20
    return first_variable * second_variable

一个简单的函数,没有参数,但是函数中却定义并赋值了两个变量,接下来。接上两段代码进行实验。

代码段1

print(variable_test())

代码段2

print(first_variable)

段1没问题,段2会报错,为什么呢,就是变量的作用于的问题。

    我们定义一个函数,在函数的代码块里,由于需要,我们定义了几个变量,然后这几个变量只能在函数中起作用,一旦离开函数,这几个变量就会被销毁。可以理解为“临时的变量”。这样一来就能解释代码段2的错误了。在C艹,Java中,作用域问题不仅存在于函数中,还存在于循环中,不同的代码块之间变量都可能无法通用,但是在python中,循环内定义赋值的变量在循环外同样可以调用的,python中是没有块级作用域的, 函数内的变量函数外无法使用,这是因为python存在局部作用域。

for i in range(0, 5):
     name = i
print(name)

猜一猜结果

结果是4

    那么想一想,如果在函数外给变量定义赋值,在函数内调用呢。

num = 1
def test1():
    print(num)
def test2():
    num = 2
    print(num)
test1()
test2()
test1()

结果是

1
2
1


再进一步呢

name = 'Tom'
def test1():
    name = 'Marry'
    def test2():
        name = 'Jack'
        print(name)
    test2()
    print(name)
test1()
print(name)
这样一来,猜猜结果。

Jack
Marry
Tom

猜对了吗?

python中有一个定义叫做,作用域链, 在调用变量时,首先查找当前作用域层级是否有定义,没有,就向上一层查找,直到报错。在内层调用外层作用域中的变量时,只会取用数值,对其操作只会在当前作用域内起作用,不会影响在外层作用域中的调用。

    换句话说,就是当前作用域内没有某个变量时,在外一层作用域中找到了,就会在内层作用域中临时生成一个变量,临时变量的数据取用外一层的变量数据,对临时变量做修改不会影响到外层作用域内的变量。(orz 好几把啰嗦)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值