函数的动态形参, 作用域

一 动态形参

如果我们需要给⼀一个函数传参, ⽽而参数⼜又是不确定的. 或者我给⼀一个 函数传很多参数, 我的形参就要写很多, 很⿇麻烦, 怎么办呢. 我们可以考虑使⽤用动态参数

动态参数分成两种: 1. 动态接收位置参数,   按位置顺序接受实参 ,如果有位置参数必须写在动态参数前面 默认值参数写在最后方可生效, 传参是必须写  形参 = 值

def func(*args):

  print(args)

func(1,2,3,4,5)

>>>(1,2,3,4,5)   # 接收到的实参聚合成元组

def func(a,*args)

  print(a,args)

func("这样", 1,2,3,4,5)

>>>这样 (1,2,3,4,5)

2 动态接收关键字参数

def  func(**kwargs)

**kwargs 关键字的动态传参, 接收到的是字典

def func(**kwargs):   # key word arguments
     print(kwargs)

func(a=10, b=20, jay="周杰伦", jj="林俊杰")

>>>{"a": 10, "b": 20, "jay": 周杰伦, "jj": "林俊杰"}

func(张无忌=dic['张无忌'], 谢逊=dic['谢逊'], 范瑶=dic['范瑶'])
func(**dic) # 这里的** 是把字典打散. 字典的key作为参数的名字, 字典的值作为参数的值传递给形参

小结

在形参上
1. 位置参数
2. 默认值参数
3. 动态参数

  1. *args  位置参数的动态传参. 系统会自动的把所有的位置参数聚合成元组
  2. **kwargs  关键字的动态传参. 系统会自动把所有的关键字参数聚合成字典
  3.  def func(*args, **kwargs): 无敌传参
  4. 顺序:  位置参数, *args, 默认值, **kwargs
  5. 在使用的时候, 可以任意的进行搭配

4. 在实参上. *, **表示的打散.  在形参. *,** 表示聚合

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

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

局部作⽤用域: 函数内部的变量命名空间     在函数内部可以使⽤用.

在python解释器开始执⾏行行之后, 就会在内存中开辟⼀一个空间, 每当遇到⼀一个变量量的时候, 就 把变量量名和值之间的关系记录下来, 但是当遇到函数定义的时候, 解释器只是把函数名读入内 存, 表⽰示这个函数存在了了,  ⾄至于函数内部的变量量和逻辑, 解释器是不关⼼心的. 也就是说⼀一开始 的时候函数只是加载进来, 仅此⽽而已, 只有当函数被调⽤用和访问的时候, 解释器才会根据函数 内部声明的变量量来进⾏行行开辟变量量的内部空间. 随着函数执⾏行行完毕, 这些函数内部变量量占⽤用的空 间也会随着函数执⾏行行完毕⽽而被清空.

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

命名空间分类:

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

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

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

@作⽤用域命名空间:

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

2. 局部作⽤用域:    局部命名空间

@加载顺序:

1. 内置命名空间
2. 全局命名空间

3. 局部命名空间(函数被执⾏行行的时候)

@取值顺序:

1. 局部命名空间

2. 全局命名空间

3. 内置命名空间

@重要关键字

globals():  查询全局变量命名空间的内容

locals() :查询当前作用域变量命名空间的内容

global表⽰不再使⽤用局部作⽤用域中的内容了了. ⽽而改⽤用全局作⽤用域中的变量

nonlocal 表⽰示在局部作⽤用域中, 调⽤用⽗父级命名空间中的变量, 引入最近的一层,没有则创建

python 函数指动态形参,作用域的更多相关文章

  1. python函数的动态传参.作用域与命名空间

    一.动态传参1.*表示动态传参. 可以接受所有的位置参数传参的时候自动的把实参打包成元组 交给形参 def chi(*food): print(food) chi() # 动态传参可以不传参数 chi ...

  2. python 函数的动态参数 命名空间,作用域以及函数嵌套,global和nonlocal (重点)

    *** 坚持坚持,即使你不太强*** 1.函数的动态传参 2.函数的命名空间及作用域 3.函数嵌套 4.global和nonlocal关键字 一.函数的动态传参 1. *args: 位置参数动态传参, ...

  3. Python 函数返回值、作用域

    函数返回值 多条return语句: def guess(x): if x > 3: return "> 3" else: return "<= 3&qu ...

  4. 第十一篇 Python函数之定义&形参&实参&位置参数&关键字参数&可变长参数&默认参数

    函数的定义:函数是为了完成某一特定功能的,函数是逻辑结构化和过程化的一种编程方法 函数的定义格式,函数一般都是有返回值的 #语法 #函数名要能反映其意义 def 函数名(参数1,参数2,参数3,... ...

  5. 【Python 函数对象 命名空间与作用域 闭包函数 装饰器 迭代器 内置函数】

    一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(Firs ...

  6. python函数名称空间与作用域、闭包

    一.命名空间概念 1.命名空间(name space) 名称空间是存放名字的地方. 若变量x=1,1存放在内存中,命名空间是存放名字x.x与1绑定关系的地方. 2.名称空间加载顺序 python te ...

  7. python函数----名称空间和作用域

    一 名称空间 名称空间即存放名字与对象映射/绑定关系的地方. 对于x=3,Python会申请内存空间存放对象3,然后将名字x与3的绑定关系存放于名称空间中,del x表示清除该绑定关系. ​在程序执行 ...

  8. Python 函数内变量的作用域

    Python程序中创建.改变.查找变量名时,都是在一个保存变量名的空间中进行,我们称之为命名空间,也被称之为作用域. 全局作用域(global):即在模块层次中定义的变量,每一个模块都是一个全局作用域 ...

  9. PYTHON 函数的动态参数

    #普通参数示例 def func(args): print(args) func(123456) #执行结果为123456 如果给多个参数,就会报错 #动态参数示例 def func(*args): ...

随机推荐

  1. 快速傅里叶变换(FFT)

    扯 去北京学习的时候才系统的学习了一下卷积,当时整理了这个笔记的大部分.后来就一直放着忘了写完.直到今天都腊月二十八了,才想起来还有个FFT的笔记没整完呢.整理完这个我就假装今年的任务全都over了吧 ...

  2. Flask block继承和include包含

    继承(Block)的本质是代码替换,继承我认为就是把完整的html文件继承到一个不完整的html文件里. 被继承html文件: <!DOCTYPE html> <html lang= ...

  3. java面试——问题回溯

    背景:用来记录面试过程中遇到的问题,在这里进行记录,下次不要犯同样的错误. 迪普科技 Linux服务器下的top命令 #动态更新的虚拟文件实际上是许多其他内存相关工具(如:free / ps / to ...

  4. malloc() 和 calloc()有啥区别

    calloc()在动态分配完内存后,自动初始化该内存空间为零(会将所分配的内存空间中的每一位都初始化为零). 而malloc()不初始化,里边数据是随机的垃圾数据. calloc(size_t n, ...

  5. java和c#值类型和引用类型

    java数据类型分为基本数据类型和引用类型 基本数据类型:int  float  double  bool  char byte 引用数据类型:string  array  class interfa ...

  6. Linux(centos7)如何安装Zend Optimizer Zend Guard Loader

    下载地址:http://www.zend.com/en/products/loader/downloads#Linux 1.解压 wget http://downloads.zend.com/guar ...

  7. LoRa网关/RAK831

    Semtech SX1301 同时在不同的信道上接收数据 RAK831 能够在不同信道上同时接收多达 8 个同时发送不同扩频因子的 LoRa 数据 包

  8. C++学习之回调函数

    回调函数: 通过函数指针进行调用的函数. 回调函数不是由实现方进行调用,而是将函数指针传入,在特殊条件或者状态下进行触发调用. 譬如: 在自定义按钮控件时,当点击按钮,触发点击事件,调用指定函数. 注 ...

  9. python调用shell命令之三慷慨法

    preface: 忙于近期的任务,须要用到libsvm的一些命令.如在终端执行java svm_train train_file model_file. pythonsubset.py file tr ...

  10. as依赖解决报错

    Unable to resolve dependency for ':app@debug/compileClasspath': Could not resolve com.android.suppor ...