前言
经过几天的学习,我觉得有必要在这里带大家做一些练习来巩固之前所学的知识。前几天的学习足够让我们来构造简单的编程逻辑,我们本章内容将将为大家讲解什么是函数和模块。
一、函数
1、问题思考
在讲解本章节的内容之前,我们先来回顾一道数学题:判断输入的正整数是不是回文数(不清楚的直接上车),如果问题变成求121、1213分别是不是回文数,则答案是不是呼之欲出了。可以用Python的程序来进行判断,代码如下所示:
num121 = 121
temp = num121
num = 0
while temp > 0:
num *= 10
num += temp % 10
temp //= 10
if num121 == num:
print('%d是回文数' % num121 )
else:
print('%d不是回文数' % num121 )
num1213 = 1213
temp = num1213
num = 0
while temp > 0:
num *= 10
num += temp % 10
temp //= 10
if num1213 == num:
print('%d是回文数' % num1213 )
else:
print('%d不是回文数' % num1213 )
不知道大家是否注意到,在上面的代码中,我们进行了两次回文数的计算,这样的代码实际上就是重复代码。编程大师Martin Fowler先生曾经说过:“代码有很多种坏味道,重复是最坏的一种!”,要写出高质量的代码首先要解决的就是重复代码的问题。对于上面的代码来说,我们可以将计算回文数的功能封装到一个称之为“函数”的功能模块中,在需要计算回文数的地方,我们只需要“调用”这个“函数”就可以了,接下来告诉大家怎么做。
2、定义函数
在Python中可以使用def
关键字来定义函数,和变量一样每个函数也有一个自己的名字,而且命名规则跟变量的命名规则是一致的。在函数名后面的圆括号中可以放置传递给函数的参数,这一点和数学上的函数非常相似,程序中函数的参数就相当于是数学上说的函数的自变量,而函数执行完成后我们可以通过return
关键字来返回一个值,这相当于数学上说的函数的因变量。
在了解了如何定义函数后,我们可以对上面的代码进行重构,所谓重构就是在不影响代码执行结果的前提下对代码的结构进行调整,重构之后的代码如下所示。
def fac(num):
temp = num
num1 = 0
res = ''
while temp > 0:
num1 *= 10
num1 += temp % 10
temp //= 10
if num == num1:
res = '%d是回文数' % num
else:
res = '%d不是回文数' % num
return res
print(fac(121))
print(fac(1213))
3、函数的参数
在Python中,函数的参数可以有默认值,也支持使用可变参数,因为我们在定义一个函数的时候可以让它有多种不同的使用方式,下面是个小例子。
def add(a=0, b=0, c=0):
"""三个数相加"""
return a + b + c
print(add())
print(add(1))
print(add(1, 2))
print(add(1, 2, 3))
# 传递参数时可以不按照设定的顺序进行传递
print(add(c=50, a=100, b=200))
二、模块
1、问题思考
python中用模块管理函数,先看下边的小例子,大家觉得最后会输出什么?
def fac():
print("函数fac1")
def fac():
print("函数fac2")
fac()
很显然输出结果是:"函数fac2"。所以给变量、函数这样的标识符起名字都是一个让人头疼的问题,因为我们会遇到命名冲突这种尴尬的情况。但是上述的情况是一个相对简单的场景,很容易避免。但是如果是一个多人团队进行项目开发的时候,就会有可能有很多人定义了名字为fac
的函数,解决这种问题就需要我们引入模块的概念。
2、使用模块
Python中每个文件就代表了一个模块(module),我们在不同的模块中可以有同名的函数,在使用函数的时候我们通过import
关键字导入指定的模块就可以区分到底要使用的是哪个模块中的foo
函数,具体例子如下:
文件1:module1.py
def fac():
print("函数fac1")
文件2:module2.py
def fac():
print("函数fac2")
文件3:main.py
import module1 as m1
import module2 as m2
# 输出:函数fac1
m1.fac()
# 输出:函数fac2
m2.fac()
结尾
学习是一个漫长的过程,也是一个枯燥的过程,如果能够坚持下来,一定能学好python,并可以把它熟练的运用在生活和工作中去,提高自身效率。