函数基础
-
函数就是为了实现某一功能的代码片段, 写好后就可以重复利用
def getInfo(message): # 定义函数 return "getInfo: {}".format(message) # 函数返回值 info = getInfo("functions") # 函数调用 print(info)
def mySum(x, y): # 函数的多态 return x + y result = mySum(2, 3) print(result)
def findMaxNumber(map): if type(map) != list or len(map) == 0: return maxNum = map[0] for element in map: if maxNum < element: maxNum, element = element, maxNum return maxNum n = findMaxNumber([8, -1, 2, 3]) print(n)
-
函数参数
def Println(param="hello"): # 设置参数的默认值 return param print(Println()) print(Println("hello world"))
-
函数嵌套
def bubble(param): if type(param) != list or len(param) <= 3: return def opera(param): for i in range(len(param)): for j in range(len(param) - 1): if param[i] < param[j]: param[i], param[j] = param[j], param[i] return param return opera(param) l = bubble([23, 15, 17, 45, 9, 2, 4, 12]) print(l)
# 改造下列程序为函数形式,并说明改成函数后的优势 Sum = 1 for i in range(1, 11): if type(Sum) == int: Sum *= i print(Sum)
-
函数变量作用域
Python 函数中变量的作用域和其他语言类似. 如果变量是在函数内部定义的, 就称为局部变量, 只在函数内部有效. 一旦函数执行完毕, 局部变量就会被回收, 无法访问
# 局部变量在函数执行完毕后,会马上被系统回收,不再存在 def openfile(path): with open(path, "r+", encoding="utf8") as file: for line in file.readlines(): print(line) file.read() #Out: Traceback (most recent call last): File "/Users/chaoliu/Documents/Github/GoodProgramer/Python_Basis/Train/04.functions.py", line 68, in <module> file.read() NameError: name 'file' is not defined
# 不能随意的更改全局变量,除非加上global关键字 minNum, maxNum = 1, 10 def vail(): # global minNum, maxNum if minNum < maxNum: minNum, maxNum = maxNum, minNum return minNum vail() #Out: UnboundLocalError: local variable 'minNum' referenced before assignment
# 函数嵌套中,内部函数想要修改外部函数的变量,需要加上nonlocal def outer(): x = "local" def inner(): nonlocal x # nonlocal关键字表示这里的x就是外部函数outer定义的变量x x = 'nonlocal' print("inner:", x) inner() print("outer:", x) outer() # 输出 inner: nonlocal outer: nonlocal def outer(): x = "local" def inner(): x = 'nonlocal' # 这里的x是inner这个函数的局部变量 print("inner:", x) inner() print("outer:", x) outer() # 输出 inner: nonlocal outer: local
-
闭包
def nth_power(exponent): def exponent_of(base): return base ** exponent return exponent_of # 返回值是 exponent_of 函数 square = nth_power(2) # 计算一个数的平方 cube = nth_power(3) # 计算一个数的立方 print(square(2)) # 计算 2 的平方 print(cube(2)) # 计算 2 的立方 #Out: 4 # 2^2 8 # 2^3