day06_函数

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.有一个结束条件

斐波那契数列

 

posted @ 2020-06-08 19:29  xinZhiZhu  阅读(141)  评论(0编辑  收藏  举报