《Python》 函数进阶和名称空间作用域
函数进阶:
一、动态参数:*args **kwargs
*args是元祖形式,接收除去键值对以外的所有参数 # args可以换成任意变量名,约定俗成用args
**kwargs接收的只是键值对的参数,并保存在字典中。 # kwargs可以换成任意变量名,约定俗成用kwargs
*的魔性用法:
l1 = [1,2,3]
l2 = ['alex','taibai']
def func1(*args):
print(args) # 结果:('1','2','3','alex','taibai')
func1(*l1,*l2)
在函数的定义时,*位置参数聚合,**关键字参数聚合。
在函数的调用(执行)时,*位置参数打散(把列表打散成一个个元素),**关键字参数打散(把字典打散成一个个键值对)。
二、名称空间和作用域
1、名称空间分为三种:存放名字与值的关系的空间
全局名称空间:代码在运行伊始,创建的存储“变量名与值的关系”的空间
局部名称空间:在函数的运行中开辟的临时的空间
内置名称空间:python解释器为我们提供的名字:input,print,str,list,tuple...它们都是我们熟悉的,拿过来就可以用的方法
2、三种命名空间的加载和取值顺序:
加载顺序:内置命名空间(程序运行前加载)---->全局命名空间(程序运行中,从上到下加载)---->局部命名空间(程序运行中,调用时加载)
取值顺序: 就近原则
在局部调用:局部命名空间--->全局命名空间--->内置命名空间
在全局调用:全局命名空间--->内置命名空间
3、作用域:
全局作用域:包含内置名称空间,全局名称空间,整个文件的任意位置都能被引用,全局有效
局部作用域:局部名称空间,只能在局部范围内有效
4、关键字 global和nonlocal
global:
1、声明一个全局变量
2、在局部作用域想要对全局作用域的全局变量进行修改时,需要用到global(限于字符串,数字)
def func():
global a
a = 3
func()
print(a) count = 1
def search():
global count
count = 2
search()
print(count) global关键字举例
ps:对可变数据类型(list,dict,set)可以直接引用不用通过global。
li = [1,2,3]
dic = {'a':'b'} def change():
li.append('a')
dic['q'] = 'g'
print(dic)
print(li)
change()
print(li)
print(dic) 对于可变数据类型的应用举例
nonlocal:
1、不能修改全局变量
2、在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,并且引用的哪层,从那层以下的此变量全部发生改变。
def add_b():
b = 42
def do_global():
b = 10
print(b)
def dd_nonlocal():
nonlocal b
b = b + 20
print(b)
dd_nonlocal()
print(b)
do_global()
print(b)
add_b() nonlocal关键字举例
《Python》 函数进阶和名称空间作用域的更多相关文章
- Python记录9:函数4:名称空间作用域+闭包函数+装饰器
''' 一: 名称空间namespaces 名称空间就是存放名字与值绑定关系的内存空间 二: 名称空间分为三种 内置名称空间: 1. 特点: 存放是python解释器自 ...
- Python入门之函数的嵌套/名称空间/作用域/函数对象/闭包函数
本篇目录: 一.函数嵌套 二.函数名称空间与作用域 三.函数对象 四.闭包函数 ============================================================ ...
- python函数篇:名称空间、作用域和函数的嵌套
一.名称空间:(有3类) (1)内置名称空间(全局作用域) (2)全局名称空间(全局作用域) (3)局部名称空间(局部作用域) 关于名称空间的查询: x=1 def func(): print('fr ...
- python基础知识13---函数对象、函数嵌套、名称空间与作用域、装饰器
阅读目录 一 函数对象 二 函数嵌套 三 名称空间与作用域 四 闭包函数 五 装饰器 六 练习题 一 函数对象 1 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 ...
- day12 函数对象,名称空间与作用域
""" 今日内容: 1.函数参数传值细节 2.三元表达式 3.列表及字典推导式 4.函数对象 5.名称空间与作用域 6.函数的嵌套定义初识 ""&qu ...
- Python 入门基础10 --函数基础3 函数对象、名称空间、装饰器
今日内容 1.函数对象 2.名称空间与作用域 3.函数的嵌套调用与闭包 4.装饰器 一.函数对象 1.1 定义 函数名存放的就是函数地址,所以函数名也就是对象,称之为函数对象 1.2 函数对象的应用 ...
- Day11名称空间,作用域,闭包函数
Day11 1.函数对象: ①可以被引用 ②可以作为另一个函数的参数 ③可以作为另一个函数的返回值0 ④可以被存储到容器类型中 2.函数嵌套: ①嵌套调用:在一个函数中调用了另一个函数 ...
- Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global以及nolocal的用法
Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global以及nolocal的用法 目录 Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global ...
- python全栈开发-Day9 函数对象、函数嵌套、名称空间与作用域
一 .函数对象 一 .函数是第一类对象,即函数可以当作数据传递 可以被引用 可以当作参数传递 返回值可以是函数 可以当作容器类型的元素 二. 利用该特性,优雅的取代多分支的if def foo(): ...
随机推荐
- maven 插件在线安装
NO.1 在Eclipse中安装Maven插件安装详解 前言 本来是没打算写博客的,作为一个13年毕业的菜鸟,自认为水平太渣写不出什么好文章,但是前些日子看到一篇鼓励性质的文章说,技术人员的成长靠的就 ...
- 列举一些有所帮助的blog和文章
w3school hdoj imooc CSDN Github myGithub CmdMarkdown 一直在路上--记我从初中到本科近十年的学习成长历程 作者:周见智 C++中队列的建立与操作详细 ...
- 初探 Yii2 的测试模式 index-test.php
有没有发现高级版每个应用的 web 目录下有两个入口文件,一个index.php 一个 index-test.php通过init.bat可以切换到调试模式和产品模式,这两个模式相信同学们都很熟悉了,那 ...
- LoadRunner测试流程
使用LoadRunner 完成测试一般分为四个步骤: 2 Vvitrual User Generator 创建脚本 创建脚本,选择协议 录制脚本 编辑脚本 检查修改脚本是否有误 3 中央控制器(Con ...
- MVC ---- Manager.ttinclude内容
http://www.infoq.com/cn/news/2009/11/T4-Multiple-Output 初次认识并尝试使用T4生成代码的时候,相关学习资料似乎比较少.不过现在VS2010 的M ...
- Linux 普通用户拿到root权限及使用szrz命令上传下载文件
1.如何拿到root权限 在shell里如果看到你的命令输入行最前面显示的是 $符号,说明目前账号只有系统的普通权限. 输入:sudo su 这时能看到shell的输入行最前面已经显示的是#号,说明已 ...
- Java I/O学习 标准的I/O重定向
public class Test{ /* * 标准的I/O重定向 * System.setIn(InputStream) * System.setOut(PrintStream) * System. ...
- Linux进程内存布局(翻译)
Anatomy of a Program in Memory 在一个多任务OS中,每个进程都运行在它自己的内存沙箱中.这个沙箱就是虚拟地址空间,在32位下就是一块容量为4GB的内存地址.内核将这些虚拟 ...
- Java 中时间处理 System.currentTimeMillis()
import org.testng.annotations.Test;import java.text.ParseException;import java.text.SimpleDateFormat ...
- IDEA配置GIT
注:此方法可用于配置gitlab也可用于配置github 1.在github中创建一个账号:https://github.com/join?source=header-home 2.下载并安装git: ...