一丶动态参数

  1.*args 位置参数,动态传参

def func(*food):
print(food) print(func("米饭","馒头","福建人","犹太人"))

  将所有的位置参数都赋给*food

  2.**kwargs 关键字参数,动态传参

# 关键字的动态传参
def eat(**food):
print(food)
print(eat(广东人= "福建人",goodeat = "饼干",我的天="飞天"))

  将关键字参数,以字典的形式赋给**food

  3.默认参数与动态参数的关系

  

  如果以位置参数,关键字参数,默认参数排列会报错,我们改一下默认参数的位置,发现只有在位置参数后面,关键字参数前面,默认参数才不会报错

def func(*name,gender="男",**hobby):
print(name,hobby,gender)
print(func("周杰伦","谢霆锋","吴京",hobby1="看电影",hobby2="唱歌"))

  总结一下顺序:

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

  如果想接收所有参数,可以用*arge 和 **kwargs组合

def trans_para(*args,**kwargs):
print(args)
print(kwargs)
trans_para("jinxin",12,[1,2,3,4],[3,4,],(1,4,7),{"a":"","c":456},country="china")

二丶命名空间

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

a = 10
def func():
a = 20 #当函数运行完毕,函数里面的a=20所占空间自动释放,不存在了
func()
print(a) #输出的是10

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

    命名空间分类:

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

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

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

    加载顺序:

      1.内置命名空间

      2.全局命名空间

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

    取值顺序:

      1.局部命名空间

      2.全局命名空间

      3.内置命名空间

a = 10
def func():
a = 20
print(a) #输出的是20
func()
print(a) #输出的是10

  2.作用域

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

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

    局部作用域:在函数的内部可以使用.

    

    作用域命名空间:

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

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

    我们可以通过globals()函数来查看全局作用域中的内容,也可以通过locals()来查看局部作用域中的变量和函数信息

a = 10
def func():
a = 20
b = 10
def abc():
print("哈哈")
print(a,b) #这里a,b都是使用的局部作用域
print(globals()) #打印全局作用域中的内容
print(locals()) #打印局部作用域中的内容
func()

三丶函数的嵌套

    1.只要遇见了()就是函数的调用,如果没有()就不是函数的调用

    2.函数的执行顺序

#函数的嵌套
def fun2():
print(222)
def fun3():
print(666)
print(444)
fun3()
print(888)
print(333)
fun2()
print(555)

四丶关键字 global和nonlocal

  global表示不再使用局部作用域中的内容了,而改用全局作用域中的变量

a = 10
def func():
global a
a = 20
print(a)
func()
print(a)

  nonlocal表示在局部作用域中,调用父级命名空间中的变量

a = 10
def func1():
a = 20
def func2():
nonlocal a
a = 30
print(a)
func2()
print(a)
func1()

函数补充:动态参数,函数嵌套,global与nonlocal关键的更多相关文章

  1. Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global以及nolocal的用法

    Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global以及nolocal的用法 目录 Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global ...

  2. 百万年薪python之路 -- 函数的动态参数练习

    1.继续整理函数相关知识点. 2.写函数,接收n个数字,求这些参数数字的和.(动态传参) def func(*args,**kwargs): num_sum = 0 num_dic = [] num ...

  3. 百万年薪python之路 -- 函数的动态参数

    1.函数的动态参数 1.1 动态接收位置参数 在参数位置用*表示接受任意参数 def eat(*args): print('我想吃',args) eat('蒸羊羔','蒸熊掌','蒸鹿尾儿','烧花鸭 ...

  4. Python开发基础-Day11内置函数补充、匿名函数、递归函数

    内置函数补充 python divmod()函数:把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b) 语法: divmod(a, b) #a.b为数字,a为除数,b ...

  5. python基础之内置函数补充、匿名函数、递归函数

    内置函数补充 python divmod()函数:把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b) 语法: 1 divmod(a, b) #a.b为数字,a为除数 ...

  6. php匿名函数和可变参数函数

    php匿名函数和可变参数函数 简介 直接上代码了: <?php $test1 = function($value) { echo $value; }; $test1('HelloWorld'); ...

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

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

  8. python day- 10 动态参数 函数的嵌套 命名空间和作用域 global和nolocal

    一.动态参数: 动态参数是形参的一类 分为:动态位置参数(* + 函数名)表示 调用后返回的是元祖 动态关键字参数(** + 函数名)表示 形参的排列顺序: 位置参数     >   动态位置参 ...

  9. python27期day10:函数的动态参数、函数的注释、函数的名称空间、函数的嵌套、global(修改全局的)、nonlocal(修改局部的)、函数名的第一类对象及使用、作业题。

    1.动态参数的作用: 能够接收不固定长度参数 位置参数过多时可以使用动态参数 * args是程序员之间约定俗称(可以更换但是不建议更换) * args获取的是一个元组 ** kwargs获取的是一个字 ...

随机推荐

  1. bzoj 2259 [Oibh] 新型计算机 —— 最短路

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2259 相邻点之间连边权为1的边,就是水最短路了: 要注意点上的数不能改成负数,但是想一想改成 ...

  2. Enum定义位域, 即可以通过位操作来产生未命名的值

    通过FlagsAttribute可以实现. // A bit field or flag enumeration of harvesting seasons. [Flags] public enum ...

  3. FZU 2059 MM (并查集+排序插入)

    Problem 2059 MM Accept: 109    Submit: 484Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem ...

  4. gSoap使用入门(2)----自定义接口头文件

    摘自:http://blog.csdn.net/zhuzhihai1988/article/details/8131556 接口头文件的格式在向导中没有看到明确的说明性的内容,但通过看开发包中示例程序 ...

  5. 远程访问Linux系统桌面

     让Windows可以远程访问Linux系统桌面 http://jingyan.baidu.com/article/d8072ac47b810eec95cefde8.html linux系统下,11款 ...

  6. 文本自动摘要:基于TextRank的中文新闻摘要

    TextRank算法源自于PageRank算法.PageRank算法最初是作为互联网网页排序的方法,经过轻微地改动,可以被应用于文本摘要领域. 本文分为两部分,第一部分介绍TextRank做文本自动摘 ...

  7. JavaScript巩固篇(一)——数据类型与全局变量、局部变量、垃圾回收机制、存储方式、生命周期

    知识要点 数据类型 存储方式 全局变量与局部变量 变量的生命周期 垃圾回收机制 知识概览 数据类型 JavaScript的数据类型分为:基本类型.引用类型 本质区别: 基本数据类型的变量实际值存储在栈 ...

  8. Linux之用户和用户组简析

    学习网址:http://c.biancheng.net/linux_tutorial/60/

  9. C++ BYTE、WORD与DWORD类型

    在VS中,BYTE与WORD,DWORD本质上都是一种无符号整型,它们在WINDEF.H中被定义,定义如下: typedef unsigned char       BYTE;typedef unsi ...

  10. U3D Shader基础

    http://blog.sina.com.cn/s/blog_471132920101dcnr.html 转载自风宇冲Unity3D教程学院 一个SubShader(渲染方案)是由一个个Pass块来执 ...