零基础Python教程-函数及模块的使用
今天和大家分享一下零基础Python教程中的-函数及模块的运用,在学习本节内容之前,我们先来一起做道数学题。已知:半径分别为0.1、0.2、0.3的三个圆,分别求这三个圆的面积。很多读者可能要笑一下,这不是小学的数学问题吗?
函数
S = π * r * r
# 那么
S1 = π * 0.1 * 0.1
S1 = π * 0.2 * 0.2
S1 = π * 0.3 * 0.3
在上面的表达式中,我们做了3次求圆的面积,这样的代码实际上就是重复代码。
对于上面的表达式,我们可以将面积公式封装到函数中。在需要计算面积的时候,调用函数即可。
在Python中可以使用def关键字来定义函数,和变量一样每个函数也有一个名字,而且命名规则跟变量的命名规则是一致的。
在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号,然后,在缩进块中编写函数体,函数的返回值用return语句返回。
在了解函数的定义及作用之后,我们对上述代码进行重构。重构就是在不影响代码执行结果的前提下对代码的结构进行调整。
def circle_area(r):
S = 3.14 * r * r print('%.4f' %S)
circle_area(0.1)
circle_area(0.2)
circle_area(0.3)
很多编程语言都支持函数,但是Python对函数处理与其他编程语言有一个显著的区别就是:Python支持函数的参数设有默认值。
例如:我们写一个计算x*x的函数。
def power(x):
return x * x
当我们调用power函数时,必须传入有且仅有的一个参数x。
那么问题来了,如果我们要计算x*x*x怎么办?你可能会说我们再定义一个新的函数计算。那要是需要计算x*x*x*x又该怎么办呢?我们不能无限的定义新函数。
这个时候,相信聪明的你已经想到了。我们可以将power(x)重新定义为power(x,n)。用来计算x的n次方。
def power(x, n):
s = 1
while n > 0:
= n - 1 s = s * x return s
power(2,5)
这样我们就可以计算任意n次方。
但是此时我们调用旧函数就会报错,原因是我们增加了一个参数,导致旧的代码因为缺少一个参数而无法正常调用:
这个时候,Python的默认参数就派上用场了。
def power(x, n=2):
s = 1
while n > 0:
= n - 1
s = s * x
return s
这样,当我们调用power(5)时,相当于调用power(5, 2)。
注意:
一是必选参数在前,默认参数在后,否则Python的解释器会报错(思考一下为什么默认参数不能放在必选参数前面)
二是如何设置默认参数。
当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。
使用默认参数有什么好处?最大的好处是能降低调用函数的难度。
模块
相信很多朋友在给函数、变量命名时都非常纠结。至少我本人是这样的。因为Python没有函数重载的概念,那么我们在一个.py文件中命名了两个同名函数应该怎么办呢?例如:
def test():
print("Good")
def test():
print("Bad")test()
我们如何解决这种问题呢?Python引入了模块的概念。我们可以将这两个函数分别写到不同的文件中,通过import关键字进行导入从而引用。
# good.py
def test():
print("Good")
# bad.py
def test():
print("Bad")
当我们想要使用test()函数时,可以如下:
from good import test
# 输出Good
test()
#输出Bad
from bad import test
test()
但是,下面这种情况,程序会调用最后一个模块的函数:
from good import test
from bad import test
test()
需要说明的是,如果我们导入的模块除了定义函数之外还中有可以执行代码,那么Python解释器在导入这个模块时就会执行这些代码,事实上我们可能并不希望如此,因此如果我们在模块中编写了执行代码,最好是将这些执行代码放入如下所示的条件中,这样的话除非直接运行该模块,if条件下的这些代码是不会执行的,因为只有直接执行的模块的名字才是“\_\_main\_\_”。
通俗的理解就是:当你的脚本文件是被直接运行的时候,则if__name__=='__main__'后的可执行代码就会执行,如果你的代码是被导入的,那么就不会直接运行之后的代码。
好了,今天的分享到这里就结束了,希望大家可以持续关注马哥教育官网,每天都会有大量优质的文章与大家分享欧!免责声明:内容和图片源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。