动态参数    *args   **kwargs

      *args  动态参数,万能参数

      # args 接受的就是实参对应的  所有位置参数,并将其放在元祖中。

def func(*args):
print(args)
func(1,2,3,4,5,6) # (1, 2, 3, 4, 5, 6)

      # 形参对应顺序:   位置参数, *args  ,默认参数。

def func(a,b,c,*args,sex = '男'):
print(a)
print(b)
print(c)
print(args)
print(sex)
func(2,3,4,5,6,7,sex = '女') #
#
#
# (5, 6, 7)
# 女

**kwargs   动态传参,它将所有的关键字参数(无意义的)放到一个字典中。

def func(a,b,c,**kwargs):
print(a)
print(b)
print(c)
print(kwargs)
func(1,2,d = 4,v = 6,c = 3) #
#
#
# {'d': 4, 'v': 6}

      形参的最终顺序: 位置参数, *args,默认参数,**kwargs

def func(a,b,c,d,*args,e = '男',**kwargs):
print(a)
print(b)
print(c)
print(d)
print(args)
print(e)
print(kwargs)
func(1,2,3,4,5,6,7,e = '女',f = 4,v = 6,) #
#
#
#
# (5, 6, 7)
# 女
# {'v': 6, 'f': 4}

#  在函数的调用执行时,

  *可迭代对象,代表打散可迭代对象(list,tuple,str,dict(键))将元素一一加入到args.

#  在函数定义时,*args,**kwargs 代表的是聚合。

def func(*args):
print(args)
l1 = [1,2,3]
l2 = [4,5,6,7]
func(*l1,*l2) # (1, 2, 3, 4, 5, 6, 7)
def func(*args):
print(args)
func(1,2,3,4,5,6,7) # (1, 2, 3, 4, 5, 6, 7)

  **字典,代表打散,将所有键值对放到一个kwargs字典里。

def func(**kwargs):
print(kwargs)
dic1 = {'k1':1,'k2':2,'k3':3}
dic2 = {'name':'顾清秋','age':17}
func(**dic1,**dic2) # {'name': '顾清秋', 'k3': 3, 'age': 17, 'k2': 2, 'k1': 1}

命名空间一共分为三种:

      全局命名空间:代码在运行的伊始,创建的存储 ‘变量名与值的关系’ 的空间叫做全局命名空间。

      局部命名空间,在函数的运行中开辟的临时空间叫做局部命名空间。

      内置命名空间。python解释器存在的内置函数运行时的空间叫做内置命名空间。

三种命名空间的加载顺序与取值顺序:

     加载顺序:内置命名空间--->全局命名空间--->局部命名空间。

     取值顺序:   局部命名空间--->全局命名空间--->内置命名空间。

     综上所述,在找寻变量时,从小范围,一层一层到大范围去找寻。

作用域:

    作用域就是作用范围,按照生效范围可以分为全局作用域和局部作用域。

   全局作用域:包含内置命名空间,全局命名空间,在整个文件的任意位置都能被引用,全局有效。

   局部作用域:局部命名空间,只能在局部范围内生效。

globals 和 locals 方法:

    globals:   函数会以字典类型返回当前位置的全部全局变量。

    locals:   函数会以字典类型返回当前位置的全部局部变量。

c = 1
def func():
a = 12
b = 20
print(locals()) #{'b': 20, 'a': 12}
print(globals())
func()

global 关键字,nonlocal 关键字。

    global:

      1. 声明一个全局变量。

def func():
global a
a = 3
func()
print(a) #

       2. 在局部作用域想要对全局作用域的全局变量进行修改时,需要用到global(限于字符串,数字)。

count = 1
def search():
global count
count = 2
search()
print(count) #

      对可变数据类型(list,dict,set)可以直接引用不用通过global。

li = [1,2,3]
dic = {'k1':1}
def change():
li.append('a')
dic['k2'] = 2
print(li) #[1, 2, 3, 'a']
print(dic) #{'k2': 2, 'k1': 1}
change()
print(li) #[1, 2, 3, 'a']
print(dic) #{'k2': 2, 'k1': 1}

      nonlocal:

        1,不能修改全局变量。

      2,在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,并且引用的哪层,从那层及以下此变量全部发生改变。

def func():
b = 2
def func1():
b = 4
print(b) #
def func2():
nonlocal b
b = b + 4 #
print(b)
func2()
print(b) #
func1()
print(b) #
func()

python‘s tenth day for me的更多相关文章

  1. Python语言100例

    Python版本:python 3.2.2 电脑系统:win7旗舰 实例来源:python菜鸟教程100例 #!/usr/bin/python # -*- coding: UTF-8 -*- impo ...

  2. 机器学习算法基础(Python和R语言实现)

    https://www.analyticsvidhya.com/blog/2015/08/common-machine-learning-algorithms/?spm=5176.100239.blo ...

  3. python瓦登尔湖词频统计

    #瓦登尔湖词频统计: import string path = 'D:/python3/Walden.txt' with open(path,'r',encoding= 'utf-8') as tex ...

  4. Python 100例(上)

    如果你已经把基础看完,可以尝试一下看看以下例子了,如果不会做也不要紧,你要尝试手动把所有的代码都敲一边.别嫌麻烦,因为都是从麻烦到简单的. 实例1: 题目:有1.2.3.4个数字,能组成多少个相互不同 ...

  5. 10个Python练手小程序,学习python的很好的资料

    [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去  掉不满足条件的排列 ...

  6. Python机器学习实践与Kaggle实战(转)

    https://mlnote.wordpress.com/2015/12/16/python%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E5%AE%9E%E8%B7%B5 ...

  7. python部分内容存档

    笨办法学python. 1 Ec6字符串和文本... 1 ec7. 1 ec8. 1 Ec9. 1 Ec10 转义字符... 1 Ec11提问... 1 raw_input和input的区别... 1 ...

  8. So you want to write a desktop app in Python

    So you want to write a desktop app in Python Thomas Kluyver 2014-06-16 23:55 51 Comments Source This ...

  9. 【Python精华】100个Python练手小程序

    100个Python练手小程序,学习python的很好的资料,覆盖了python中的每一部分,可以边学习边练习,更容易掌握python. [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同 ...

随机推荐

  1. Windows Desktop Optimization.bat

    界面: github: https://github.com/m2nlight/WindowsDesktopOptimization Config Service [Disabled] Windows ...

  2. C#外部类、内部类(嵌套类)之间的成员访问特点

    最近程序中需要用到多线程工作下的单例模式.而其多种实现方法中,利用内部类实现懒汉模式是一种值得推荐的方式.顺便也就对内部类和外部类之间的关系做了一下研究,总结如下(理解不困难,不粘贴代码了,有需要的留 ...

  3. CountDownLatch闭锁

    CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 闭锁可以延迟线程的进度直到其到达终止状态,闭锁可以用来确保某些活动直到其他活动都完 ...

  4. [转载]Java动态填充word文档并上传到服务器

    一. 需求背景 在一些特殊应用场合,客户希望在服务器上生成文档的同时并填充数据,客户端的页面不显示打开文档,但是服务器上生成文档对服务器压力很大,目前服务器上生成文档第一种就是方式是jacob, 但是 ...

  5. MMU实验实验

    SRAM比较贵,访问方便,发出地址就可以, SDRAM比较便宜 2440的启动方式: 1 .NOR启动   0地址指向NOR(BANK0) 2 .NANA启动 0地址指向片内的SRAM(steppin ...

  6. Zookeeper集群是如何升级到新版本的

    方案1:复用老数据方案 这是经过实践的升级方案,该方案是复用旧版本的数据,zk集群拓扑,配置文件都不变,只是启动的程序为最新的版本. 参考文章: Zookeeper集群是如何升级到新版本的 方案2:重 ...

  7. 如何回复在Git中误操作删除的文件?

    不小心的操作,删除了某些文件 某天很高大地用上了git来管理版本,分布式版本管理工具,好是好,但是还不是很熟悉,结果某天一不小心就从本地仓库中删除了若干个文件,该如何找回这些文件呢? 调查现场 git ...

  8. 【个人吐槽】C、Delphi、C#、java 摘抄

    作为个人的一个感受就是,在win平台上开发软件,别再他妈的用MFC了,不适合新手,上手太难.你妹,实现一个半透明的功能,一堆代码,而C#就他妈的几行话.靠. 似乎很多人都觉得Delphi已经没落了.过 ...

  9. Linux下更改oracle客户端字符集和服务端字符集

    from:http://blog.csdn.net/chid/article/details/6166506 Linux 下更改 oracle 客户端字符集和服务端字符集 1.Linux 下更改 or ...

  10. maxsigma

    10^8 768 10^7 448 10^6 240 10^5 128