函数是可以实现一些特定功能的小方法或小程序
定义函数function的方法:
def function_name(arg1,arg2[,...]):
statement
[return value]
注意事项:
1.def开头,代表定义函数,def和函数名中间要敲一个空格;
2.返回值不是必须的,如果没有renturn语句,则默认返回值None;
3.函数名必须以下划线或字母开头,可以包含任意字母、数字或下划线的组合,区分大小写且不能是保留字;
py使用名称空间的概念存储对象,这个名称空间就是对象作用的区域,不通对象存在域不同作用域。下面是不通对象的作用域规则:
1.每个模块都有自己的全局作用域;
2.函数定义的对象属局部作用域,只在函数内部有效,不会影响全局作用域中的对象。
3.赋值对象属于局部作用域,除非使用global 关键字进行声明。
LGB规则是py查找名字的规则,详情如下:
1.大多数名字引用在三个作用域中查找,先局部,再全局,最后内置。
(即在函数内部时需要使用相同名字的变量时,优先取函数内部的赋值结果,如实例中的b ,当局部变量中没有找到a,则取全局变量及其赋值,如实例中的a)
eg:b在局部作用域中找到,a在全局作用域中找到。
>>> a=2 >>> b=3 >>> def test(b): test=a*b return test >>> print test(10) 20
2.如想在局部作用域中改变全局作用域的对象,必须使用global 关键字
#没有global时的情况(局部变量的对象只能作用于函数内,print name 打印出来的应该是全局变量的对象)
>>> name=‘testing‘ >>> def set(): name=‘test‘ return name >>> print set()test >>> print name testing
#使用global后的情况
>>> name=‘testing‘ >>> def set(): global name name=‘test‘ return name >>> set() ‘test‘ >>> print name test >>> print set() test
总结:global声明把赋值的名字映射到一个包含它的模块的作用域中,相当于全局变量使用
参数传递规则:
在一个函数中对不可变参数赋值不会影响(全局变量值)调用者
>>> a=7 >>> def test(a): a=a+1 print a >>> test(a) 8 >>> print a 7
在一个函数中对可变参数赋值会影响(全局变量值)调用者
>>> a=[1,2] >>> b=7 >>> def test(a,b): a[0]=8 b=6 print a,b >>> test(a,b) [8, 2] 6 >>> print b 7 >>> print a [8, 2]
当参数是对象指针时,无需定义传递的对象类型,eg:
>>> def test(a,b): return a+b >>> test(1,2) 3 >>> test(‘a‘,‘b‘) ‘ab‘ >>> test([1],[2]) [1, 2] >>>
函数中的参数接收传递的值,参数可分默认参数,如:
def function(ARG=VALUE)
元组(Tuples)参数:
def function(*ARG)
字典(dictionary)参数:
def function(**ARG)
一些函数规则:
默认值必须在非默认参数之后;
在单个函数定义中,只能使用一个tuple参数(*ARG)和一个字典参数(**ARG)。
tuple参数必须在连接参数和默认参数之后。
字典参数必须在最后定义。