ホームページ バックエンド開発 Python チュートリアル Python におけるアスタリスク変数の特殊な使用法をいくつか紹介します。

Python におけるアスタリスク変数の特殊な使用法をいくつか紹介します。

Mar 19, 2017 pm 02:55 PM

Pythonのアスタリスクは、乗算の数値演算や累乗演算に使用されることに加えて、複数のパラメータまたは変数の入力を実現するために「変数の前に1つまたは2つのアスタリスクを追加する」という特別な使用法もあります。この記事では「アスタリスクパラメータ」の使い方を詳しく紹介します。

1. アスタリスク変数とは何ですか?

最初に、アスタリスク変数は

関数 のパラメータを渡すために使用されます。関数の *b 位置でタプルに変換します。二重アスタリスクは、この位置が任意の数のキーワード パラメーターを受け取り、**b 位置で辞書に変換することを意味します:

#!/usr/bin/env python
#coding=utf-8
#--------
def one(a,*b):
  """a是一个普通传入参数,*b是一个非关键字星号参数"""
  print(b)
one(1,2,3,4,5,6)
#--------
def two(a=1,**b):
  """a是一个普通关键字参数,**b是一个关键字双星号参数"""
  print(b)
two(a=1,b=2,c=3,d=4,e=5,f=6)
ログイン後にコピー
#プログラム出力

(2, 3, 4, 5, 6)
{'b': 2, 'c': 3, 'e': 5, 'f': 6, 'd': 4}
ログイン後にコピー
#From 出力からわかるように、最初の関数では、キーワードなしで任意の数のパラメーターを *b 位置に渡すことができます。 *b は、これらの受信パラメーターをタプルに変換します。 1, 2,3,4,5,6)

#one(a,*b) を渡すと、

one(1,(2,3,4,5,6)) と同等になります

#Second 関数では、**b の位置は任意の数のキーワード パラメーターを受け取ることができます。次の呼び出しでは

two(a=1,b=2,c=3,d=4,e=5,f=6) を実行します。 )

#one(a,*b) を渡すと、

two(a=1,{'b': 2, 'c': 3, 'e': 5, 'f': 6, ' d': 4})

一重アスタリスクと二重アスタリスクの基本的な使い方を理解した後、それらの拡張的な使い方を見てみましょう。

2. 単一のアスタリスク変数の例

単一のアスタリスク変数は、関数のパラメーター転送でのみ使用できるわけではありません。実際、通常の変数に単一のアスタリスク接頭辞を使用すると、変数を単一の要素に分割できます。 :

#!/usr/bin/env python
#coding=utf-8
#--------
def one(*x):
  """输出传入的第一个参数"""
  print(x[0])
#--------
lst=["a","b","c","d"]
stri="www.pythontab.com"
one(stri,lst)
one(*lst)
one(*stri)
ログイン後にコピー

#プログラム出力

www.pythontab.com
a
w
ログイン後にコピー
#初めてone(stri,lst)が呼び出されたとき、one(*x)を代入した後、それは

one((["a","b"," c","d"],"www.pythontab.com"))

#one(*lst) を 2 回目に呼び出し、one(*x) に置き換えます。これは

one(("a" と同等) ," b","c","d"))

#one(*stri) を 3 回目に呼び出し、one(*x) に置き換えます。これは

one(("w","w) と同等です","w ",".","q","i","n","g","s","w","o","r","d",".", "c", "o","m"))

#変数の前に単一のアスタリスクを使用すると、実際には変数の逆アセンブリ操作となり、変数内の個々の要素が逆アセンブルされてから に渡されます。 one() 関数を渡し、one() 関数を渡した後、one() 関数は単一要素として渡されたこれらをタプルに保存します。そのため、print(x[0]) は最初の要素を抽出できます。 element

For これを確認するには、one() 関数を次のように変更します。

#!/usr/bin/env python
#coding=utf-8
#--------
def one(*x):
  """一个错误的实例,尝试修改传入的第一个参数值,引发异常"""
  print(x[0])
  x[0]="pythontab"
lst=["a","b","c","d"]
one(*lst)
ログイン後にコピー
#リストは変更できることがわかっているので、リストを分割して one() 関数に渡し、関数内の最初の要素の値を指定すると、結果は「TypeError」例外をトリガーします。この結果の理由は、受信パラメータの元の型に関係なく、自分で試すことができます。 ) は、これらの入力パラメーターを *x の位置で受け取ります。パラメーターを渡した後、それらは「タプル」として保存され、タプルは変更できません

いくつかの例を見てみましょう:

#!/usr/bin/env python
#coding=utf-8
#--------
def one(*x):
  """打印出传入参数"""
  for a in x:
    print(a)
lst=["abc",123,"www.pythontab.com"]
stri="abcd"
dect={1:"one",2:"two",3:"three"}
one(*lst)
one(*stri)
one(*dect)
ログイン後にコピー
#プログラム出力

abc
123
www.pythontab.com
a
b
c
d
1
2
3
ログイン後にコピー
#最初の 2 つの呼び出しは理解しやすいですが、最後に辞書要素が渡され、辞書要素のキーのみが出力され、実際には単一のアスタリスクは含まれないことがわかります。辞書内の値を読み取ると、常に辞書内のキーのみが読み取られます。 辞書内の値を読み取りたい場合は、二重アスタリスクを使用する必要があります

3.セクション 2 の終わりでは、単一のアスタリスクを使用して辞書を分割し、関数に渡しますが、取得できるのは辞書キーのみです。以下は、二重アスタリスクを使用して辞書の値を取得する方法を示しています:

#!/usr/bin/env python
#coding=utf-8
#--------
def one(**x):
  """将传入的关键字参数的值保存成元组输出"""
  print(x)
  b=()
  for a in x.keys():
    b+=(x[a],)
  print(b)
dect={"one":1,"two":2,"three":3}
one(**dect)
ログイン後にコピー
#プログラムの出力

{'three': 3, 'one': 1, 'two': 2}
(3, 1, 2)
ログイン後にコピー

#辞書に二重アスタリスク接頭辞を使用することは、それをキーワードパラメータに分割することと同等です、**dect は同等です Yu は辞書を次のように分割します

one=1、two=2、three=3

#将上面这些关键字参数传入one(**x),就等价与(还记得前面说的,双星号将接收到的所有关键字参数都保存成一个字典吧)

one({"one":1,"two":2,"three":3})

#既然是字典,那么字典中的所有方法都能使用,使用for循环遍历这个字典的键,然后使用一个元组来添加这些键对应的值,最后打印出这个元组

Ps:注意,使用这种方法将字典传入函数的时候,字典的键的命名要符合python变量的命名规则,通过上面的分析也不难看出,双星号会将字典首先转换成关键字参数的形式,就相当于使用字典中的键作为变量名,如果键不符合变量命名规则,则会抛出一个"TypeError"异常,大家可以尝试着颠倒一下上面字典中的键和值,使用数字作为键,看看会出现什么问题。

在一个函数的接收参数中,同时出现"非关键字参数(位置参数)"和"关键字参数"时,可以使用一个单星号来分隔这两种参数,例如:

#!/usr/bin/env python
#coding=utf-8
#--------
def mix(a,b,*,x,y):
  """位置参数与关键字参数混合"""
  return a,b,x,y
#星号前面的a和b是位置参数,星号后面的x和y是关键字参数,调用mix()函数并传入参数时,关键字参数一定要使用"变量名=值"的形式传入数据,如果同位置参数一样传入数据,就会引发一个TypeError异常
print(mix(1,2,x=3,y=4))
ログイン後にコピー

#程序输出

(1, 2, 3, 4)
ログイン後にコピー

#在上面的mix函数中,如果位置参数与关键字参数之间已经存在了一个单星号位置参数,那么,这个参数后面的就都是关键字参数,也不需要再使用星号来分隔他们了,例如

#!/usr/bin/env python
#coding=utf-8
#--------
def mix(a,b,*c,x,y):
  """位置参数与关键字参数混合"""
  return a,b,c,x,y
#在*c的位置可以输入任意多个位置参数值
print(mix(1,2,3,4,5,x=6,y=7))
ログイン後にコピー

#程序输出

(1, 2, (3, 4, 5), 6, 7)
ログイン後にコピー

如果我们要在一个函数中包含多种参数的组合,必须遵守这样的顺序:位置参数(必选参数),默认参数,单星号参数或星号分隔符,关键字参数,双星号参数;

请看下面的实例:

#!/usr/bin/env python
#coding=utf-8
#--------
def mix(a,b=0,*c,x,**y):
  """位置参数与关键字参数混合"""
  return a,b,c,x,y
print(mix(1,2,3,4,5,x=6,y=7,z=8))
ログイン後にコピー

#程序输出

(1, 2, (3, 4, 5), 6, {'y': 7, 'z': 8})
ログイン後にコピー

以上がPython におけるアスタリスク変数の特殊な使用法をいくつか紹介します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? Apr 01, 2025 pm 05:09 PM

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? Apr 01, 2025 pm 11:15 PM

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? 中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? Apr 02, 2025 am 07:15 AM

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? Apr 01, 2025 pm 10:51 PM

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

人気のあるPythonライブラリとその用途は何ですか? 人気のあるPythonライブラリとその用途は何ですか? Mar 21, 2025 pm 06:46 PM

この記事では、numpy、pandas、matplotlib、scikit-learn、tensorflow、django、flask、and requestsなどの人気のあるPythonライブラリについて説明し、科学的コンピューティング、データ分析、視覚化、機械学習、Web開発、Hの使用について説明します。

文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? 文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? Apr 01, 2025 pm 11:18 PM

Pythonでは、文字列を介してオブジェクトを動的に作成し、そのメソッドを呼び出す方法は?これは一般的なプログラミング要件です。特に構成または実行する必要がある場合は...

See all articles