在前一篇:循环语句中已经接触到代码的重用了,为了缩减代码长度,开始使用循环语句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 好几把啰嗦)