函数的动态形参, 作用域

一 动态形参

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

动态参数分成两种: 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. 【洛谷P1637】三元上升子序列

    题目大意:给定一个长度为 N 的序列,求有多少个三元组满足 \(i<j<k,a_i<a_j<a_k\). 题解:这是一类二维偏序问题,与逆序对问题类似. 对于序列中每个点来说, ...

  2. luogu4211 LCA

    题目链接 思路 我们换一种求\(dep[lca(i,j)]\)的方法. 将从根到\(i\)的路径上所有点的权值加\(1\),然后求从根节点到j路径上点的权值和.就是\(i\)和\(j\)的\(lca\ ...

  3. C#面向对象中类的继承和扫描顺序和接口

    1.   类的分类:普通基类.抽象基类(abstract  class)1.   类的扫描顺序:a.先近后远 b.(向上扫描)以谁身份声明的变量就在谁身上开始扫描, 2.   扫描的特殊情况:普通基类 ...

  4. IntelliJ IDEA Cannot resolve symbol ''

    study from : https://www.cnblogs.com/linmengfei/p/7909196.html File->Invalidate Caches 点击File | I ...

  5. 将vcf文件转化为plink格式并且保持phasing状态

    VCFtools can convert VCF files into formats convenient for use in other programs. One such example i ...

  6. Dubbo新版管控台

    地址:https://github.com/apache/incubator-dubbo-ops 下载下来,解压 打开cmd 注意:它的前端用到了Vue.js,打包需要npm,所以你要有node.js ...

  7. nginx搭建分布式简单配置

    1.下载安装nginx 2.编辑nginx.conf文件 upstream 172.100.10.52 { ip_hash; #保证每一个用户访问同一个网站 server 172.100.10.21: ...

  8. ajax-----readyState总结

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 微信小程序:多张图片上传

    最近在写小程序的相册,需要多张图片的上传.因为小程序不支持数组的多张图片同时上传,然后根据自己的需求+借鉴网上各位大神的案例,总算搞定.分享下,不足之处,多多指教哦 页面wxml: <form ...

  10. 被顶级学术期刊枪毙的p.Value到底是个什么鬼

    总结一下,在我看来,p.Value仅仅是在,假设检验,这理论框架下,对于证据力度的一个测量.而且,我们不大可能推翻假设检验这个框架,似乎也不必要,因为,这个框架非常合理,有广泛的应用场景,有强大的生命 ...