在未使用函数模块之前,如果需要进行阶乘的运算,我们需要像下面这样:
1 m=int(input('输入一个数:')) 2 fm=1 3 for num in range(1,m+1): 4 fm*=num 5 print(fm)
当进行多项阶乘运算的时候代码中的重复部分会造成代码冗长:
m=int(input('m = ')) n=int(input('n = ')) z=int(input('z= ')) fm = 1 for num in range(1, m + 1): fm *= num fn = 1 for num in range(1, n + 1): fn *= num fz = 1 for num in range(1, z + 1): fz *= num print(fm // fn // fz)
所以我们需要封装一个函数模块,在阶乘计算的时候调用它,代码会变得相对简洁:
from math import factorial m=int(input('m=:')) n=int(input('n=:')) z=int(input('z=:')) print(factorial(m)//factorial(n)//factorial(z))
函数的定义使用def来进行定义,其命名规则与变量一致,在函数名后面的圆括号内是传递参数,相当于数学中的自变量,运行完之后通过return返回一个值,相当于数学中的因变量python中的函数参数可以有默认参数,也可以设置成可变参数,所以python不需要像其他语言一样支持重载,如以下这个例子:
def power_7(m=3): fm=1 for num in range(1,m+1): fm*=num return fm print(power_7()) #无指定参数就是默认值输出3! print(power_7(5))
在实际中,一个函数的参数个数我们是无法确定的,这时候可以用可变参数的方式对函数进行定义:
def add_7(*args): #在参数名前打一个*表示其是可变参数 for num in args: total+=num return total print(add_7()) print(add_7(5)) print(add_7(1,2,3,4,5,6,7,8))
用模块管理函数
在同一个.py文件中可能定义了相同名字的函数造成冲突,这时候需要模块来管理函数。python中每个文件是一个模块,不同的模块允许有同名函数:
module1.py
def seven_7(): print('hello world')
module2.py
def seven_7(): print('goodbye world')
test.py
import module1 as m1 import module2 as m2 print(m1.seven_7()) print(m2.seven_7())
在模块当中可能还含有其他可执行的代码,在导入该模块时会执行,我们需要如下配置条件来避免这种情况:
module3.py
def foo(): pass def bar(): pass # __name__是Python中一个隐含的变量它代表了模块的名字 # 只有被Python解释器直接执行的模块的名字才是__main__ if __name__ == '__main__': print('call foo()') foo() print('call bar()') bar()
这样的话除非直接运行该模块,不然if条件下的语句不会被执行到。