元组的reference前加个星号是什么意思?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了元组的reference前加个星号是什么意思?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4147字,纯文字阅读大概需要6分钟。
内容图文
![元组的reference前加个星号是什么意思?](/upload/InfoBanner/zyjiaocheng/429/83d6565d900b4b3a9f5be3c5d4dab3ce.jpg)
rect = (0, 0, screen.width(), screen.height()) pixbuf = Gdk.pixbuf_get_from_window(rootwin, *rect)#其中*rect是什么?
回复内容:
我不会用PyGObject, 纯讨论星号参数这个语法.类似问题(也许对你有帮助):
定义函数def func(**kwargs):print kwargs调用函数的时候 一定要func(a=1,b=2,c=3)这样吗?dict_t={'a':1,'b':2,'c':3}不能直接传字典吗?例如func(dict_t)。有什么好方法吗?
Python 参数知识(变量前加星号的意义)
咱们先搞定星号参数的含义以及2个例子:
在参数名之前使用1个星号,就是让函数接受任意多的位置参数。
2个星号就是接受任意多的关键字参数。
位置参数的举例:
假设你有这么个需求:把某函数接收到的除了第一个参数之外的所有参数输出。
关键字参数的举例:
不管你传入多少个关键字参数, 我都能在kw里找到.
接着来搞定这个类似于你在问题中的补充资料中的例子:
下面这个例子接受任意多的位置参数, 只输出第一个
咱们定义一个新元组,待会扔给mean函数。
2种用法的区别:
上面这个例子等价于:
================== 2013-2-26更新 ================
s 是元组, 所以值不可修改。
我这里企图把位置参数里的第1个的值修改成5,然后输出。
使用元组看看:
我们换成列表看看:
用字符串看看:
我们这里拆了列表,元组,字符串变成位置参数再传进去。
可以看到不论如何。s 都是元组。
存储位置参数的这个 s 变量的类型并不取决于传入的参数的类型。
================= 再随便多写一些例子 =================:
普通函数:
文艺函数:
mean 遍历输出所有位置参数。s 是元组,别忘了。
咱们拆一下 列表 和 字符串。
拆元组:
拆字典:
拆字典它只会把[键]传进去,你是取不到值的。
====== 要接受拆字典的值。函数形参用2个星号就行了。=======
这里的意思是: 把所有的关键字参数都扔给s (不包括位置参数)
c前面的2个星号只是代表把 c 拆成关键字参数形式。
用的时候我们把字典拆成了关键字参数。
而函数接收的也是关键字参数。所以这个不会报错。
等价于这么用:
如果你用函数的时候只给了1个星号:
或是不给星号:
为什么??
放1个星号:
字典前面放个1个星号的确是拆开的意思。
1个星号拆字典会只是传入[键]。之前的一个例子证明过了。
问题是我们的函数mean它只接受关键字参数(回顾一下我们前面对mean的定义):
不放星号:
不放星号就代表你把那个字典直接扔进去了。
问题是函数形参**s只接受关键字参数。
s 里面还是啥也没有, 报错!
(所有的举例所使用到的 函数名 和 参数名 都是随便取的, 没有什么特殊意义.)
感觉自己举例的还不是很好,如果哪里把你弄迷糊了。
欢迎在评论区讨论. :)
扩展阅读环节:
StackOverflow 上解释星号语法的问题:
syntax - Python: Once and for all. What does the Star operator mean in Python?
引用传值的问题:
Python: How do I pass a variable by reference? 表示把这个参数展开传进去。等价于:
pixbuf = Gdk.pixbuf_get_from_window(rootwin, 0, 0, screen.width(), screen.height())
调用(caller) func(*sequence) Pass all objects in sequence as individual positional arguments
seq = [1,2,3]
func(*seq) -> func(1, 2, 3)
func(**dict) Pass all key/value pairs in dict as individual keyword arguments
dict = {'a' = 1, 'b' = 2}
func(*dict) -> func(a = 1, b = 2)
函数定义的
def func(*name) Matches and collects remaining positional arguments in a tuple
func(1, 2, 3) -> name = [1, 2, 3]
def func(**name) Matches and collects remaining keyword arguments in a dictionary
func(a = 1, b= 2) -> dict = {'a' = 1, 'b' = 2}
可参考
1. 定义函数时
一般情况下,函数的参数接受指定个数的参数,比如
def func(a, b, c):
print a, b, c
推荐一篇post:Understanding '*', '*args', '**' and '**kwargs'
>>> def test(*args, **kwargs):... print args, kwargs
>>>a={"a":1, "b":2}
>>> test(a)
({'a': 1, 'b': 2},) {}
>>> test(*a) #这里等同于test('a', 'b')
('a', 'b') {}
>>> test(**a) #这里等同于test(a=1, b=2)
() {'a': 1, 'b': 2}
一个星号就是把一个序列拆解传入,如果变量本身是字典,会退化成key的序列。
两个星号就是把key-value拆解传入。
姑且就当是语法糖吧。 搬运工:1.2 解压可迭代对象赋值给多个变量
这个解压非常dedicate,具有很多优雅的技巧。
总结如下:
(1)
完全不需要tem中间变量的交换:
a,b =b,a
(2)
有时候,你可能只想解压一部分,丢弃其他的值。对于这种情况Python并没有提供特殊的语法。 但是你可以使用任意变量名去占位,到时候丢掉这些变量就行了。
>>> data = [ 'ACME', 50, 91.1, (2012, 12, 21) ]
>>> _, shares, price, _ = data
内容总结
以上是互联网集市为您收集整理的元组的reference前加个星号是什么意思?全部内容,希望文章能够帮你解决元组的reference前加个星号是什么意思?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。