2018.8.9 python中的动态传参与命名空间
主要内容:
1、函数参数 ----动态传参
2、名称空间与作用域
3、函数的嵌套
4、global,nonlocal关键字
一、函数参数 ------动态传参
形参的第三种:动态传参
动态传参分为两种:
1、动态接受位置参数,在参数位置编写*表示接受任意内容,多个参数传递进去,接收到的是列表。

动态传参的时候要注意,动态参数必须在位置参数的后面。

这个程序运行会报错,因为前面传递进去的所有位置参数都被*food接收了,a和b永远接收不到参数。
关于默认值参数:

我们发现,默认值参数写在动态参数前面,默认值参数只有一种可能生效。

这个时候我们发现所有的默认值都生效了,如果不给出关键字传参,那么默认值是永远生效的。
2、动态接收关键字参数
在python中使用**来接受动态关键字参数。

这时候接收的是一个字典。
最终顺序:
位置参数 > *args > 默认值参数 >**kwargs
这四种参数可以任意的进行使用
动态参数的另一种传参方式:

在实参位置上给一个序列,列表,可迭代对象前面加个*表示把这个序列打散。如果是字典也可以打散,不过需要两个*。
函数的注释:
def func(a,b):
'''
这个函数是用来计算a和b的和
:param a: 第一个数据
:param b: 第二个数据
:return: 返回的是两个数的和
'''
return a + b
print(func(5,6))
print(func.__doc__) #document文档
二、命名空间与作用域
我们给存放名字和值得关系的空间起一个名字:命名空间。我们的变量在存储的时候就是存储在这片空间中的。
命名空间分类:
1、全局命名空间------>函数外声明的变量
2、局部命名空间------->函数中声明的变量
3、内置命名空间-------->python解释器为我们提供的名字,list,tuple,str,int
作用域:
1、全局作用域:全局命名空间+内置命名空间
2、局部作用域:局部命名空间
我们可以通过globals()函数查看全局作用域中的内容,也可以通过locals()来查看局部作用域中的变量和函数信息。

三、函数的嵌套
a = 1
def fun_1():
a = 2
def fun_2():
nonlocal a
a = 3
def fun_3():
a = 4
print(a)
print(a)
fun_3()
print(a)
print(a)
fun_2()
print(a)
print(a)
fun_1()
print(a) 结果 1 2 3 4 3 3 1
四、关键字global和nonlocal

global a 1、可以把全局中的内容引入到函数内部
2、在全局创建一个a变量
nonlocal 表示在局部作用域中,寻找外层函数中离他最近的那个变量
2018.8.9 python中的动态传参与命名空间的更多相关文章
- python记录_day10 动态传参 命名空间 作用域
一.动态传参 动态传参用到 *args 和 **kwargs ,*号表示接收位置参数,args是参数名:**表示接收关键字参数,kwargs是参数名 def chi(*food): print(foo ...
- MaxPlus WStr Python 中的字符串传递给 MaxPlus
MaxPlus WStr Python 中的字符串传递给 MaxPlus 在 MaxPlus 中,很多方法的参数使用的字符串的类是 WStr,所以在 Python 中,我们传递字符串的时候,就要把 P ...
- Python中的动态类
Python中的动态类 有这样一个需求,我有SegmentReader.PostagReader.ConllReader这三个Reader,他们都继承于一个Reader类.在程序运行中,由用户通过se ...
- python之路--动态传参,作用域,函数嵌套
一 . 动态传参(重点) * , ** * 与 ** * 在形参位置. * 表示不定参数, 接收的是位置参数 接收到的位置参数的动态传参: 都是元组 def eat(*food): # 在形参这里 ...
- python函数的动态传参.作用域与命名空间
一.动态传参1.*表示动态传参. 可以接受所有的位置参数传参的时候自动的把实参打包成元组 交给形参 def chi(*food): print(food) chi() # 动态传参可以不传参数 chi ...
- Python中的引用传参
Python中函数参数是引用传递(注意不是值传递).对于不可变类型,因变量不能修改,所以运算不会影响到变量自身:而对于可变类型来说,函数体中的运算有可能会更改传入的参数变量. 引用传参一: >& ...
- python中传值和传地址问题
在python中,还没有对这个知识点有一个详细的定义,很模糊的说明了,通过下面代码,可以观察出来,什么时候传的是值,什么时候传的是地址 有时候会发现自己的数据发生变化,可能就是这个原因,python的 ...
- 2018.8.15 python 中的sorted()、filter()、map()函数
主要内容: 1.lambda匿名函数 2.sorted() 3.filter() 4.map() 5.递归函数 一. lambda匿名函数 为了解决一些简单的需求而设计的一句话函数 # 计算n的n次方 ...
- python中给函数传参是传值还是传引用
首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...
随机推荐
- angular6 iframe应用
问题一. iframe如何自适应屏幕高度 解决思路:通过设置iframe外层父元素高度等于window高度,再相对于父元素定位iframe元素:案例如下: 第一步: 模板文件中使用iframe // ...
- php基础——语法、变量
一.php语法: 1.php语言需要写在<?php ?>标签里面 2.php语言每行结束需要使用:作为结束符 3.php是一门弱语言,不要求先声明变量 4.可嵌套在HTML和js语言中 ...
- 分享8点超级有用的Python编程建议
我们在用Python进行机器学习建模项目的时候,每个人都会有自己的一套项目文件管理的习惯,我自己也有一套方法,是自己曾经踩过的坑总结出来的,现在在这里分享一下给大家,希望多少有些地方可以给大家借鉴.
- 服务器配置https协议,三种免费的方法
最近想搞一个网站玩玩,发布网站用https协议已经是大势所趋了.例如微信小程序,不使用https协议根本不让接入.所以,分享一下我尝试过的三种方法. 1.Linux自签(OPENSSL生成SSL自签证 ...
- C#中winform中panel重叠无法显示问题
C#中winform中panel重叠无法显示问题: 最近开发一个项目有个需求是需要多个模式来回切换的,本来考虑使用多个窗口来实现这个功能,但是这样做浪费资源,而且工作量大,所以想到使用panel控件来 ...
- web前端体系-了解前端,深入前端,架构前端,再看前端。大体系-知识-小细节
1.了解前端,深入前端,架构前端,再看前端.大体系-知识-小细节 个人认为:前端发展最终的导向是前端工程化,智能化,模块化,组件化,层次化. 2.面试第一关:理论知识. 2-1.http标准 2-2. ...
- 从单片机到操作系统⑦——深入了解FreeRTOS的延时机制
>没研究过操作系统的源码都不算学过操作系统 # FreeRTOS 时间管理 时间管理包括两个方面:系统节拍以及任务延时管理. ## 系统节拍: 在前面的文章也讲得很多,想要系统正常运行,那么时钟 ...
- html5新媒体播放器标签video、audio 与embed、object
html5里的一些新的标签,看到里面object.embed.video.audio都可以添加视频或音频文件 embed是针对非IE的浏览器的媒体播放器 video是html5出的一种新标准,但并不是 ...
- HTML5 video视频字幕的使用和制作
一.video支持视频格式: 以下是三种最常用的格式 1. ogg格式:带有Theora视频编码(免费)+Vorbis音频编码的Ogg文件(免费) 支持的浏览器:firefox.chrome.oper ...
- bugku 很普通的数独
下载下是一个没有后缀的文件,使用winhex打开,头文件为50 4b 03 为zip文件,修改后缀,打开压缩包,是一大堆数独图片. 仔细看了好久,发现这几张图片像二维码,而且1 5 21这三张图的位置 ...