python中,* 号除了用来做数量乘法,还有其他的用处。

结论

  • 概括的来说,就是对修饰的变量进行拆分, 对修饰的形式参数进行参数聚集。
  • 单*号,将被修饰的变量按元素方式拆分, 对修饰的形式参数进行参数聚集。
  • 双**号,将被修饰的变量按键值对进行拆分, 对修饰的形式参数进行参数聚集。

修饰实例变量时

  • 作用: 讲被修饰的实例变量或者可迭代对象进行拆分

def func3(a, b, c):
print("param a is {}, param b is {}, param c is {}".format(a, b, c)) if __name__ == '__main__':
arr1 = [1, 2, 3]
print(arr1, sep='\t') # [1, 2, 3]\t 正常输出
print(*arr1, sep='\t') # 1\t2\t3 每个数字中间以\t分割 arr2 = [[1, 2, 3], [3, 4, 5], [5, 6, 7]]
print(list(zip(*arr2))) # [(1, 3, 5), (2, 4, 6), (3, 5, 7)] 二维数组的行转列 dictionary = {'a': 1, 'b': 2, 'c': 3}
print(dictionary, sep='\t') # {'a': 1, 'b': 2, 'c': 3}\t 正常输出
print(*dictionary, sep='\t') # a\tb\tc\t 每个字母中间以\t分割 print(func3(**dictionary)) # param a is 1, param b is 2, param c is 3

比较使用和不使用*号后产生的结果就可以发现,单*号将可迭代对象进行了拆分,按单个元素方式依次将数据传进方法。

配合其他方法使用可以优雅的完成矩阵的行转列操作。

双**号的使用,是将变量对象拆分成键值对的形式,所以只有dict类型可以使用。

注意上面的func3,他需要三个形参,但是我们只传入**dict_obj, 就完成了功能。

可迭代对象有:list, dict, tuple, generator, iterator

出现在方法的形式参数位置

  • 作用: 放在参数列表的末尾, 作为不定长的参数列表的形参接受对象。 (可以类比Java的可变参数列表)

def func1(*args):
print("type", type(args)) # type <class 'tuple'>
print("all arguments: ", args) # all arguments: (1, 2, 3)
print("second argument: ", args[1]) # second argument: 2 def func2(**kw):
print("type", type(kw)) # type <class 'dict'>
print("all arguments: ", kw) # all arguments: {'a': 1, 'b': 2, 'c': 3}
print("second argument: ", kw['a']) # second argument: 1 if __name__ == '__main__':
a, b, c = 1, 2, 3 func1(a, b, c)
func2(a=a, b=b, c=c)

尽管函数func1的形参只有一个,但被传递三个参数,程序还是可以正常运行。

因为*args将三个参数以tuple形式存储,作为一个整体传递给方法func1。

同理,func2的**kw形参将传入的三个参数压成一个dict进行使用。

具体实验代码可以通过Github获得。

最新文章

  1. word中表格加粗某一行
  2. SQLServer获取临时表所有列名或是否存在指定列名的方法
  3. Jenkins 构建JavaHelloWorld
  4. Mongo数据模型
  5. 修改jquery的remote让前段显示服务器错误信息
  6. rhApp遇到的项目问题
  7. Codeforces Round #272 (Div. 2)AK报告
  8. vivado hls(1)
  9. SVN同步出现问题
  10. .NET Framework 4.0/4.5离线版下载
  11. 关于微软小娜Cortana(安卓版)
  12. bzoj3782上学路线(Lucas+CRT+容斥DP+组合计数)
  13. Vue &amp; webpack
  14. 2.6 利用FTP上传所有文件
  15. MFC入门(一)-- 第一个简单的windows图形化界面小程序(打开计算器,记事本,查IP)
  16. windows server 2012 浏览器IE10无法下载。
  17. 共用体union
  18. 笔记关闭fn功能
  19. 基于OpenCV的微信跳一跳外挂
  20. mac如何运行vue项目

热门文章

  1. 【认证与授权】Spring Security自定义页面
  2. ASP.NET Core Blazor 初探之 Blazor WebAssembly
  3. 05_CSS入门和高级技巧(3)
  4. repo使用总结—从入门到入门
  5. Web_php_include
  6. 黑马程序员_毕向东_Java基础视频教程——三元运算符(随笔)
  7. 黑马程序员_毕向东_Java基础视频教程——算术运算符小点(随笔)
  8. C# Sign In With Apple苹果登陆后端验证
  9. [tgpl]go匿名函数
  10. 关于react的一些总结