上次学习了python中的数据结构与一些简单的操作,接下来需要学习的就是简单的函数和函数实现。
我们还是类比c语言,上次也说过python与c相比有很大的不同,不需要大括号但要严格的缩进来实现语句的控制,C语言需要一个主函数,他的各种调用都是由主函数开始的,而python不同其没有主函数定义一个函数就必须在函数外去书写其函数名去调用这个函数,如果你想在python中实现像C语言中的函数调用就要定义多个函数,把你想要嵌套的函数的函数名作为参数传到另一个函数中,因为在Python中任何东西都是对象,函数也不例外。下面举一些例子来反映一下:
def func_name(): //冒号是必须要有的格式,记得加 print 'hello,world' //函数中的操作语句,有严格的缩进格式 func_name() //函数名加括号表示调用函数
因为是函数,函数必要的几个因素是必不可少的
一.变量:局部变量和全局变量
1.局部变量:在函数内定义的变量,作用域为函数体。
#!/usr/bin/env pythonarg = 10 #全局变量def func_name(): arg = 2 #局部变量 print arg func_name()print arg
输出结果为 2 ,10
2.全局变量:在函数外定义在函数内使用global关键字标记,作用域全局。
#!/usr/bin/env pythonarg = 10 def func_name(): gloabal arg #使用global定义arg为全局变量 arg = 6 print argfunc_name()print arg
输出结果为: 6 , 6
需要注意的是如果函数体内没有定义局部变量,可以直接调用全局变量
二.传参
只要是函数必不可免要有参数传入函数体,python中参数可以是一个也可以是多个,因为python中所有东西都是对象函数也不例外,所以需要注意的是,函数也可以作为参数传入函数中,这样就产生了各种高阶函数。
按照类型分,参数可分为:位置参数和关键字参数
1.位置参数:即传值的时候要记好每个参数的顺序需要一一对应,如:
def func_name(arg1,arg2,...): #...代表省略 print arg1,arg2func_name(1,2,...)
如果想要每个值都对应的话,需要控制好参数位置使其对应。
2.关键字参数:不需要控制顺序
def func_man(i,m,k): print i,m,k func_man(m=2,k=8,i=3)
当然位置传参和关键字传参也可以混合使用,但位置参数必须在关键字参数之前,否则会有语法错误。
def func(arg1,arg2,arg3): print arg1,arg2,arg3 func(100,arg3=3,arg2=2) #位置参数需放在关键字参数前面
3.默认参数:在形参中有初始化
def func(arg,arg1=3): #函数定义时带默认值的参数需放在其他参数的后面 print arg,arg1 func(2,4) #对默认值参数传参会覆盖原有默认值
4.可变参数:可变参数也分为两种可变位置参数,和可变关键字参数
可变位置参数:
def func_name(*args): #args是一个元组 expression func_name(1,2,3,...)
这种定义方式只能以位置传递参数进去。
可变关键字传参:
def func_name(**kwargs): #kwargs是一个字典 expression func_name(k1=vi,k2=v2,...)
需要混合使用时,非可变参数必须要在可变参数之前,可变位置参数要在可变关键字参数之前。
5.参数解包
在函数调用时若要传入列表,如果一个个传会不方便,那就需要解包,如:
#!/usr/bin/env pythondef func(i,j,k): print i,j,k li=[1,2,3]func(*li) #将列表解包并传递入函数,*用于解包序列是位置参数d = {'i':2,'j':4,'k':9}func(**d) #**用于解包序列为关键字参数
print语句是输出到标准输出,但函数很多时候都不需要输出到标准输出而是需要函数的结果,print语句在此就没啥用于是就要用到return语句,与C语言不同的是python中return可以返回任何对象,但需要函数外的变量来接收。当函数中没有return语句时,函数会默认返回None,所以,所有python函数都有返回值。