《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(): ...
随机推荐
- AcceptAsync和BeginAccept的区别
Difference between […]Async and Begin[…] .net asynchronous APIs Note that most *Async methods (with ...
- UVa 1614 奇怪的股市
https://vjudge.net/problem/UVA-1614 题意:输入一个长度为n的序列a,满足1<=ai<=i,要求确定每个数的正负号,使得所有数的总和为0. 思路:贪心部分 ...
- python 元组列表转为字典
#create a list l = [(), (), (), (), (), ()] d = {} for a, b in l: d.setdefault(a, []).append(b) prin ...
- Java 打开Excel,往Excel中存入值,保存的excel格式分别是xls和xlsx
https://mirrors.cnnic.cn/apache/poi/xmlbeans/release/src/ package Excel; import org.apache.poi.hssf. ...
- EsayUI + MVC + ADO.NET(工作单元)
关联的设计 关联本身不是一个模式,但它在领域建模的过程中非常重要,所以需要在探讨各种模式之前,先讨论一下对象之间的关联该如何设计.我觉得对象的关联的设计可以遵循如下的一些原则: 关联尽量少,对象之间的 ...
- linux下模拟FTP服务器(笔记)
要在linux下做一个模仿ftp的小型服务器,后来在百度文库中找到一份算是比较完整的实现,就在原代码一些重要部分上备注自己的理解(可能有误,千万不要轻易相信). 客户端: 客户端要从服务器端中读取数据 ...
- 常用的vi/vim基本命令(持续更新)
★删除/复制/粘贴 全部删除:按esc后,然后dG 全部复制:按esc后,然后ggyG 全选高亮显示:按esc后,然后ggvG或者ggVG 按“+p“可将系统全局粘贴板里的内容粘贴进来 y ...
- NGUI实现简单的倒计时组件
using System; using UnityEngine; public enum ETimerType { CommonFormat, // 78 77 76 75 ... TimeForma ...
- 雷林鹏分享:C# 不安全代码
C# 不安全代码 当一个代码块使用 unsafe 修饰符标记时,C# 允许在函数中使用指针变量.不安全代码或非托管代码是指使用了指针变量的代码块. 指针变量 指针 是值为另一个变量的地址的变量,即,内 ...
- Confluence 6 配置 LDAP 连接池
当 LDAP 连接池被启用后,LDAP 目录服务器将会维护一个连接池同时当必要的时候指派他们.当一个连接关闭后,这个连接将会放回到连接池中供以后进行使用.这种设置将会有效的提高系统性能. 希望配置 L ...