函数和模块的使用:
—在Python中可以使用def关键字来定义函数
—函数的参数:
在Python中,函数的参数可以有默认值,也支持使用可变参数,所以Python并不需要像其他语言一样支持函数的重载
from random import randint
def roll_dice(n = 2):# 有俩颗色子
total = 0
for i in range(n): #循环俩次
total += randint(1,6) #色子俩次点数相加
return total# 返回7总点数
def add(a=0,b=0,c=0):
return a + b + c
#如果没有指定参数那么使用默认参数
print(roll_dice())
#摇三颗色子
print(roll_dice(3))
print(add())
print(add(1,2))
print(add(1,2,3))
print(add(c=50,a=100,b=200))
- 上面如果在调用函数的时候如果没有传入对应参数的值时将使用该参数的默认值,所以在上面的代码中我们可以用各种不同的方式去调用add函数,这跟其他很多语言中函数重载的效果是一致的。
------其实上面的add函数还有更好的实现方案,因为我们可能会对0个或多个参数进行加法运算,而具体有多少个参数是由调用者来决定,我们作为函数的设计者对这一点是一无所知的,因此在不确定参数个数的时候,我们可以使用可变参数
#在参数名前面的*表示是一个可变参数
#即在调用add函数是可以传入0或多个参数
def add(*args):
total = 0
for val in args:
total += val
return total
#可变参数
print(add())
print(add(1))
print(add(1,2))
print(add(1,3,7,5,9))
用模块管理函数:
给变量、函数这样的标识符起名字都是一个让人头疼的问题,因为我们会遇到命名冲突这种尴尬的情况
def foo():
print('hello,world')
def foo():
print('goodbay,world')
foo()
Python中每个文件就代表了一个模块(module),我们在不同的模块中可以有同名的函数,在使用函数的时候我们通过import关键字导入指定的模块就可以区分到底要使用的是哪个模块中的foo函数
·······················································································································
全局变量和局部变量:
···在实际开发中,我们应该尽量减少对全局变量的使用,因为全局变量的作用域和影响过于广泛,可能会发生意料之外的修改和使用,除此之外全局变量比局部变量拥有更长的生命周期,可能导致对象占用的内存长时间无法被垃圾回收。事实上,减少对全局变量的使用,也是降低代码之间耦合度的一个重要举措,同时也是对迪米特法则的践行。减少全局变量的使用就意味着我们应该尽量让变量的作用域在函数的内部,但是如果我们希望将一个局部变量的生命周期延长,使其在函数调用结束后依然可以访问,这时候就需要使用闭包。