1.函数
函数的作用就是避免重复,python使用def来定义函数
def fac(num): """求阶乘""" result = 1 for n in range(1, num + 1): result *= n return result m = int(input('m = ')) n = int(input('n = ')) # 当需要计算阶乘的时候不用再写循环求阶乘而是直接调用已经定义好的函数 print(fac(m) // fac(n) // fac(m - n))
函数的参数可以有默认值。函数使用中如果不传这个参数,则使用默认值
from random import randint def roll_dice(n=2): """摇色子""" total = 0 for _ in range(n): total += randint(1, 6) return total def add(a=0, b=0, c=0): """三个数相加""" return a + b + c # 如果没有指定参数那么使用默认值摇两颗色子 print(roll_dice()) # 摇三颗色子 print(roll_dice(3)) print(add()) print(add(1)) print(add(1, 2)) print(add(1, 2, 3)) # 传递参数时可以不按照设定的顺序进行传递 print(add(c=50, a=100, b=200))
参数前面加 *,表示参数是可变的
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))
2.模块
在python中没有函数重载的概念,所以如果多人合作开发使用了相同的函数名,则会被后面的覆盖。在python中,一个文件就代表了一个模块。
# module1.py def foo(): print('hello, world!') # module2.py def foo(): print('goodbye, world!') # 使用这种方法 from module1 import foo # 输出hello, world! foo() from module2 import foo # 输出goodbye, world! foo() # 或者这种 import module1 as m1 import module2 as m2 m1.foo() m2.foo() # 覆盖的情况 from module1 import foo from module2 import foo # 输出goodbye, world! foo()
如果导入的模块除了函数之外还有可执行代码,那么在导入时就会执行,为了避免此情况,在模块中加入判断
# module3.py def foo(): pass def bar(): pass # __name__是Python中一个隐含的变量它代表了模块的名字 # 只有被Python解释器直接执行的模块的名字才是__main__ if __name__ == '__main__': print('call foo()') foo() print('call bar()') bar() 在进行 import module3 的时候,因为模块的名字是module3不是 __main__ 而不会执行
3.变量作用域
在函数中声明的变量都是局部变量,只能在函数中使用,如果想让变成成为全局变量,用global关键字声明。尽量不要用global!!!
def foo(): global a a = 200 print(a) # 200 if __name__ == '__main__': a = 100 foo() print(a) # 200
本文为看恩吧原创文章,转载无需和我联系,但请注明来自knsay.com