2018.7.13 函数的进阶

1. 动态参数
  位置参数的动态参数: *args

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

    顺序: 位置参数, 动态参数*, 默认值参数

      例子:   

    def chi(a, b, *food, c="娃哈哈"):
      print(a, b, food, c)
    chi("香蕉", "菠萝") # 香蕉 菠萝 () 娃哈哈 默认值?生效
    chi("香蕉", "菠萝", "葫芦娃") # 香蕉 菠萝 (‘葫芦娃‘,) 娃哈哈 默认值?生效
    chi("香蕉", "菠萝", "葫芦娃", "口罩") # 香蕉 菠萝 (‘葫芦娃‘, ‘口罩‘) 娃哈哈 默认值生效

     注意: 这个时候我们发现所有的默认值都生效了. 这个时候如果不给出关键字传参. 那么你的默认值是永远都生效的.

  关键字参数的动态参数 : **kwargs
  顺序:
  位置 > *args,默认值 > **kwargs

    如果想接收所有的参数:
    def func(*args, **kwargs):
      print(args, kwargs)
    func("麻花藤","马晕",wtf="胡辣汤")

    动态参数的另一种传参方式:
    def fun(*args):
      print(args)
    lst = [1, 4, 7]
    fun(lst[0], lst[1], lst[2])
    fun(*lst) # 可以使用*把一个列表按顺序打散
    s = "臣妾做不不到"
    fun(*s) # 字符串也可以打散, (可迭代对象)

 

 在形参上*聚合, **聚合
  在实参上*打散, **打散

  在实参位置上给一个序列,列表,可迭代对象前面加个*表示把这个序列按顺序打散.
  在形参的位置上的* 表示把接收到的参数组合成一个元组
  如果是一个字典, 那么也可以打散. 不过需要用两个*
    def fun(**kwargs):
      print(kwargs)
      dic = {‘a‘:1, ‘b‘:2}
      fun(**dic)

  函数的注释:
  def chi(food, drink):
    """
    这里里是函数的注释, 先写?一下当前这个函数是?干什什么的, ?比如我这个函数就是?一个吃
    :param food: 参数food是什什么意思
    :param drink: 参数drink是什什么意思
    :return: 返回的是什什么东东
    """
    print(food, drink)
    return "very good"

2. 命名空间和作用域
命名空间:
  1. 内置命名空间: python解释内部运行时的变量函数
  2. 全局命名空间: 我们在py文件中直接声明出来的变量,函数
  3. 局部命名空间: 在函数内部声明的变量和函数.(我们直接在py文件中, 函数外声明的变量量都属于全局命名空间)
作用域:
  1.全局作用域:内置+全局
  2.局部作用域:局部
    globals() 查看全局作用域中的名字
    locals() 查看当前作用域中的名字

  3. global和nonlocal
  global: 把全局变量拿到局部来用.
  nonlocal: 把离他最近的一层的变量拿过来.不会找全局

原文地址:https://www.cnblogs.com/hfbk/p/9305183.html

时间: 2024-10-11 19:36:31

2018.7.13 函数的进阶的相关文章

生成器函数的进阶和表达式and各种推导式

生成器函数的进阶 send的效果与作用范围和next一模一样 send获取下一个值的效果和next基本一致 第一次不能用send 函数中的最后一个yield不能接收新的值 只是再获取下一个值的时候,给上一个yield的位置传递一个数据 使用send的注意事项 #第一次使用生成器的时候,是用next获取下一个值 #最后一个yield不能接收外部的值 def generator(): print(123) content = yield 1 print('=======',content) prin

基础学习之第十天(函数的进阶)

函数的进阶顺序:位置参数->动态接收位置参数*->默认值->动态接收关键字参数**     位置参数->*args->默认参数值->**kwargs一.函数参数--动态传参 1.动态接受位置参数 在参数位置编写*表示接收任意内容 动态接收参数的时候要注意:动态参数必须在位置参数后面 2.动态接收关键字参数 动态接收关键字参数一定在最后面 在实参位置使用*或**,他们是用来打散列表和字符串的二.名称空间,局部名称空间,作用域,加载顺序 在python解释器开始执行之后,

万恶之源-函数的进阶

前?高能-函数的进阶 本节主要内容: 函数参数--动态传参 名称空间,局部名称空间,全局名称空间,作?用域,加载顺序. 函数的嵌套 gloabal, nonlocal关键字 ?一. 函数参数--动态传参 之前我们说过了了传参, 如果我们需要给?一个函数传参, ?而参数?又是不确定的. 或者我给?一个 函数传很多参数, 我的形参就要写很多, 很?麻烦, 怎么办呢. 我们可以考虑使?用动态参数. 形参的第三种: 动态参数 动态参数分成两种: 动态接收位置参数 ?首先我们先回顾?一下位置参数, 位置参

函数用法进阶

目录 函数用法进阶 一.函数作为参数和变量来使用 二.闭包 三.迭代器 函数用法进阶 一.函数作为参数和变量来使用 函数名表示的是函数存储在内存中的地址,函数加上括号才是函数.例如:main()表示的是函数, main是该函数的函数名,print(main)得到的是main()的内存地址,原理等同于直接赋值,可以把函数名赋值给一个变量使用,可以把函数名作为参数来使用,也可以函数名作为返回值来进行传递,等到调用的时候在加上括号,直接就可以调用函数了. def f1(): print('麻花腾')

13.函数的类型和基本使用

第一:函数类型: /* 函数类型: 类似于C语言的指向函数的指针 类似于OC语言的block 函数类型是由函数的参数类型和返回值类型组成的 */ // 这两个函数的类型是 (Int, Int) -> Int func sum(a: Int, b: Int) ->Int { return a + b; } func sub(a: Int, b: Int) ->Int { return a - b; } // 可以利用函数类型定义函数变量和常量 var funcP:(Int, Int) -&

小白学习之路,基础四(函数的进阶)

一,内置函数 前面已经认识了函数,对函数都有所了解了,其实呢,在Python中提供了很多内置的函数方便给我们调用.下面会给大家提到一些常用的常用内置函数的用法,当然还有一些其他没讲到的,你也可以看参考文档,深入学习一波.咳咳咳,不多说了,直接进入装逼的代码环节. 更多的内置函数详情请参考http://www.runoob.com/python3/python3-built-in-functions.html 1 abs(-3) #取绝对值 2 all([1,2,5,0]) #当全部为真或者全部不

Python 高级变量类型 --- 函数的进阶

目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01,函数参数和返回值的作用 函数根据 有没有参数 以及 有没有返回值 ,可以 相互组合 , 一共4种组合 1,无参数,无返回值 2,无参数,有返回值 3,有参数,无返回值 4,有参数,有返回值 ![](https://images2018.cnblogs.com/blog/1306461/201808/1306461-20180817100230702-1077210530.png) 定义函数时,是否接收参数,或者是

解读 2018:13 家开源框架谁能统一流计算?

018 年接近尾声,我018 年接近尾声,我策划了"解读 2018"年终技术盘点系列文章,希望能够给读者清晰地梳理出重要技术领域在这一年来的发展和变化.本文是实时流计算 2018 年终盘点,作者对实时流计算技术的发展现状进行了深入剖析,并对当前大火的各个主流实时流计算框架做了全面.客观的对比,同时对未来流计算可能的发展方向进行预测和展望.策划了"解读 2018"年终技术盘点系列文章,希望能够给读者清晰地梳理出重要技术领域在这一年来的发展和变化.本文是实时流计算 20

python学习之函数学习进阶

1.名称空间 python有三种名称空间 内置名称空间: 随着python解释器的启动而产生 print(sum) print(max) 全局名称空间: 文件的执行会产生全局名称空间,指的是文件级别的定义名字都会放入该空间 x = 11 if x == 11:     print(x) 局部名称空间: 调用函数时会产生局部名称空间,只在函数调用时临时绑定,调用结束时解绑 x = 1000 def foo():     x = 1     print(x) foo() print(x) 作用域: