03,动态参数 *args,**kwargs

# 用户传入到函数中的实参数量不定时,或者是为了以后拓展,# 此时要用到动态参数*args,**kwargs(万能参数。)# *args接收的是所有的位置参数。# **kwargs接收的是所有的关键字参数。# 位置参数,*args,默认参数, **kwargs
# def func1(*args, **kwargs):
#     print(args)
#     print(kwargs)# func1(1, 2, 3, 4)
# func1(x=4, y=5, z=6)

def func1(*args, **kwargs):print(kwargs)
func1(1, 2, 3, x=4, y=5, z=6)

先拿位置参数 和 默认参数  发现 *args 要放在他俩中间

def func(a, b, *args, sex='男'):    print(a)    print(b)    print(args)    print(sex)func(1, 2, 5, 6, 7, 8, sex ='女')

再拿 位置参数,*args, 默认参数,  发现 **kwargs 只能放在最后 

def func(a, b, *args, sex='男', age=20, **kwargs):print(a)print(b)print(args)print(sex)print(age)print(kwargs)
func(1, 2, 5, 6, 7, 8, x=5, y=9, age=33, sex ='女')

PS: 计算器  输入数字 进行相加

def sum1(*args):ret = 0for i in args:ret += ireturn ret
print(sum1(1, 2, 3,))

      * 的魔法用法

  def func(*args, **kwargs):             #  函数的定义  * 用意是聚合

  在函数的执行时,                           #    *   的用意是打撒。

def func(*args, **kwargs):print(args)# print(kwargs)
l1 = [1, 2, 6]
l2 = [55, 66, 77]
s1 = 'dhfjgdfgj'
s2 = 'vocvb,cmb'
dic1 = {'name': 'alex'}
dic2 = {'age': 99}
func(*l1, *l2)
# func(**dic1, **dic2)

def func(*args, **kwargs):# print(args)print(kwargs)
l1 = [1, 2, 6]
l2 = [55, 66, 77]
s1 = 'dhfjgdfgj'
s2 = 'vocvb,cmb'
dic1 = {'name': 'alex'}
dic2 = {'age': 99}
# func(*l1, *l2)
func(**dic1, **dic2)


04,名称空间,作用域,作用域链,加载顺序等。
#当程序运行时,代码从上至下一次读取,遇到变量与值,# 他会在内存中开辟一个空间,存放变量与值的内存地址的对应关系。#这样存储变量与值得对应关系的空间叫做名称空间(命名空间)。#当解释器遇到函数时,他会将函数名存储在内存中,但是对于函数体莫不关心。#当函数执行时,他会通过函数名找到函数体,然后将函数体里面的变量等对应关系存放在一个# 临时开辟的空间中,随着函数的结束,临时的空间关闭,这样的空间叫做临时名称空间。
# def func1():
#     a = 2
#     b = 3
# func1()

名称空间:    内置名称空间    全局名称空间    局部名称空间加载顺序:内置名称空间  ---> 全局名称空间(程序运行时) ---->局部名称空间(函数执行时)作用域:    全局作用域:内置名称空间 全局名称空间    局部作用域:局部名称空间取值顺序(单向):局部名称空间(函数执行时) ---> 全局名称空间 ---> 内置名称空间L localE ecloseG globalB Built-in


05,函数的嵌套。 判断 运行的 先后顺序 
print(111)   # 1
def func1():name = 'alex'print(name)  # 2def inner():a = 2print(a)  # 3
    inner()
func1()

print(111)        # 1
def func1():  name = 'alex'print(name)   # 3def inner():a = 2print(a)  # 4
    inner()
print(333)     # 2
func1()
print(444)   # 5

print(111)   # 1
def func1():name = 'alex'print(name)  # 2 def inner():a = 2print(a)  # 4print(444)   # 3
    inner()print(555)   # 5
func1()


06,global,nonlocal。

# 在全局名称空间里得到局部名称空间的变量# 1,return# 2,global    # 1,在局部作用域中声明一个全局变量。    # 2,在局部作用域中,更改一个全局变量。    # 补充:        # 对于可变的数据类型,函数中如果对其进行操作,改变全局不用引用global.
return
# def func1():
#     name = 'alex'
#     return name
# ret = func1()
# print(ret)

     global
1,在局部作用域中声明一个全局变量。
# def func1():
#     global name
#     name = 'alex'
# func1()
# print(name)

2,在局部作用域中,更改一个全局变量。
# name = '老男孩'
# def func1():
#     global name
#     name = 'alex'
# func1()
# print(name)

 # 对于可变的数据类型,函数中如果对其进行操作,改变全局不用引用global.
# l1 = [1, 2, 3]
# def func1():
#     l1.append(666)
# func1()
# print(l1)

    nonlocal
#1,不能改变一个全局变量。# 在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,# 并且引用的哪层,从那层及以下此变量全部发生改变。
1,不能改变一个全局变量。 报错!
name = "老男孩"
def func1():nonlocal nameprint(name)
func1()

# 在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,# 并且引用的哪层,从那层及以下此变量全部发生改变。
def func1():name = 'alex'print(name)  # 1, alexdef inner():nonlocal namename = '老男孩'print(name)  # 2 老男孩
    inner()print(name)  # 3 老男孩
func1()

 


转载于:https://www.cnblogs.com/HoneyTYX/p/9021244.html

动态参数 名称空间 作用域 作用域链 加载顺序 函数的嵌套 global nonlocal 等的用法总结...相关推荐

  1. 函数的嵌套,名称空间和作用域

    假如有一个函数,实现返回两个数中的较大值: def my_max(x,y):m = x if x>y else yreturn mbigger = my_max(10,20)print(bigg ...

  2. Python Day 10 函数(名称空间,作用域,作用域链,加载顺序等; 函数的嵌套 global,nonlocal)...

    Python Day 10  函数(名称空间,作用域,作用域链,加载顺序等; 函数的嵌套 global,nonlocal) 名称空间(命名空间): 当程序运行时,代码从上至下一次读取,遇到变量与值, ...

  3. Python基础知识——函数的基本使用、函数的参数、名称空间与作用域、函数对象与闭包、 装饰器、迭代器、生成器与yield、函数递归、面向过程与函数式(map、reduce、filter)

    文章目录 1 函数的基本使用 一 引入 二 定义函数 三 调用函数与函数返回值 2 函数的参数 一 形参与实参介绍 二 形参与实参的具体使用 2.1 位置参数 2.2 关键字参数 2.3 默认参数 2 ...

  4. day11函数的进阶动态参数,命名空间,作用域,第一类对象

    一.习题收藏 5.写函数,计算传入字符串中[数字].[字母].[空格] 以及 [其他]的个数,并返回结果. # def func4(s): # dic = {# 'num':0,'alpha':0,' ...

  5. python 类的执行中保部存值_python函数名称空间与作用域、闭包

    一.命名空间概念 1.命名空间(name space) 名称空间是存放名字的地方. 若变量x=1,1存放在内存中,命名空间是存放名字x.x与1绑定关系的地方. 2.名称空间加载顺序 python te ...

  6. python函数作用域与闭包_python函数名称空间与作用域、闭包

    一.命名空间概念 1.命名空间(name space) 名称空间是存放名字的地方. 若变量x=1,1存放在内存中,命名空间是存放名字x.x与1绑定关系的地方. 2.名称空间加载顺序 python te ...

  7. 函数对象,名称空间与作用域,闭包,装饰器

    函数是第一类对象即可以被当做数据取使用 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 1.可以被引用 先看变量可以怎么玩 age=18 x=age 把 ...

  8. python 函数可以作为容器对象的元素_python第十二天, 三元表达式, 函数对象,名称空间与作用域,函数的嵌套定义...

    复习 1. 字符串的比较: 2. 函数的参数:形参与实参 3. 实参的分类:位置实参与关键字实参 4. 形参分类: 1.无值位置形参 2.有值位置形参 3.可变长位置形参 4.有无值关键字形参 5.可 ...

  9. 函数对象 函数嵌套 名称空间与作用域

    函数对象: 函数是第一类对象,即函数可以当做数据传递 1 可以被引用 2 可以当做参数传递 3 返回值可以是函数  (函数名 不带() 就是函数名的内存地址,带括号就是执行函数) 4 可以当做容器类型 ...

最新文章

  1. .NET中的枚举(Enum)
  2. 计算机制图学什么,计算机制图
  3. 容器化的 DevOps 工作流
  4. 【docker】使用云服务器运行docker时无法访问宿主机的映射端口
  5. javascript 密码花园 并不清晰的js基础 总结(1)
  6. shell检查Android设备连接状态
  7. 西门子1200PLC模拟量测温案例
  8. nginx的max_fails的bug
  9. 成熟男人与24岁女孩精彩对白(转)
  10. 如何培养小学生数学独立思考能力?
  11. 英国访问学者签证材料要求
  12. 【硬核扫盲】到底什么是相干光通信?
  13. Python求100以内素数的和。
  14. adb(安卓调试桥)命令-新手入门自学笔记
  15. 地图与地理坐标可视化
  16. 电子制造业仓库管理常见问题及解决方法
  17. 虚拟机VMware上安装Fedora
  18. 专访:吴洪声谈移动互联网下的“站长服务”生态
  19. C++里面的取整函数
  20. No hardware target is open (xilinx )

热门文章

  1. 《操作系统真象还原》——0.7 内存访问为什么要分段
  2. openstack M 版 neutron网络组件基础入门
  3. bootstrap基础学习四篇
  4. (转)Inno Setup入门(二十一)——Inno Setup类参考(7)
  5. struts2中用户登陆验证的常用方法
  6. Vivado中IP核生成文件
  7. 飞机上为啥禁止使用手机?
  8. Excel随机排考号方法
  9. opencv-python 视频处理之时光倒流
  10. python3 tcp 文件传输源码