函数
函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可
优点:
- 代码重用
- 保持一致性
- 可拓展性
函数的定义主要有如下要点:
- def:表示函数的关键字
- 函数名:函数的名称,日后根据函数名调用函数
- 函数体:完成函数的具体功能
- 参数:为函数体提供数据
- 返回值:当函数执行完毕后,可以给调用者返回数据。
创建一个函数:
def hello():#函数名 pass #函数体 return ('Hello !') #返回值 hello()#调用函数
返回值
要想获取函数的执行结果,就可以用return语句把结果返回
注意:
- 函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束
- 如果未在函数中指定return,那这个函数的返回值为None
参数:写在def语句中函数名后面的变量通常就做函数的形参,而调用函数的时候提供的值是实参
我们在定义函数的时候根据需求的不同会用到各种类型的参数,有关键字参数、位置参数、默认参数、可变参数等。
def test(x,y,z): print(x) print(y) print(z) test(1,2,3)#位置参数 test(x=2,y=3,z=4)#关键字参数 test(5,6,z=8)#位置参数与关键字参数混用,但关键字参数必须放在位置参数后面 #默认参数 def test1(x,y,z=8): print(x+y+z) test1(5,7) test1(5,8,9) #可变参数 # *args 会把多传入的参数变成一个元组形式, #*将一组可变数量的位置参数集合成参数值的元组 def test2(*args): print(args)#集合成元组的形式 print(args[0]) print(*args)# 去掉元组形式 test2([1,2,3,5],'man','woman') test2(*('boy',1,4,)) # **kwargs 会把多传入的n多个关键字参数变成一个dict形式 #**可以将关键字参数收集到一个字典当中 def test3(**kwargs): print( kwargs)#集合成字典的形式 print( *kwargs)#all the keys print( kwargs['age']) test3(name='Mike',age='22',sex='male') test3(**{'name':'Jack','age':30,'sex':'male'}) def test4(args1,args2): return args1 ,args2 #return以元组的形式返回 res=test4(2,5) print(res)
全局与局部变量
在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
当全局变量与局部变量同名时:
在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
num=66 #全局变量 def func(): num=88 #局部变量 这个变量的作用域就是该函数 print(num) func() >>>88 #除了字符串、数字外,其他像列表、字典、集合、类等这些复杂的数据类型都可以在局部里修改全局变量 name='Li' name_list=['Mike','Jack','Mar'] def change_name(): name="chen" name_list[0]='二师兄' change_name() print(name) print(name_list) >>>Li >>>['二师兄', 'Jack', 'Mar']
嵌套函数
Python的函数是可以嵌套的,也就是说可以将一个函数放在另一个里面。
def func(): def hello(): print("hello!") hello() func()
递归
在函数内部,可以调用其他函数。如果一个函数在内部调用自身,这个函数就是递归函数
#阶乘 def factorial(n): n=int(n) if n == 1: return 1
else: return n * factorial(n-1) print(factorial(3))
递归特性:
1. 必须有一个明确的结束条件
2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)(递归的最高调用层数为999层)
匿名函数(lambda表达式)
power=lambda x:x*x print(power(2)) #是不是感觉用lambda也方便不了多少?不过匿名函数主要是和其它函数搭配使用的呢,如下: result = map(lambda x:x**2,[1,5,7,4,8]) for i in result: print(i)
高阶函数
变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
def add(a,b ,f): return f(a)+f(b) add(2,3,int)
内置函数 戳:https://docs.python.org/2/library/functions.html
sorted()对一个集合进行排序 :
#!/usr/bin/env/ python # -*-coding:utf-8 -*- a={ 1:'chen',10:'alex',5:'li' } print(sorted(a))#把key排序后输出 print(sorted(a.items()))#按key排序 print(sorted(a.items(),key=lambda x:x[1]))#按value排序 [1, 5, 10] [(1, 'chen'), (5, 'li'), (10, 'alex')] [(10, 'alex'), (1, 'chen'), (5, 'li')]