1. 动态参数

位置参数的动态参数: *args
* 在这里表示接收位置参数的动态传参,接收到的是元祖def chi(*food):          # 可以传入任意的位置参数   food是参数名,*便是动态参数      print("我要吃",food)  # 动态参数接收到的是tuple类型的数据chi("盖浇饭", "辣条", "面条")chi('大米饭','小米饭')chi()    # 可以接收空,接收到的也是元祖

关键字参数的动态参数 : **kwargs
def func(**food):         # **food动态接收关键字参数print(food)                # 接收到的是dict类型

func(good_food="盖浇饭", no_good_food="辣条", drink="冰封")

这个函数可以接收所有的参数(无敌的)
def func(*args, **kwargs):print(args)print(kwargs)
func(1, 2, 5, 6, name="taibai",age=18, sex="不详")

顺序:位置,*args,默认值,**kwargs

在形参上:'*','**',表示聚合,所有的位置参数,*聚合成元祖,**聚合成字典在实参上:'*','**',表示打散,*打散,迭代传参,**打散字典,以k=v形式进行传参
def func(*args, **kwargs):print(args)print(kwargs)
lst = ["钢铁侠", "蜘蛛侠", "煎饼侠", "蝙蝠侠"]
func(*lst)     # 实参, 打散, 迭代产生的
func(lst)       #没有打散
dic = {"name":"小猴", "age":26}
func(**dic)     # 把字典打散. 以key=value形式进行传参
func(dic)      # 没有打散
('钢铁侠', '蜘蛛侠', '煎饼侠', '蝙蝠侠')     # 是个元祖,里边装了4个元素
(['钢铁侠', '蜘蛛侠', '煎饼侠', '蝙蝠侠'],)   # 也是个元祖,里边是个列表,但是是1个元素
{'name': '小猴', 'age': 26}    # 就是一个字典
({'name': '小猴', 'age': 26},)    # 是个元祖,装了个字典

定义函数

def 函数名(形参):  1.位置参数, 2, *args, 3.默认值参数, 4. **kwargs   函数体     return 返回值函数名(实参)    1. 位置参数. 2.关键字参数. 3. 混合参数,
2. 命名空间和作用域

   命名空间: 存放名字和值的空间   1. 内置命名空间: python解释器内部运行时存储的:int,str,list,tuple这些名字的空间   2. 全局命名空间: 在代码运行初始,创建的存储名字和值的空间   3. 局部命名空间: 在函数内部运行中创建的空间

作用域:1.全局作用域:内置+全局命名空间,在整个文件的任意位置都可以被引用,全局有效2.局部作用域:局部命名空间,只在局部范围内生效

globals() 查看全局作用域中的名字locals() 查看当前作用域中的名字
a = 10
def func():a = 20print(globals())  # globals() 获取到全局作用域(内置,全局)中的所有名字print(locals())  # locals() 查看当前作用域中的所有名字
func()

记住:如果是函数必须是函数调用后,才能查看作用域

三种命名空间之间的加载与取值顺序:

加载顺序:内置命名空间(程序运行前加载)=>全局命名空间(程序运行中:从上到下加载)=>局部命名空间(程序运行中:调用时才加载)

取值顺序:

  在局部调用:局部命名空间->全局命名空间->内置命名空间

  在全局调用:全局命名空间->内置命名空间



3.函数的嵌套降维模式,一层一层去分析
def func1():print("呵呵")def func2():print("哈哈")func2()print("吼吼")
func1()def func1():print("赵")def func2():print("钱")def func3():print("孙")print("李")def func4():print("哈哈")func2()print("周")func2()
func1()

4. global和nonlocal

global: 把全局变量拿到局部来用.
a = 10
def func():global a    # 把外面全局中的a 引进来a = 30      # 把全局中的a重新赋值成30   外面的a也就变成30了print(a)
func()
print(a)# 30
# 30

nonlocal: 把最近的一层的变量拿过来.不会找全局
def func1():a = 10           def func2():nonlocal a    # 找局部作用域中 离他最近的那个变量引入进来a = 20         # 把a重新赋值成20print(a)func2()print(a)
func1()# 20
# 20

记住:# global 如果在全局中找不到,会把局部变量升级成全局变量# nonlocal 如果在局部中找不到,会报错
 
默写:1,形参的接收顺序。
位置参数 => *args => 默认值参数 => **kwargs2,什么是命名空间,什么是全局名称空间,什么是局部名称空间,什么是内置名称空间
命名空间:存放名字和值的关系的空间
全局名称空间: 在代码运行初始,(俗称函数外)创建的存储名字和值的空间
局部名称空间: 函数运行中创建的空间
内置名称空间: python解释器内部运行时存储的:int,str,list,tuple这些名字的空间3,什么是全局作用域,什么是局部作用域。
全局作用域: 包含内置名称空间、全局名称空间,在整个文件的任意位置都能被引用、全局有效
局部作用域: 局部名称空间,只能在局部范围内生效4,名称空间的加载顺序,取值顺序。
加载顺序:内置命名空间(程序运行前加载)=>全局命名空间(程序运行中:从上到下加载)=>局部命名空间(程序运行中:调用时才加载)
调用顺序:在局部调用:局部命名空间->全局命名空间->内置命名空间在全局调用:全局命名空间->内置命名空间5,解释一下什么是global,什么是nonlocal。
global:    把全局变量拿到局部来用.
nonlocal:  在函数内部中,把最近的一层的变量拿过来.不会找全局

 

转载于:https://www.cnblogs.com/hmw112626/p/9310086.html

函数的动态参数和作用域相关推荐

  1. python中自定义函数如何传递动态参数_python 函数的动态参数

    1. 函数的动态参数 1. *args 位置参数动态传参 2. **kwargs 关键字参数动态传参 顺序:位置参数, *args, 默认值, **kwargs def func(*args, **k ...

  2. Python函数的动态参数

    1. 动态接收位置参数 在参数位置用*表示接受任意参数 def eat(*args):print('我想吃',args)eat('大米饭','中米饭','小米饭') # 收到的结果是一个tuple元祖 ...

  3. python函数的动态参数之一个星号和两个星号

    一.概述 1.python有位置参数.默认参数,这两种是最常用的参数. 2.动态参数即不限定参数个数,以一种动态的方式接受传参的个数. 3.python的动态参数有两种,分别是 ' *args '  ...

  4. js基础之函数递传参数与作用域(5下)

    上一章节面试题分析: 第一步:浏览器预解析这段JS代码,找var function和参数: 第二步:逐行解读代码: 下面是具体步骤分析: 函数详解 return 返回值 后面跟着任何类型都可以,如(数 ...

  5. 动态参数 名称空间 作用域 作用域链 加载顺序 函数的嵌套 global nonlocal 等的用法总结...

    03,动态参数 *args,**kwargs # 用户传入到函数中的实参数量不定时,或者是为了以后拓展,# 此时要用到动态参数*args,**kwargs(万能参数.)# *args接收的是所有的位置 ...

  6. day11函数的进阶动态参数,命名空间,作用域,第一类对象

    一.习题收藏 5.写函数,计算传入字符串中[数字].[字母].[空格] 以及 [其他]的个数,并返回结果. # def func4(s): # dic = {# 'num':0,'alpha':0,' ...

  7. 函数参数---动态参数

    形参的第三种:动态参数 动态参数分为两种: 1.动态接受位置参数; 注意:形参的顺序:   位置参数, 动态参数, 默认参数 动态接受参数的时候要注意:动态参数必须在位置参数后面 关键参数必须要放在位 ...

  8. 【Groovy】Groovy 动态语言特性 ( Groovy 中函数实参自动类型推断 | 函数动态参数注意事项 )

    文章目录 前言 一.Groovy 中函数实参自动类型推断 二.函数动态参数注意事项 三.完整代码示例 前言 Groovy 是动态语言 , Java 是静态语言 ; 本篇博客讨论 Groovy 中 , ...

  9. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 二 | 准备参数 | 远程调用 mmap 函数 )

    文章目录 一.准备 mmap 函数的参数 二.mmap 函数远程调用 一.准备 mmap 函数的参数 上一篇博客 [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | 远程调 ...

最新文章

  1. 从配置文件到分布式配置管理QConf
  2. 数据港:攻破OPEX+SLA难题,实现全生命周期效能管理
  3. JZOJ 5977. 【清华2019冬令营模拟12.15】堆
  4. 固定定位及布局知识总结
  5. VMware 修复 NSA 报告的 0day
  6. php 实战技巧,PHP实战技巧(15)通过phpinfo()了解你的PHP配置状况(二)
  7. 【转载】C++操作符的优先级
  8. MPU6050数据处理分析
  9. 大小写字母c语言,C语言 大小写字母转换
  10. Flowable工作流引擎技术方案
  11. Flux发布Elixir Essential限制器,提供对全景声的支持
  12. 记我的第一次腾讯游戏策划面试
  13. 渲大师携手向日葵,远控赋能云渲染及GPU算力服务
  14. Endnote新手使用指南——终于解决EndNote困扰我一晚上的难题,其实很简单!
  15. python文件夹操作指令
  16. 花三千万写出的十个 to B创业大坑(上)
  17. css vw单位_使用CSS vw单位创建完美的响应形状
  18. SXMB_MONI传输记录报错:具有无效值 BE #SAP #PO #REST
  19. Android Studio设置HTTP代理地址
  20. 解决使用Arduino IDE 下载esp8266开发版很慢的问题(支持任何版本)

热门文章

  1. 4月上旬中国万网域名总量增至245.8万个 国内份额上扬
  2. c++数据结构与算法 图
  3. ant如何形成时间轴和图库_如何让景观设计更具有逻辑性?
  4. mysql实现知识图谱_基于电影知识图谱的智能问答系统学习记录
  5. GNN上用到的Tasks,Dataset and Benchmark
  6. 首张数字人民币机票订单诞生 上海-深圳
  7. 数据:以太坊2.0合约余额新增1.52万ETH
  8. SAP License:结算金额大于可支配金额
  9. 模型优化在风控中的运用(全)
  10. Axure高保真web端后台管理系统/垃圾回收分类系统/垃圾回收高保真原型设计 /垃圾分类后台管理系统/垃圾回收分类平台//垃圾回收分类智慧管理系统/订单管理/财务管理/系统管理/库存管理/设备管理