函数

一.函数:对功能或者动作的封装

  语法:

    def  函数名(形参列表):

      函数名(代码块,return)

    函数名(实参列表)

  形参:在函数声明的位置是形参(变量)

  实参:在函数调到的时候给函数的形参传递的信息(值)

  传参:把实参的交给形参的过程

  返回值:

      return  可终止一个函数的运行

      1.什么都不写,不写return 返回None

      2.写了return 不写值返回None

      3.return有一个值返回一个值

      4.return有多个值返回多个值

  参数:

    形参:

      1.位置参数

      2.默认值参数

      3.动态传参

    实参:

      1.位置参数

      2.关键字参数

      3.混合参数:先位置后关键字

 

      

#在Python函数中,传递的参数如果默认有一个为列表(list),那么就要注意了,此处有坑!!

def
f(x,li=[]): for i in range(x): li.append(i*i) print(li) print('---1---') f(4) print('---2---') f(5)

预期结果
---1---
[0, 1, 4, 9]
---2---
[0, 1, 4, 9, 16]

实际结果
---1---
[0, 1, 4, 9]
---2---
[0, 1, 4, 9, 0, 1, 4, 9, 16]

当定义函数时,会保存函数中默认参数 list 的值,也就是列表 li=[],在每次调用的时候如果传递了新的列表,则使用传递的列表,但这里没有传递新列表,使用定义函数时保存的默认参数(li=[]),由于列表是可变的数据类型,所以列表在第一次append的时候会在 li=[] 原来的基础上append追加值,所以第二次执行的时候是带着追加的内容进去的,因此会产生以上结果.

 

 

 

    函数动态传参

      1.*args  位置参数动态传参(*args最终得到的结果是元组)

      2.**kwargs  关键字参数动态传参(**kwargs最终得到的结果是字典)

      顺序:位置参数,*args,默认值,**kwargs

      什么都参数都可以接

      

def func(*args,**kwargs):
        pass

       形参的位置*,**:聚合

       实参的位置*,**:打散

 

   命名空间

      1.内置名称空间:存放python解释器为我们提供的名字

      2.局部命名空间:在函数中声明的变量会放在局部命名空间

      3.全局命名空间:在py文件中,函数外声明的变量属于全局命名空间

  

    作用域:

      1.全局作用域:内置+全局

      2.局部作用域:局部

     globals()  查看全局中的内容

     locals()  查看当前作用域中的内容

  

    global:在局部访问全局中的内容

    nonlocal:在局部寻找外层函数中离他最近的那个变量 

 

posted @ 2018-08-16 19:44  年少有为  阅读(93)  评论(0编辑  收藏  举报