函数
函数的作用:
1、减少重复代码
2、扩展性强
3、使程序变的可维护
函数的定义:
def test(): print("I'm yao")
#def 是固定的,test为函数名一对小括号不可不少
函数的调用:
def test(): print("I'm yao") test() # 函数的调用 # 结果: I'm yao
形参:
def test(x, y): print("I'm yao") print(x*y) test(5,6) # 函数的调用
实参:
关键字参数:
默认参数
参数组
函数的各种参数总结:
1、形参和实参是一 一对应的
2、关键字参数和形参的位置无关
3、关键字参数和实参同时出现,关键字参数永远放在实参的右边。
4、形参和默认参数同时出现,默认参数永远写在最右边
5、参数组永远放在最右边
嵌套式函数:
def test(x, y, z): print(x, y, z) def test1(a, b): print(a, b) test1(4, 5) # 调用嵌套函数 test(1, 2, 3) # 调用第一层函数
递归函数:
def fun(x): if x // 2 > 0: fun(x//2) print(x) # x是个列表,一次打印 fun(10) # 结果: 1 2 5 10
递归函数的特性:
1、必须有一个明确的结束调教
2、每次进入更深一层递归时,文图规模相比上次递归都应该有所减少
3、递归效率不高,递归层次过多会导致栈溢出。
函数的返回值:
作用:
1、一旦你的函数开始调用并开始执行,那你函数的外部程序就没有办法再控制函数的执行过程,此时玩不程序只能等待函数的执行结果。为什要等待函数的结果,因为外部程序要根据函数的执行结果来判断下一步该怎么走,这个结果就是以return的形式返回给外部程序。
2、return代表着函数的结束
3、return可以返回任意数据类型
4、对于用户来讲,函数可以返回任意数量的值,但对于python本身来讲,函数只能返回一个值,如果return后有多个值,那么结果返回也是一个值,这个值是以元组的形式存在的。
高阶函数:
变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
示例:
def add(x,y,z): return z(x) + z(y) test = add(3, -6, abs) # abs函数是绝对值 print(test)
内置函数:
局部变量和全局变量
局部变量:
在子程序中定义的变量是局部变量,在程序一开始定义的变量称为全局变量,全部变量的作用域是整个程序,局部变量的作用域是定义该变量的子程序,当全局变量与局部变量同名时,再多定义局部变量的子程序内,局部变量起作用,其他地方那个全局变量起作用。
全局变量:
在整个过程中都生效的变量叫做全局变量
示例:
x = 'xiaofeng' # 全局变量 def case(): print(x) y = 'oldboy' # 局部变量,出了这个函数就不能调用了 print(y) case() print(x) print(y) # 结果 "C:Program FilesPython35python.exe" D:/python_progream/python_s15/day4/function_1.py Traceback (most recent call last): File "D:/python_progream/python_s15/day4/function_1.py", line 40, in <module> print(y) NameError: name 'y' is not defined # 因为y不是全局变量 xiaofeng xiaofeng
匿名函数:
test = lambda x, y:(x + y) # lambda定义匿名函数 print(test(3, 5)) # 结果 8
二分查找
data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35] def binary_search(dataset, find_num): print(dataset) if len(dataset) > 1: mid = int(len(dataset) / 2) if dataset[mid] == find_num: # find it print("找到数字", dataset[mid]) elif dataset[mid] > find_num: # 找的数在mid左面 print("