5. python * ** globals()

摘要

这几个知识点很有意思的,正好闲下来没事,说两句.

什么是作用域

用通俗的话来说作用域就是一个范围,对编程语言来说,就是当前指令的执行环境. 有点宽泛啊,不过有点基础的都能理解这句话的含义,比如类有类作用域, 类的实例有实例的作用域, 实例的方法又有方法的作用域.

一.python方法的参数(位置参数/关键字参数)

def test(name,age):
	print(name,age)
这是最常见的方法参数形式,在调用的时候
test("zhangsan",20)
test(age=20,name="zhangsan")
test(name="zhangsan",age=20)
test("zhangsan",age=20)
test(name="zhangsan",20) # 这样会报错

上面参数的传值涉及到两个概念:
   i:位置参数,传入的值按照顺序赋予参数中的便令
   ii:关键字参数,按照指定的名称传入,可以乱序传入
  如果位置参数和关键字参数混用的话,位置参数在任何时候都不能出现在关键字参数后面,否则无法识别.

二.python 收集参数* 和 **

def test2(*params):
	print params

test2(1,2,3,4,5,6)//输出:(3, 4, 5, 6)
由此可见,* 关键字可以将传入方法的参数收集到元组中,然后将该元组赋予params. 这就是参数收集. 再看下面的例子
def test2(a,b,*params):
    print params
test2(1,2,3,4,5,6)//输出:(3,4,5,6)

def test2(a,b,c=88,*params):
    print params
test2(1,2,3,4,5,6)//输出:(4,5,6)
小朋友你是否有很多问号? 为什么?
原因就在于1,2 被位置参数a,b接收了,3被c接收了,而剩下的3,4,5,6被赋予元组变量params,所以很明显啦,python参数的解析是有优先级的,综合上面例子,可以看到,先解析位置参数,然后解析关键字参数,再然后就是*params 参数了.	

说完了* 再来说**

  • 接收游离参数到元组中,** 则接收k=v 参数到字典中.
def test2(a,b,c=99,*params,**keys):
    """

    :type c: object
    """
    print "a: %s" % a
    print "b: %s" % b
    print "c: %s" % c
    print params
    print "keys: %s" % keys
感兴趣的可以自己去测试一下.

三.python 参数反转过程又称为逆收集

也就是拆解传入的元组/字典

def test2(a,b,c=99,*params,**keys):
    """

    :type c: object
    """
    print "a: %s" % a
    print "b: %s" % b
    print "c: %s" % c
    print params
    print "keys: %s" % keys


test2(*(1,2,3,4,5),**{"name":"zhangsan","age":"100"})
结果如下:
a: 1
b: 2
c: 3
(4, 5)
keys: {'age': '100', 'name': 'zhangsan'}

四.python globals()

name="pg"
age="20"
li=[1,2,3,4,5]
dic={"name":"pg","age":88}

def test(name="abc",age=0,li=[],dic={}):
    gl = globals()
    gl["name"] = "pppg"
test()
print name //结果为:pppg
可以看到,globals()其实将全局变量收集成为一个字典,在这个字典中的变量都是全局变量,而在方法的作用域内我们可以这样去修改全局变量的值.
上面这种写法和:
def test():
	globals x
	x="88"
起到的效果一致.

关键在于理解globals()函数的返回值是一个字典哦.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我先森

鼓励一个吧,哈哈

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值