Buka paket dengan Python?

222

Saya pikir 'membongkar' mungkin kosa kata yang salah di sini - permintaan maaf karena saya yakin ini adalah pertanyaan rangkap.

Pertanyaan saya cukup sederhana: dalam fungsi yang mengharapkan daftar item, bagaimana saya bisa meneruskan item daftar Python tanpa mendapatkan kesalahan?

my_list = ['red', 'blue', 'orange']
function_that_needs_strings('red', 'blue', 'orange') # works!
function_that_needs_strings(my_list) # breaks!

Tentunya harus ada cara untuk memperluas daftar, dan meneruskan fungsi 'red','blue','orange'di kuku?

AP257
sumber

Jawaban:

32

Ya, Anda dapat menggunakan *argssintaks (percikan):

function_that_needs_strings(*my_list)

di mana my_listbisa iterable; Python akan mengulangi objek yang diberikan dan menggunakan setiap elemen sebagai argumen terpisah untuk fungsi.

Lihat dokumentasi ekspresi panggilan .

Ada persamaan kata kunci-parameter juga, menggunakan dua bintang:

kwargs = {'foo': 'bar', 'spam': 'ham'}
f(**kwargs)

dan ada sintaks yang setara untuk menentukan argumen catch-all dalam tanda tangan fungsi:

def func(*args, **kw):
    # args now holds positional arguments, kw keyword arguments
Martijn Pieters
sumber
14

Karena Python 3.5 Anda dapat membongkar jumlah lists yang tidak terbatas .

PEP 448 - Generalisasi Pembongkaran Tambahan

Jadi ini akan berhasil:

a = ['1', '2', '3', '4']
b = ['5', '6']
function_that_needs_strings(*a, *b)
vishes_shell
sumber
1
bagaimana saya bisa melakukan hal yang sama dengan python 2.7 atau 3.4?
answerSeeker
1
@answerSeeker tidak efisien, tetapifunction_that_needs_strings(*(a+b))
azalea