函数:
指在开发程序时,需要某块代码使用多次,为了提高编写的效率和代码的复用,把具有独立功能的代码块组织为一个小模块,这就是函数。
函数的定义:
def 函数名():
代码
调用函数:定义完函数的时候,函数时不会立即自动执行,需要调用才会执行,我们通过函数名()就可以调用并执行函数了。在函数中使用return会结束这个函数。后面的代码再华丽也不会被执行。但一个return返回了多个参数,会以元组的形式进行输出。
函数需要有返回值,这样才能对函数处理的结果进行接下来的操作。
如果在代码中执行了help(test):可以看到函数的文档说明。
定义带有参数的函数:
def add2num():
a = 11
b = 22
c = a+b
print c
调用执行带有参数的函数的时候,参数需要写在函数名后面的小括号中,传递参数,不可少!
总结:定义函数时,写在小括号中的参数,用来接受参数,称为形参。
调用函数时,写在小括号中的参数,用来传递参数,称为实参。注意实参在没有用关键字形式执行的时候,当有多个参数的时候,传递时有一一对应关系,即有先后顺序。
函数同样可以嵌套使用。
函数的基本知识
1.局部变量:
局部变量就是指在函数中定义的变量,作用范围只在这个函数中,在函数外部是不能使用的,常常用在需要在函数中保存数据进行储存的,函数中存在,函数执行结束就不存在了。
2.全局变量:
是指在函数外定义的变量,可以在所有的函数中进行访问。
注意:如果全局变量和局部变量同名,代表的是在函数内部定义了一个局部变量,而不是修改了全局变量的值。想要修改全局变量的值,可以是用global函数进行声明即可。
3.缺省参数
是指在定义函数的时候,形参是用键值对的参数存储的,那么在调用函数的时候,如果没有传入对应的实参,那么就用默认值。在定义缺省参数的时候,一定要放在参数列表的最后面。
4.不定长参数
有时候我们可能需要一个函数能够处理比当初声明函数是更多的参数,这个参数就叫做不定长参数,加了*的参数args会存放所有未命名的变量参数,args为元组。加了**的参数kwargs会存放命名参数,kwargs为字典。
5.可变类型:数据能够修改
不可变类型:数据不能直接修改
递归函数
递归函数是指在函数内部自己调用自己。注意在使用递归函数的时候,需要有一个终止条件。
例如计算阶乘:
def calNum(num):
if num >= 1:
result = num * calNum(num -1)
else:
result = 1
return result
匿名函数
用lambda关键字能够创建小型匿名函数,这种函数得名于省略了def声明函数的标准步骤。
lambda函数能够接受任何数量的参数,但是只能返回一个表达式的值。
匿名函数不能直接调用print函数,因此需要一个表达式。
变量名 = lambda 形参1,形参2 …… : 表达式
调用匿名函数时通过变量名(实参1,实参2)实现的。
举例:
stus = [
{"name": "zhangsan", "age": 18},
{"name": "lisi", "age": 19},
{"name": "wangwu", "age": 17}
]
通过age对字典里的值进行排序。
>>> stus.sort(key = lambda x: x['age'])
>>> stus
[{'age': 17, 'name': 'wangwu'}, {'age': 18, 'name': 'zhangsan'}, {'age': 19, 'name': 'lisi'}]
列表推导式
就是指轻量级循环创建列表
1.基本方式
a = [x for x in range(4)] # a = [1,2,3,4]
2.在if循环中使用
a = [ x for x in range(3,10) if x % 2 == 0] # a = [4,6,8]
3.在for循环中使用
a = [ (x,y) for x in range(1,3) for y in range(3)] #[(1,0),(1,1),(1,2),(2,0),(2,1),(2,2)]
set list tuple
set集合的定义是{1,2,3,4,5,4,3,2} 但是set集合,相同的数据值保存一份,不支持索引。
list的定义是[1,2,3,4,5,4,3,2],可以重复,可以修改。有索引。
tuple的定义是(1,2,3,4,5,4,3,2)可以重复,不可修改,有索引。