写在前面的话
今天我们进入第四天的学习,本节内容为函数与模块。今天的知识,是要小伙伴们融会贯通的,请与前面的第三天内容,分支与循环一起做练习。
06.函数与模块
一.函数
1. 基础
假如:我们想要打印如下图案
*
**
***
****
*****
*
**
***
****
*****
******
*******
********
甚至行数更多,怎么办呢,我们不可能每个地方都来一下这几句代码,太浪费精力了,重复造轮子。因此我们会将它抽象,构建一个函数,或者后面的类,模块。
其实宗旨就只有一个,包装,封装,以便代码重用。
def func(row=5):
for i in range(1, row + 1):
print('*'*i)
这个代码,我们已经很熟悉了,只不过我们将它包在了一个函数里,函数就是为了实现某些功能,利于代码的重用。
注意事项:
def func(row=5):
row被成为参数,row本身是变量,其值是可以被调用者的变量值替代的。而row = 5是默认参数值,如果调用者不传参数,则该值就为5,你可以这样使用:
def func(row=5):
for i in range(1, row + 1):
print('*'*i)
func() #不带参数,因为幽默认值
func(6) #带参数
func(row = 7) #指定参数名称
a = 10
func(a) #指定参数名称
2. 参数
考虑最简单的求三个数的和函数
def add(a, b=0, c=0): #未设默认值的参数,应放到有默认参数值的前面,例如:add(a=0,b,c)这个是错误的。
"""三个数相加"""
return a + b + c
print(add(3)) #a=3, b=0, c=0
print(add(3, c=4)) #a=3, b=0, c=4
可变参数
# 在参数名前面的*表示args是一个可变参数
def add(*args):
total = 0
for val in args:
total += val
return total
# 在调用add函数时可以传入0个或多个参数
print(add())
print(add(1))
print(add(1, 2))
print(add(1, 2, 3))
print(add(1, 3, 5, 7, 9))
二.模块
考虑我这里有个python文件,test.py,内容如下:
def add(a, b=0, c=0): #未设默认值的参数,应放到有默认参数值的前面,例如:add(a=0,b,c)这个是错误的。
"""三个数相加"""
return a + b + c
print(add(3)) #a=3, b=0, c=0
print(add(3, c=4)) #a=3, b=0, c=4
现在,项目组里张三想用我的模块test.py,那么张三只需要import test,例如:
import test
print(test.add(1)) #a=3, b=0, c=0
输出结果:
3
7
1
但该输出结果并不是我们需要的,Python解释器在导入这个模块时就会执行这些代码,因此如果我们在模块中编写了执行代码,最好是将这些执行代码放入如下所示的条件中,这样的话除非直接运行该模块,if条件下的这些代码是不会执行的,因为只有直接执行的模块的名字才是"__main__"。
修改test.py如下:
[i]def add([i]a, [i]b=0, [i]c=0): #未设默认值的参数,应放到有默认参数值的前面,例如:add(a=0,b,c)这个是错误的。
"""三个数相加"""
return a + b + c
if __name__ == "__main__":
print(add(3)) #a=3,b=0,c=0
print(add(3, [i]c=4)) #a=3,b=0,c=4