zoukankan      html  css  js  c++  java
  • python之路-day10-函数进阶

    一、函数参数--动态传参

    1、动态接收位置参数

      在参数位置编写 * 表示接收任意内容

     

      动态接收参数的时候要注意:动态参数必须在位置参数后面

      这时程序运行会报错。因为前面传递进去的所有位置参数都被 *food接收了。a和b永远接收不到参数

     

    2、动态接收关键字参数

      在python中可以动态的接收参数,但是 * 这种情况只能接收位置参数无法接收关键字参数。

      在python中使用 ** 来接收动态关键字参数

     

     最终顺序

      位置参数 > *args > 默认值参数 > **kwargs

      这四种参数可以任意的进行使用。

    如果想接收所有的参数:

    def func(*args, **kwargs):

      print(args, kwargs)

    func("麻花","驴打滚", wtf="胡辣汤")

     

      动态参数的另一种传参方式:

    def func(*args):

      print(args)

     

    lst = [1, 4, 7]

    func(lst[0], lst[1], lst[2])

    func(*lst)  #  可以使用 * 把一个列表按顺序打散

    s = "臣妾做不到"

    func(*s)  # 字符串也可以打散(可迭代对象)

     

    在形参的位置上的* 表示把接收到的参数组合成一个元组

    如果是一个字典,那么也可以打散,需要两个**

    def fun(**kwargs):

      print(kwargs)

    dic = {'a':1, 'b':2}

    fun(**dic)

     

     3、函数的注释

    二、命名空间

      在python解释器开始执行之后,就会在内存中开辟一个空间,每当遇到一个变量的时候,就把变量名和值之间的

    关系记录下来,但是当遇到函数定义的时候,解释器只是把函数名读入内存,表示这个函数存在了,至于函数内部的

    变量和逻辑,解释器是不关心的。也就是说一开始的时候函数只是加载进来,仅此而已,只有当函数被调用和访问的时候

    解释器才会根据函数内部声明的变量来进行开辟变量的内部空间。随着函数执行完毕,这些函数内部变量占用的空间也会

    随着函数执行完毕而被清空。

    def fun():

      a = 10

      print(a)

    fun()

    print(a)  # a不存在了已经

      我们给存放名字和值得关系的空间起一个名字叫:命名空间。我们的变量在存储的时候就是存储在这片空间中的。

      命名空间分类:

      1、全局命名空间--> 我们直接在py文件中,函数外声明的变量都属于全局命名空间

      2、局部命名空间--> 在函数中声明的变量会放在局部命名空间

      3、内置命名空间--> 存放python解释器为我们提供的名字,list, tuple ,str ,int 这些都是内置命名空间

      加载顺序:

      1、内置命名空间

      2、全局命名空间

      3、局部命名空间(函数被执行)

      

      取值顺序:

      1、局部命名空间

      2、全局命名空间

      3、内置命名空间

      作用域:作用域就是作用范围,按照生效范围来看分为 全局作用域和局部作用域

      全局作用域:包含内置命名空间和全局命名空间。在整个文件的任何位置都可以使用(遵循从上到下逐行执行)

      局部作用域:在函数内部可以使用

      作用域命名空间:

      1、全局作用域: 全局命名空间 + 内置命名空间

      2、局部作用域: 局部命名空间

      我们可以通过globals()函数来查看全局作用域中的内容,也可以通过locals()来查看局部作用域中的变量

    和函数信息

    三、函数的嵌套

     

    1、只要遇见了()就是函数的调用,如果没有()就不是函数的调用

    2、函数的执行顺序

     四、关键字global 和 nonlocal

     

    global 表示,不再使用局部作用域中的内容了。而改用全局作用域中的变量

    nonlocal 表示在局部作用域中,调用父级命名空间中的变量

  • 相关阅读:
    linux安装nginx
    git配置多个SSH密钥
    webpack加载器安装node-sass失败的解决方法
    Vue-cli webpack打包之后index.html缺少引号的问题
    算法:一个数组中所有元素的最小公倍数
    JS 实现一个睡眠函数sleep
    剑指offer 牛客67道题集合
    剑指offer
    剑指offer
    剑指offer
  • 原文地址:https://www.cnblogs.com/alvin-jie/p/9884123.html
Copyright © 2011-2022 走看看