一、动态传参

动态传参用到 *args 和 **kwargs ,*号表示接收位置参数,args是参数名;**表示接收关键字参数,kwargs是参数名

 def chi(*food):
print(food) #('胡辣汤', '油条', "豆浆")
print(*food) #'胡辣汤', '油条', "豆浆
chi("胡辣汤","油条","豆浆") def chi(**food):
print(food) chi(food1="胡辣汤",food2 = "油条",food3="豆浆")
#结果 {'food1': '胡辣汤', 'food2': '油条', 'food3': '豆浆'}

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

无敌传参:可以接收任何参数

 #无敌传参示例
def func(*args, **kwargs): #可以是任何参数
pass func("位置参数",kw ="关键字参数")

注意:*号在形参位置表示聚合,在实参位置表示打散  ,字典打散用两个**

def func(*args): #形参位置  聚合
print(args)
lst = [1,2,3]
t = (22,33)
func(*lst,*t) #实参位置 将列表和元组打散了
#结果 (1, 2, 3, 22, 33) def fun(**kwargs): #形参位置,聚合
print(kwargs) dic1 = {"name":"alex","gender":"男"}
dic2 = {"age":""}
fun(**dic1,**dic2) #实参位置, 字典打散
# 结果 {'name': 'alex', 'gender': '男', 'age': '1000'} dic1 = {"name":"alex","age":""}
dic2 = {"age":""}
fun(**dic1,**dic2) #这是会报错,因为两个字典中有重复的key,一个key对应多个值

二、命名空间和作用域

在python解释器开始执行之后, 就会在内存中开辟一个空间, 每当遇到一个变量的时候, 就把变量名和值之间的关系记录下来,

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

分为内置命名空间、全局命名空间、局部命名空间

内置空间存储python解释器内置的东西,全局空间放py文件中函数外声明的变量,局部空间放函数内声明的变量

顺序:

文件加载时

  先加载内置空间,再全局,最后局部(函数调用时才用到)

在取值的时

先从局部空间找,然后是全局空间,最后是内置空间

作用域

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

全局作用域: 内置空间+全局空间的变量

局部作用域:局部空间的变量

查看作用域:

  globals()  查看全局作用域中的变量名字

  locals() 查看当前作用域中的变量名字  (可以用在全局也可以用在局部)

三、函数的嵌套

1. 注意函数的执行顺序

2. 只要遇到了()就是函数的调用. 如果没有()就不是函数的调用

四、golbal和nonlocal关键字

golbal关键字  表示引入全局变量 arg,如果全局变量中没有arg就在局部声明这个变量为全局变量

nonlocal关键字  表示在局部 引入上一层空间的变量,如果上一层没有继续找上一层,都没有时报错。

 a = 100
def func():
print(a) # 取值时可以取全局变量,逐层往上找
func() def func():
a = 28 # 想要修改时会报错,局部空间不能直接修改全局变量
print(a)
func()
--------------
a = 100
def func():
global a # 加了个global表示不在局部创建这个变量了. 而是直接使用全局的a
print(a) #
a = 28 #这时就能在局部空间修改全局变量了
print(a) #
func()
print(a) #

golbal

 a = 10
def func1():
a = 20
def func2():
nonlocal a #找上一层的a a = 20
a = 30 #将a =20 修改为 a =30
print(a) #
func2()
print(a) #
func1()

nonlocal

python记录_day10 动态传参 命名空间 作用域的更多相关文章

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

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

  2. python之路--动态传参,作用域,函数嵌套

    一 . 动态传参(重点)  * ,  ** * 与 ** * 在形参位置. * 表示不定参数, 接收的是位置参数 接收到的位置参数的动态传参: 都是元组 def eat(*food): # 在形参这里 ...

  3. 2018.8.9 python中的动态传参与命名空间

    主要内容: 1.函数参数 ----动态传参 2.名称空间与作用域 3.函数的嵌套 4.global,nonlocal关键字 一.函数参数 ------动态传参 形参的第三种:动态传参 动态传参分为两种 ...

  4. 函数动态传参,命名空间,gloabal,nonlocal关键字

    一.函数参数->动态传参(形参的第三种) 动态参数分为两种: 1)动态接收位置参数 普通的位置传参: def func(quality_food,junk_food): print('我要吃', ...

  5. python-函数进阶-动态传参,名称空间,作用域的问题

    一.函数的动态的动态参数 动态参数分为两种:动态接收位置参数.动态接收关键字参数. 1.*args  位置参数动态传参 # 顺序: 位置参数=>*args(arguments) => 默认 ...

  6. python(动态传参、命名空间、函数嵌套、global和nonlocal关键字)

    一.函数的动态传参 1.*args位置参数动态传参 def chi(*food): print(food) chi("烧烤","火锅","虾吃虾涮&q ...

  7. python-函数-动态传参,作用域的问题,函数嵌套,global nonlocal

    ⼀. 函数参数--动态传参 之前我们说过了传参, 如果我们需要给⼀个函数传参, ⽽参数⼜是不确定的. 或者我给⼀个 函数传很多参数, 我的形参就要写很多, 很⿇烦, 怎么办呢. 我们可以考虑使⽤动态参 ...

  8. 动态传参,命名空间,嵌套,gloabal,nonlocal

    一.动态传参 动态接受位置参数:  *参数名 def eat(*food): print(food) #多个参数传递进去,收到的内容是元祖tuple eat("盖浇饭", &quo ...

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

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

随机推荐

  1. 论文笔记之:Heterogeneous Face Attribute Estimation: A Deep Multi-Task Learning Approach

    Heterogeneous Face Attribute Estimation: A Deep Multi-Task Learning Approach  2017.11.28 Introductio ...

  2. (转载)WinformGDI+入门级实例——扫雷游戏(附源码)

    本文将作为一个入门级的.结合源码的文章,旨在为刚刚接触GDI+编程或对相关知识感兴趣的读者做一个入门讲解.游戏尚且未完善,但基本功能都有,完整源码在文章结尾的附件中. 整体思路: 扫雷的游戏界面让我从 ...

  3. 微服务架构与实践4_Docker

    构建Docker映像 定义Dockerfile=>Docker根据Dockerfile构建出映像 包含: 基础映像(父映像)信息 维护者信息 映像操作命令 容器启动命令 .net standar ...

  4. sublime text 中文显示异常

    本文链接:sublime text 中文显示异常 http://www.cnblogs.com/daysme/p/7549857.html 前言 sublime text 3143 用了一年时候,最近 ...

  5. Json序列化提示缺少编译器要求的成员“ystem.Runtime.CompilerServices.ExtensionAttribute..ctor”

    //缺少编译器要求的成员“ystem.Runtime.CompilerServices.ExtensionAttribute..ctor” namespace System.Runtime.Compi ...

  6. 【BZOJ】3144: [Hnoi2013]切糕

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3144 MDZZ,不知道为什么被卡常数了/TAT(特判才过去的....论vector的危害性 ...

  7. Python day3_string的常见方法2_笔记

    1.分割字符串的4个方法partition,rpartition,split,rsplit(区别,partition是仅分割一个,split分割全部,r是从右边开始分割,split可以传参数,自定义分 ...

  8. [osg]osg绘制动态改变顶点的几何体

    最简单的顶点数据更新方法是预先获取setVertexArray()所用的数组数据,并对其进行更新.但是对于开启显示列表支持的几何体(这是默认的情况)来说,有一个问题需要特别需要引起注意,即显示列表中的 ...

  9. Android多线程模型

              作为开发者,我们都知道在开发过程中遇到耗时操作那是不可避免的,例如网络请求.文件读写.数据库操作等等.Android是单线程模型,这意味着Android UI操作并不是线程安全的并 ...

  10. JS异步函数 返回值

    1.  js 异步的几种情况 : 1.1 异步操作由浏览器内核的 webcore 来执行: onclick 由浏览器内核的 DOM Binding 模块来处理,当事件触发的时候,回调函数会立即添加到任 ...