一, 动态传参

1. *args

接收到的是元组

先用位置参数进行传参, 剩下的位置参数用*args进行传参

2. **kwargs

接收到的是一个字典

先用关键字参数进行传参, 剩下的参数用**kwargs进行传参

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

形参的**kwargs后面再出现任何 位置参数 或 关键字参数 或 *args参数 都会报错, 显示语法错误

形参的*args参数 后面如果加上 位置参数 会报错, 因为位置参数接不到传参, 显示位置参数没接到传参的错误

实参的位置参数必须全部在关键字参数前

def func(a, *args, b='abc, **kwargs):

print(a, args, b, kwargs)

形参*args, **kwargs聚合

实参*lst, **dic打散

实参的打散: func(*lst, **dic)

def func(**kwargs):

print(kwargs)

func(qwe='123', asd='456')

def func(**kwargs):

print(kwargs)

func('qwe'='123', 'asd'='456')                      # 字符串可以作为字典的键, 但是这里会报错, 因为如果字符串要传到函数中去, 需要键是一个变量

函数注释:

def func(a, b):'''计算两数之和:param a: 第一个数:param b: 第二个数:return: 两个数的和'''return a+b
print(func.__doc__)

二. 命名空间

1. 内置命名空间

2. 全局命名空间

3. 局部命名空间

函数调用, 局部命名空间包括嵌套的函数

作用域:

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

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

print(globals())  查看全局命名空间中的内容

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

三. 函数嵌套

def a():

print('1')

def b():

print('2')

def c():

print('3')

c()

b()

a()

输出:1      2      3

global: 访问全局命名空间的变量, 并可以改变全局命名空间的变量

global a

nonlocal: 访问外层函数中最近一层的那个变量, 并可以改变那个变量

nonlocal b

不使用global或者nonlocal只能读取上一层或全局命名空间的变量, 是不会改变上一层函数或全局命名空间的变量的

转载于:https://www.cnblogs.com/NachoLau/p/9449393.html

动态传参, 名称空间, 嵌套, gloabal, nonlocal相关推荐

  1. 函数动态传参详细,作用域和名称空间,global和nonlocal

    1. 动态传参(重点) *, ** *, ** : 形参: 聚合 位置参数* -> 元组 关键字** -> 字典 实参: 打散 列表, 字符串, 元素 -> * 字典 -> * ...

  2. day03 文件操作 函数 参数 返回值 作用域和名称空间 global和nonlocal

    一.文件 (一)文件操作 open(文件, mode="", encoding="utf-8") 文件读取: r(read) 1. readline() 读取一 ...

  3. 在Java中动态传参调用Python脚本

    最近,又接触到一个奇葩的接口,基于老板不断催促赶时间的情况下,在重写java接口和复用已有的python脚本的两条路中选择了后者,但是其实后者并没有好很多,因为我是一个对python的认识仅限于其名称 ...

  4. vue 中的动态传参和query传参

    Vue router 如何传参 params.query 是什么? params:/router1/:id,这里的 id 叫做 params.例如/router1/123, /router1/789 ...

  5. python调用shell脚本的参数_使用python执行shell脚本 并动态传参 及subprocess的使用详解

    最近工作需求中 有遇到这个情况 在web端获取配置文件内容 及 往shell 脚本中动态传入参数 执行shell脚本这个有多种方法 最后还是选择了subprocess这个python标准库 subpr ...

  6. v-for 循环 @click 动态传参(参数动态)

    v-for 循环 @click 动态传参(参数动态) 代码示下: @click="function('id_'+data.id)" 以上就是关于"v-for 循环 @cl ...

  7. sql 不为空_sql动态传参在springData中的应用(补充)

    在之前的文章提到过关于sql动态传参在springData中的应用,下面补充一下关于原生sql和springData的同一需求下的两种不同的写法: 需求:contoller层传递一个map给servi ...

  8. 中给函数赋读权限_sql动态传参在springData中的应用(补充)

    在之前的文章提到过关于sql动态传参在springData中的应用,下面补充一下关于原生sql和springData的同一需求下的两种不同的写法: 需求:contoller层传递一个map给servi ...

  9. Vue路由动态渲染和动态传参

    一.动态渲染路由 // router/routerjs{ path: '/movie/1', component: Movie}, //app组件<router-link to="/m ...

最新文章

  1. 会话创建过程-创建Executor
  2. Django从理论到实战(part13)--include函数
  3. textarea选中行删除_Easy Data Transform如何在Excel中删除重复的行?
  4. 用python快速开发一个实用的socket服务器
  5. 【GStreamer开发】GStreamer基础教程05——集成GUI工具
  6. 桌面电源、USB、读卡总集线器的想法
  7. 如何在Kubernetes中暴露服务访问 1
  8. pdf2htmlex 中的字体嵌入
  9. dnf红眼补丁在哪下载_dnf补丁下载到哪里
  10. 开始学习机器学习之前你必须要了解的知识有哪些?机器学习系列入门篇
  11. jtds 支持 mysql 吗?_jTDS驱动兼容性问题
  12. Springboot中自动转JSON输出
  13. ios系统铃声调用方法
  14. | 应用打包还是测试团队老大难问题?
  15. 第一次使用acme.sh 手动生成证书(DNS手动模式)
  16. 100个冷笑话,越往后越冷(郁闷时专用……)
  17. 微信小程序点击发送短信验证(60秒倒计时)
  18. 计算机基础算术加法,计算机基础第二讲.ppt
  19. umts是移动还是联通_为什么联通不随意放弃WCDMA!
  20. 纯Javascript的输入框掩码

热门文章

  1. 在LINUX中部署FTP服务器
  2. POJ2488 A Knight's Journey(DFS)
  3. MySql表以及数据导入导出
  4. python方差的代码_Python statistics pvariance()用法及代码示例
  5. rabbitmq 查看消费者_(Windows环境下)RabbitMQ系列(一)安装以及入门使用
  6. MatrixCursor 模拟数据库
  7. Notification使用详解之二:可更新进度的通知
  8. Thread、Runnable和Callable
  9. java 关键字null
  10. 网页内容若使用gzip压缩--获得页面源码