目次
回复内容:
ホームページ バックエンド開発 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 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

富士フイルム X-M5 の価格予想が上昇、自撮りディスプレイの流出で以前は手頃な価格だったカメララインが複雑化 富士フイルム X-M5 の価格予想が上昇、自撮りディスプレイの流出で以前は手頃な価格だったカメララインが複雑化 Sep 07, 2024 am 09:34 AM

富士フイルムのファンは最近、X-T50 の登場に非常に興奮していました。X-T50 は、1,000 ドル以下の APS-C カテゴリーで非常に人気となっていた低価格志向の富士フイルム X-T30 II の再発売を提示したからです。残念ながら、富士フイルム X-T50 の発売に伴い

Dasung Paperlike Color 12: カラー E Ink タッチスクリーンを備えたモニターはコンパクトで、世界中で入手可能です Dasung Paperlike Color 12: カラー E Ink タッチスクリーンを備えたモニターはコンパクトで、世界中で入手可能です Jul 31, 2024 pm 08:35 PM

画面対角12インチのDasung Paperlike Colorが登場しました。数か月前に発表されたこのモデルは、2,560 x 1,600 という非常に高い解像度を備えているため、特に関連性を考慮すると高レベルの鮮明度を備えています。

Google Pixel 8 のディスプレイの問題: 修理プログラムにより 3 年間の無料サービスが可能 Google Pixel 8 のディスプレイの問題: 修理プログラムにより 3 年間の無料サービスが可能 Jun 15, 2024 pm 06:50 PM

GooglePixel 8 (Amazon で約 513 ユーロ、期間限定セール) の発売以来、ディスプレイの縦線に関する苦情のユーザーからの報告が増加しています。これは色や色など、さまざまな形で現れる可能性があります。

Linuxの画面コマンドの使い方 Linuxの画面コマンドの使い方 May 23, 2023 pm 06:17 PM

1. screen コマンドの概要 Screen は、複数のプロセス (通常は対話型シェル) 間で物理端末を多重化する全画面ウィンドウ マネージャーです。各仮想端末は、DECVT100 端末の機能に加えて、ANSIX3 のいくつかの制御機能を提供します。 64 (ISO6429) および ISO2022 標準 (行の挿入/削除、複数の文字セットのサポートなど)。各仮想ターミナルには、スクロールバック履歴バッファーと、ユーザーがウィンドウ間でテキスト領域を移動できるようにするコピー/貼り付けメカニズムがあります。 screen が呼び出されると、シェル (または指定されたコマンド) を含むウィンドウが作成され、プログラムを通常どおり使用できるように邪魔をしなくなります。その後、いつでも

CSS の寸法プロパティの詳細な説明: 高さと幅 CSS の寸法プロパティの詳細な説明: 高さと幅 Oct 21, 2023 pm 12:42 PM

CSS 寸法プロパティの詳細な説明: 高さと幅 フロントエンド開発において、CSS は強力なスタイル定義言語です。その中で、高さと幅は 2 つの最も基本的な寸法属性であり、要素の高さと幅を定義するために使用されます。この記事では、これら 2 つのプロパティを詳細に分析し、具体的なコード例を示します。 1. height 属性 height 属性は、要素の高さを定義するために使用されます。ピクセル、パーセンテージ、または

スマートな機能と目の保護を備えた新しい 4K プロジェクター JMGO N1S Pro を低価格で発売 スマートな機能と目の保護を備えた新しい 4K プロジェクター JMGO N1S Pro を低価格で発売 Sep 10, 2024 am 09:30 AM

N1S Pro も JMGO のプロジェクターで、現在入手可能です。具体的には、Amazon では 1999 米ドルで販売されています。 4K プロジェクターは JMGO によって直接販売され、配送自体は Amazon が行います。このモデルは現在在庫があります

jQuery は要素の高さ属性を迅速に削除します jQuery は要素の高さ属性を迅速に削除します Feb 27, 2024 pm 02:09 PM

jQuery は Web 開発で広く使用されている JavaScript ライブラリであり、開発者に Web ページ要素を操作および処理するための便利なメソッドを多数提供します。実際の開発では、Web ページ要素の属性を操作する必要があることがよくありますが、一般的な要件の 1 つは、要素の height 属性を削除することです。この記事では、jQueryを使って要素の高さ属性を素早く削除する方法と具体的なコード例を紹介します。要素の高さ属性を削除するには、jQu を使用できます。

CentOS 6.5 に Screen をインストールする手順 CentOS 6.5 に Screen をインストールする手順 Jan 01, 2024 am 11:17 AM

この問題はよく発生します。SSH を使用してリモート Linux サーバーにログインし、長期タスクを実行しますが、ネットワークが不安定なため、タスクが途中で失敗します。コマンドの送信後にターミナル ウィンドウをローカルで閉じるかネットワークを切断することによって、コマンドが干渉されるのを防ぐにはどうすればよいですか? Screen は、GNU プロジェクトによって開発されたコマンド ライン ターミナル切り替え用のフリー ソフトウェアです。ユーザーはこのソフトウェアを使用して、複数のローカルまたはリモートのコマンド ライン セッションに同時に接続し、自由に切り替えることができます。 Screen は、ウィンドウ マネージャーのコマンド ライン インターフェイス バージョンと考えることができます。複数のセッションを管理するための統合インターフェイスと対応する機能を提供します。方法: 1. YUM ソース #yumlistscreen にスクリーン インストール パッケージがあるかどうかを確認します。

See all articles