元组的reference前加个星号是什么意思?
<span class="n">rect</span> <span class="o">=</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">screen</span><span class="o">.</span><span class="n">width</span><span class="p">(),</span> <span class="n">screen</span><span class="o">.</span><span class="n">height</span><span class="p">())</span> <span class="n">pixbuf</span> <span class="o">=</span> <span class="n">Gdk</span><span class="o">.</span><span class="n">pixbuf_get_from_window</span><span class="p">(</span><span class="n">rootwin</span><span class="p">,</span> <span class="o">*</span><span class="n">rect</span><span class="p">)</span><span class="c">#其中*rect是什么?</span>
回复内容:
我不会用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())
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. 定义函数时
一般情况下,函数的参数接受指定个数的参数,比如
<span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">):</span> <span class="k">print</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span>
... 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

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제









Fujifilm 팬들은 최근 X-T50의 전망에 매우 흥분했습니다. X-T50은 1,000달러 미만 APS-C 카테고리에서 꽤 인기를 끌었던 예산 중심의 Fujifilm X-T30 II의 재출시를 선보였기 때문입니다. 안타깝게도 후지필름 X-T50이 출시되면서

화면 대각선 12인치의 Dasung Paperlike Color가 출시되었습니다. 몇 달 전에 발표된 이 모델은 2,560 x 1,600의 매우 높은 해상도를 제공하므로 특히 상대적인 측면에서 높은 수준의 선명도를 제공합니다.

1. screen 명령 소개 Screen은 여러 프로세스(보통 대화형 셸) 간에 물리적 터미널을 다중화하는 전체 화면 창 관리자입니다. 각 가상 터미널은 DECVT100 터미널의 기능과 ANSIX3의 여러 제어 기능을 제공합니다. 64(ISO6429) 및 ISO2022 표준(예: 줄 삽입/삭제 및 여러 문자 집합 지원) 각 가상 터미널에는 스크롤백 기록 버퍼와 사용자가 창 간에 텍스트 영역을 이동할 수 있는 복사-붙여넣기 메커니즘이 있습니다. screen이 호출되면 셸(또는 지정된 명령)이 포함된 창을 만든 다음 프로그램을 정상적으로 사용할 수 있도록 방해가 되지 않습니다. 그런 다음 언제든지

Google Pixel 8(Amazon에서 약 513유로, 기간 한정 거래)이 출시된 이후 디스플레이의 수직선에 대해 불평하는 사용자의 신고 수가 증가했습니다. 이는 색상과 색상이 다른 방식으로 나타날 수 있습니다.

CSS 차원 속성에 대한 자세한 설명: 높이 및 너비 프런트 엔드 개발에서 CSS는 강력한 스타일 정의 언어입니다. 그 중 높이와 너비는 요소의 높이와 너비를 정의하는 데 사용되는 가장 기본적인 두 가지 치수 속성입니다. 이 기사에서는 이 두 가지 속성을 자세히 분석하고 구체적인 코드 예제를 제공합니다. 1. 높이 속성 높이 속성은 요소의 높이를 정의하는 데 사용됩니다. 픽셀, 백분율 또는

N1S Pro는 JMGO의 또 다른 프로젝터로 현재도 사용 가능합니다. 구체적으로는 Amazon에서 US$1999의 가격으로 제공됩니다. 4K 프로젝터는 JMGO에서 직접 판매되며 Amazon에서 배송을 직접 처리합니다. 해당 모델은 현재 재고가 있습니다

우리는 종종 이 문제에 직면합니다. SSH를 사용하여 원격 Linux 서버에 로그인하고 일부 장기 작업을 실행하지만 네트워크 불안정으로 인해 작업이 중간에 실패합니다. 명령이 제출된 후 로컬에서 터미널 창을 닫거나 네트워크 연결을 끊음으로써 명령이 방해받는 것을 방지하는 방법은 무엇입니까? Screen은 명령줄 터미널 전환을 위해 GNU 프로젝트에서 개발한 무료 소프트웨어입니다. 사용자는 이 소프트웨어를 사용하여 여러 로컬 또는 원격 명령줄 세션에 동시에 연결하고 자유롭게 전환할 수 있습니다. Screen은 창 관리자의 명령줄 인터페이스 버전으로 생각할 수 있습니다. 여러 세션을 관리하기 위한 통합 인터페이스와 해당 기능을 제공합니다. 방법: 1. YUM 소스 #yumlistscreen에 화면 설치 패키지가 있는지 확인하세요.

jQuery는 웹 개발에 널리 사용되는 JavaScript 라이브러리로 개발자에게 웹 페이지 요소를 조작하고 처리할 수 있는 다양한 편리한 방법을 제공합니다. 실제 개발에서는 웹페이지 요소의 속성을 조작해야 하는 경우가 많습니다. 일반적인 요구사항 중 하나는 요소의 높이 속성을 제거하는 것입니다. 이 기사에서는 jQuery를 사용하여 요소의 높이 속성을 빠르게 제거하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 요소의 높이 속성을 제거하려면 jQu를 사용할 수 있습니다.
