01 动态参数 *args **kwargs
  
在函数的定义时,* ** 代表聚合。
def func(**kwargs):
print(kwargs)
func(**{"name":'alex'}, **{'age': 46}) # {'name': 'alex', 'age': 46} 聚合
函数的执行(调用)时,* ** 代表打散。
def func(*args,**kwargs):    #* 代表聚合
print(args)
print(kwargs)
func(*[1,2,3], *'abfc', **{'name':'alex'}, **{'age': 46}) # *代表打散
def func(*agrs):
print(agrs)
# func([1,2,3], [4,5,6 ], 'alex') # ([1, 2, 3], [4, 5, 6], 'alex')
func(*[1,2,3], *[4,5,6 ], *'alex') # (1, 2, 3, 4, 5, 6, 'a', 'l', 'e', 'x') # 打散
02 形参的顺序
形参顺序: 位置参数 *args 默认参数 **kwargs
def func(a,b,*args,sex='男',**kwargs,):
print(a)
print(b)
print(args)
print(sex)
print(kwargs)
func(1,2,3,4,5,sex='女',name='alex')
03 名称空间(临时,全局,内置)

全局名称空间:存放的是py文件中变量与值的对应关系
局部名称空间:在函数运行时,临时开辟的存放变量名与值得对应关系的空间,函数执行完毕,这块内存空间会被清空。

内置名称空间:内置函数,关键字等等。 print() input()

04 作用域:全局作用域,局部作用域
作用域就是作用范围,按照生效范围可以分为全局作用域和局部作用域。
全局作用域:
  生效于:内置名称空间,全局名称空间
局部作用域:
  生效于:局部名称空间 (可以用global声明为全局)

05 加载顺序与取值顺序

三种名称空间加载顺序:

  内置名称空间 --->  全局名称空间 ---> 局部名称空间

三种名称空间的取值顺序:

  在全局: 全局名称空间 ---> 内置命名空间

  在局部:(就近原则)LEGB原则,局部名称空间 --- > 全局名称空间 ---> 内置名称空间

print(input)  # <built-in function input>  #第三取值
input = 'alex' # 第二取值
def func():
input = 'echo' # 第一取值
print(input)
func()
06 内置函数:globals() locals()
globals() 返回全局作用于的所有内容
locals() 返回当前作用于的所有内容
def func():
a = 12
b = 20
print(locals()) # 返回一个字典:当前作用域的所有内容 {'b': 20, 'a': 12}
print(globals()) # 返回一个字典:包含全局作用域所有的内容 {'__name__': '__main__', '__doc__': None,
# '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000002503C91B470>,
# '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>,
# '__file__': 'D:/study/day 10/00 代码草稿.py', '__cached__': None, 'func': <function func at 0x000002503C813EA0>}
07 关键字:global nonlocal

global:

  1,声明一个全局变量。

  2,局部作用域不能对全局作用域的变量进行修改,只能引用,通过设置global可以修改(限于字符串,数字)

def func():
global a # 声明 a=3 为全局变量,之后可以在函数为打印a
a = 3
func()
print(a) count = 1
def search():
global count # 声明后,可以对全局变量进行修改
count = 2
search()
print(count)

对可变数据类型(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 wrapper():
name = 'alex'
def inner():
nonlocal name
name += 'b'
# print(name)
def inner1():
name = 'echo'
print('', name) # alex
inner()
print('', name) # alexb
print('', name) # alexb (修改了inner1里面name变量的值)
wrapper()


day 09 函数的进阶的更多相关文章

  1. JavaScript学习09 函数本质及Function对象深入探索

    JavaScript学习09 函数本质及Function对象深入探索 在JavaScript中,函数function就是对象. JS中没有方法重载 在JavaScript中,没有方法(函数)重载的概念 ...

  2. 小学生都能学会的python(函数的进阶)

    小学生都能学会的python(函数的进阶) 1. 动态传参 形参: 1. 位置参数 2. 默认值参数 3. 动态传参 *args 动态接收位置参数 **kwargs 动态接收关键字参数 def fun ...

  3. python基础(9)-迭代器&生成器函数&生成器进阶&推导式

    迭代器 可迭代协议和迭代器协议 可迭代协议 只要含有__iter__方法的对象都是可迭代的 迭代器协议 内部含有__next__和__iter__方法的就是迭代器 关系 1.可以被for循环的都是可迭 ...

  4. C++学习笔记:09 函数模板与类模板

    课程<C++语言程序设计进阶>清华大学 郑莉老师) 引入 考虑一个求绝对值函数myabs,对于int,double,float等数据类型需要重载多次,编写多个函数体.函数体逻辑代码完全一致 ...

  5. 初涉JavaScript模式 (10) : 函数 【进阶用法】

    写在前面 不知不觉写到第10篇了.这篇写起来很忐忑,终于和高级搭上边了(呵呵),这篇我们 主要 说一下 JS 方法的部分高级用法(我知道的),笔者水平有限,难免有错.废话不多少,进入正文. 初始化 我 ...

  6. Python之函数的进阶(带参数的装饰器)

    函数篇--装饰器二 带参数的装饰器 def outer(flag): def timer(func): def inner(*args,**kwargs): if flag: print('''执行函 ...

  7. Day 09 函数基础

    函数初级 简介 # 函数是一系列代码的集合,用来完成某项特定的功能 优点 '''1. 避免代码的冗余2. 让程序代码结构更加清晰3. 让代码具有复用性,便于维护''' 函数四部分 '''1. 函数名: ...

  8. python成长之路七-函数的进阶

    1,python中,名称空间分三种: 全局命名空间 局部命名空间(临时命名空间) 内置名称空间 2,作用域(两种): 1,全局作用域  包含:全局名称空间   内置名称空间 2,局部作用域  包含:局 ...

  9. day 0314函数的进阶

    1.空间:内置空间,全局空间,局部空间. 内置空间:空间存放python解释器,为我们提供了方便的名字:input,print,str,list,tuple 三个空间的加载顺序: 内置空间>&g ...

随机推荐

  1. HBASE小结--待续使用

    构建在HDFS之上的分布式,面向列的存储系统,使用zookeeper做协同服务,在需要实时读写和随机访问超大规模数据集的时候使用 缺点:非关系型,不支持SQL,数据类型单一(字符串,无类型),之支持单 ...

  2. linux终端发送邮件

    使用mail: echo "This is message to send" | mail -a /tmp/attachment.txt -s "This is Subj ...

  3. userdel删除用户失败提示:userdel: user * is currently logged in 解决方法

    操作环境 SuSE10/SuSE11 问题现象   执行userdel -rf oracle删除用户失败,提示userdel: user 'oracle' is currently logged in ...

  4. Android DevArt5:如何在Android中创建多线程?

    本篇内容: 如何在Android中创建多进程?查看进程的三种方式有哪些? 多进程模式的运行机制?- 演示了多进程出现问题中的两种情况: 静态成员失效 Application多次创建 IPC基础概念介绍 ...

  5. delphi通过TADOConnection组件直接连接MSSQL数据库并读写数据。

    unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System ...

  6. php缩小png图片时,不损失透明色的办法

    做站点时,通常要将图片缩小成合适的尺寸,jpg图片缩小比较容易,png图片如果带了透明色的话,按照jpg的方式来缩小的话,就会造成透明色损失.那么如何处理,才能保存透明色呢? 主要是利用gd库的两个方 ...

  7. Maven项目之间的关系

    1. 依赖关系 1.1 标签<dependency>把另一个项目的jar引入到当前项目 1.2 自动下载另一个项目所依赖的其他项目 2. 继承关系. 2.1 父项目是pom类型 2.2 子 ...

  8. ubuntu14配置opencv3.4.1(转)

    网站:https://blog.csdn.net/a1429331875/article/details/31539129 写此博客的目的是为了方便大家的学习,我是搞了半天,通过上网查找资料才成功的. ...

  9. 关于池化(pooling)理解!!!

    网上看到一个池化的解释是: 为了描述大的图像,可以对不同位置的特征进行聚合统计,如计算平均值或者是最大值,即mean-pooling和max-pooling 我的想法是,图像做卷积以后,将图像信息(特 ...

  10. 立个FLAG

    今天再次初步浏览了寒假生活: 三篇阅读笔记(人月神话,梦断代码,程序员修炼之道:从小工到专家),2月24日之前发表开发记账本软件,连续七天以上发表开发进度 学会使用GitHub,录制抖音(父母评价作品 ...