def function_name():
函数体
函数调用()
不定长参数:
1:单个元素
def add(*args): sum=0 for i in args: sum+=i print(sum) add(2,4,2,9)
2:类似于字典中键值对的不定长形式
def print_info(*args,**kvargs): #这两个位置不能变 如果 #def print_info(sex=man,*args,**kvargs): #这三个位置不能变 print(args) for i in kvargs: print('%s:%s'%(i,kvargs[i])) print_info('lixiw',23,name='dss',age=40,len=109) #print_info('lixiw',23,name='dss',age=40,len=109)
#'sss'被默认参数占据('lixiw'不会被打印),第一行打印结果 (23,)
关于不定长参数的位置:*args放在左边,**kvargs放在右边
关于返回值return
1.函数里如果没有return,会默认返回一个None
2.如果return多个对象,那么python会把多个对象封装成一个元组返回
作用域:
- L:local,局部作用域,即函数中定义的变量;
- E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;
- G:globa,全局变量,就是模块级别定义的变量;
- B:built-in,系统固定模块里面的变量,比如int, bytearray等。 搜索变量的优先级顺序依次是:作用域局部>外层作用域>当前模块中的全局>python内置作用域,也就是LEGB。
global关键字
当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了,当修改的变量是在全局作用域(global作用域)上的,就要使用global先声明一下,代码如下:
count = 10 def outer(): global count #count是全局变量,内部需要使用,要加global print(count) count = 100 print(count) outer() #10 #100
nonlocal关键字
global关键字声明的变量必须在全局作用域上,不能嵌套作用域上,当要修改嵌套作用域(enclosing作用域,外层非全局作用域)中的变量怎么办呢,这时就需要nonlocal关键字了
def outer(): count = 10 def inner(): nonlocal count count = 20 print(count) inner() print(count) outer() #20 #20
(1)变量查找顺序:LEGB,作用域局部>外层作用域>当前模块中的全局>python内置作用域;
(2)只有模块、类、及函数才能引入新作用域;
(3)对于一个变量,内部作用域先声明就会覆盖外部变量,不声明直接使用,就会使用外部作用域的变量;
(4)内部作用域要修改外部作用域变量的值时,全局变量要使用global关键字,嵌套作用域变量要使用nonlocal关键字。nonlocal是python3新增的关键字,有了这个 关键字,就能完美的实现闭包了。
函数f与f():
1.函数名可以进行赋值(变量)
2.函数名可以可以作为函数参数,还可以作为函数的返回值
递归:
1.调用自身函数
2.有一个结束条件
斐波那契数列