python的动态参数

动态参数是样很神奇的东西。我写了下面一段代码:
python 代码
 
  1. class Person:  
  2.  def __init__(self,*pros,**attrs):  
  3.    self.name = "jeff"  
  4.   self.pros = pros  
  5.  for (key,value) in attrs.items():  
  6.   stm = "self.%s = \"%s\""% (key,value)  
  7.   exec(stm)  
  8.   
  9. if __name__ == "__main__":  
  10.  jeff = Person(1,2,3,sex="boy")  
  11.   print jeff.pros  
  12.  print jeff.sex  
  13.  print dir(jeff)  

打印出来的内容是
(1, 2, 3)
boy
['__doc__', '__init__', '__module__', 'name', 'pros', 'sex']

简单解释一下:
参数以一个*号开头的代表着一个任意长度的数组,可以接收连续一串参数,如上面代码里传的是1,2,3,你可以更多。
参数以两个*号开头的代表着一个字典,参数的形式是“key=value”,接受连续任意多个参数。
在函数内,我们就可以把前者当作一个元组来处理,打印结果看得出来是一个元组。注意,调用方法是参数不定长,而在方法执行的时候,长度已定了,所以是元组。同时,我们可以把后者当作一个字典来处理。

示 例代码里使用可变长参数实现了一个类属性的个性化定制,对于一个Person类,你可以通过传入字典类型的参数使这个类有更多原来不存在的属性,实现方法 是用了exec方法,目前只能通过字符串的参数。这里只是展示了可变参数的使用及exec的神奇力量。真正的函数不应该允许任意用户自定义属性的,可变参 数的目的是为定义函数方便及调用函数时,参数传入形式更自由而已。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值