目錄
回复内容:
首頁 後端開發 Python教學 元组的reference前加个星号是什么意思?

元组的reference前加个星号是什么意思?

Jun 06, 2016 pm 04:24 PM
height screen

<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个星号就是接受任意多的关键字参数。


位置参数的举例:
假设你有这么个需求:把某函数接收到的除了第一个参数之外的所有参数输出。
元组的reference前加个星号是什么意思?


关键字参数的举例:
不管你传入多少个关键字参数, 我都能在kw里找到. 元组的reference前加个星号是什么意思?




接着来搞定这个类似于你在问题中的补充资料中的例子:


下面这个例子接受任意多的位置参数, 只输出第一个
元组的reference前加个星号是什么意思?(这里的 s 的类型是元组)


咱们定义一个新元组,待会扔给mean函数。
元组的reference前加个星号是什么意思?

2种用法的区别: 元组的reference前加个星号是什么意思?

元组的reference前加个星号是什么意思?可以看出,用了星号之后,就把元组 a 给解包(unpack)了。拆成一个个参数扔进去了。
上面这个例子等价于: 元组的reference前加个星号是什么意思?




================== 2013-2-26更新 ================

元组的reference前加个星号是什么意思?
s 是元组, 所以值不可修改。
我这里企图把位置参数里的第1个的值修改成5,然后输出。


使用元组看看:
元组的reference前加个星号是什么意思? 元组的reference前加个星号是什么意思?
我们换成列表看看: 元组的reference前加个星号是什么意思?
用字符串看看:
元组的reference前加个星号是什么意思?
我们这里拆了列表,元组,字符串变成位置参数再传进去。
可以看到不论如何。s 都是元组。
存储位置参数的这个 s 变量的类型并不取决于传入的参数的类型。




================= 再随便多写一些例子 =================:
普通函数:
元组的reference前加个星号是什么意思?
文艺函数: 元组的reference前加个星号是什么意思?





mean 遍历输出所有位置参数。s 是元组,别忘了。
咱们拆一下 列表 和 字符串。 元组的reference前加个星号是什么意思?
拆元组: 元组的reference前加个星号是什么意思?


拆字典: 元组的reference前加个星号是什么意思? 元组的reference前加个星号是什么意思?


拆字典它只会把[键]传进去,你是取不到值的。 元组的reference前加个星号是什么意思?



====== 要接受拆字典的值。函数形参用2个星号就行了。=======

这里的意思是: 把所有的关键字参数都扔给s (不包括位置参数)
元组的reference前加个星号是什么意思? 元组的reference前加个星号是什么意思?用函数时,
c前面的2个星号只是代表把 c 拆成关键字参数形式。

用的时候我们把字典拆成了关键字参数。
而函数接收的也是关键字参数。所以这个不会报错。


等价于这么用: 元组的reference前加个星号是什么意思?(没报错吧哈哈。)



如果你用函数的时候只给了1个星号:
元组的reference前加个星号是什么意思?
或是不给星号:
元组的reference前加个星号是什么意思?都是会报错的。


为什么??

放1个星号:
字典前面放个1个星号的确是拆开的意思。
1个星号拆字典会只是传入[键]。之前的一个例子证明过了。

问题是我们的函数mean它只接受关键字参数(回顾一下我们前面对mean的定义): 元组的reference前加个星号是什么意思?s 里面啥也没有啊。 输出啥? 报错!


不放星号:
不放星号就代表你把那个字典直接扔进去了。
问题是函数形参**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}

可参考 Chapter 18. Arguments python里星号有两种意思
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>
登入後複製
推荐一篇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
登入後複製
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

由於洩漏的自拍顯示器增加了以前價格實惠的相機系列的複雜性,富士 X-M5 的價格預期上升 由於洩漏的自拍顯示器增加了以前價格實惠的相機系列的複雜性,富士 X-M5 的價格預期上升 Sep 07, 2024 am 09:34 AM

富士膠片粉絲最近對 X-T50 的前景感到非常興奮,因為它重新推出了預算導向的富士膠片 X-T30 II,該膠片在 1,000 美元以下的 APS-C 類別中非常受歡迎。不幸的是,隨著 Fujifilm X-T50 的推出

Dasung Paperlike Color 12:帶有彩色電子墨水觸控螢幕的顯示器結構緊湊,現已在全球上市 Dasung Paperlike Color 12:帶有彩色電子墨水觸控螢幕的顯示器結構緊湊,現已在全球上市 Jul 31, 2024 pm 08:35 PM

螢幕對角線為12吋的Dasung Paperlike Color現已上市。該型號於幾個月前發布,提供 2,560 x 1,600 的高分辨率,因此具有高清晰度,特別是考慮到其相關性。

Linux screen指令如何使用 Linux screen指令如何使用 May 23, 2023 pm 06:17 PM

一、screen指令簡介Screen是一個全螢幕視窗管理器,它在多個進程(通常是互動式shell)之間多路傳輸實體終端。每個虛擬終端提供DECVT100終端的功能,以及ANSIX3的幾個控制功能。 64(ISO6429)和ISO2022標準(例如,插入/刪除行和支援多個字元集)。每個虛擬終端都有一個回滾歷史緩衝區和一個複製貼上機制,允許使用者在視窗之間移動文字區域。當呼叫screen時,它會建立一個包含shell(或指定命令)的窗口,然後避開您的方式,以便您可以正常使用程式。然後,您可以隨時建立包含

Google Pixel 8 顯示問題:修復計畫可提供 3 年免費服務 Google Pixel 8 顯示問題:修復計畫可提供 3 年免費服務 Jun 15, 2024 pm 06:50 PM

自從 Google Pixel 8(亞馬遜售價約 513 歐元,限時優惠)推出以來,用戶抱怨顯示器上有垂直線的報告數量不斷增加。

CSS 維度屬性詳解:height 與 width CSS 維度屬性詳解:height 與 width Oct 21, 2023 pm 12:42 PM

CSS維度屬性詳解:height和width在前端開發中,CSS是一種強大的樣式定義語言。其中,height和width是兩個最基本的維度屬性,用來定義元素的高度和寬度。本文將對這兩個屬性進行詳細解析,並提供具體的程式碼範例。一、height屬性height屬性用來定義元素的高度。可以使用像素(pixel)、百分比(percentage)或

新品4K投影機堅果N1S Pro低價上市,智慧功能護眼 新品4K投影機堅果N1S Pro低價上市,智慧功能護眼 Sep 10, 2024 am 09:30 AM

N1S Pro是堅果的另一款投影儀,現已上市。具體來說,它在亞馬遜上的售價為 1999 美元。 4K 投影機由堅果直接銷售,亞馬遜自行負責運輸。該型號目前有貨

CentOS 6.5安裝Screen的步驟 CentOS 6.5安裝Screen的步驟 Jan 01, 2024 am 11:17 AM

我們常常會碰到這樣的問題,用ssh登入了遠端的Linux伺服器,運行了一些耗時較長的任務,結果卻因為網路的不穩定導致任務中途失敗。如何讓指令提交後不受本地關閉終端機視窗/網路斷開連線的干擾呢? Screen是一款由GNU計畫開發的用於命令列終端切換的自由軟體。使用者可以透過該軟體同時連接多個本地或遠端的命令列會話,並在其間自由切換。 Screen可以看作是視窗管理器的命令列介面版本。它提供了統一的管理多個會話的介面和相應的功能。方法:1.查看YUM來源上是否有screen安裝套件#yumlistscreen

jQuery快速去除元素的height屬性方法 jQuery快速去除元素的height屬性方法 Feb 27, 2024 pm 02:09 PM

jQuery是一種廣泛應用於網頁開發的JavaScript庫,它為開發人員提供了許多便利的方法來操作和處理網頁元素。在實際開發中,我們經常需要對網頁元素的屬性進行操作,其中一個常見的需求就是去除元素的height屬性。在本文中,我們將介紹如何使用jQuery快速移除元素的height屬性,並提供具體的程式碼範例。要移除一個元素的height屬性,可以使用jQu

See all articles