ਪਾਈਥਨ ਵਿੱਚ, ਇੱਕ ਟੂਪਲ ਜਾਂ ਸੂਚੀ ਦੇ ਤੱਤਾਂ ਦਾ ਵਿਸਤਾਰ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ ਅਤੇ ਮਲਟੀਪਲ ਵੇਰੀਏਬਲਾਂ ਨੂੰ ਨਿਰਧਾਰਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ। ਇਸ ਨੂੰ ਕ੍ਰਮ ਅਨਪੈਕਿੰਗ ਜਾਂ ਅਨਪੈਕਡ ਅਸਾਈਨਮੈਂਟ ਕਿਹਾ ਜਾਂਦਾ ਹੈ।
ਹੇਠਾਂ ਦਿੱਤੇ ਵੇਰਵਿਆਂ ਦਾ ਇੱਥੇ ਵਰਣਨ ਕੀਤਾ ਗਿਆ ਹੈ।
- ਟੂਪਲਾਂ ਅਤੇ ਸੂਚੀਆਂ ਦੀਆਂ ਮੂਲ ਗੱਲਾਂ ਨੂੰ ਅਨਪੈਕ ਕਰਨਾ
- ਨੇਸਟਡ ਟੂਪਲਸ, ਅਨਪੈਕ ਕੀਤੀਆਂ ਸੂਚੀਆਂ
- ਅੰਡਰਸਕੋਰ ਨਾਲ ਅਨਪੈਕ ਕਰਨਾ:
_
- ਤਾਰਿਆਂ ਨਾਲ ਅਨਪੈਕ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ:
*
ਫੰਕਸ਼ਨ ਆਰਗੂਮੈਂਟਾਂ ਦੇ ਤੌਰ ‘ਤੇ ਟੂਪਲਾਂ, ਸੂਚੀਆਂ ਅਤੇ ਸ਼ਬਦਕੋਸ਼ਾਂ ਨੂੰ ਫੈਲਾਉਣ ਅਤੇ ਪਾਸ ਕਰਨ ਲਈ ਤਾਰੇ ਦੀ ਵਰਤੋਂ ਕਰਨ ਬਾਰੇ ਜਾਣਕਾਰੀ ਲਈ ਹੇਠਾਂ ਦਿੱਤਾ ਲੇਖ ਦੇਖੋ।
- ਸੰਬੰਧਿਤ:ਪਾਈਥਨ ਵਿੱਚ ਫੰਕਸ਼ਨ ਆਰਗੂਮੈਂਟਾਂ ਵਜੋਂ ਸੂਚੀਆਂ, ਟੂਪਲਾਂ, ਅਤੇ ਸ਼ਬਦਕੋਸ਼ਾਂ ਦਾ ਵਿਸਤਾਰ ਕਰਨਾ ਅਤੇ ਪਾਸ ਕਰਨਾ
ਟੂਪਲਾਂ ਅਤੇ ਸੂਚੀਆਂ ਦੀਆਂ ਮੂਲ ਗੱਲਾਂ ਨੂੰ ਅਨਪੈਕ ਕਰਨਾ
ਜਦੋਂ ਵੇਰੀਏਬਲਾਂ ਨੂੰ ਖੱਬੇ-ਹੱਥ ਵਾਲੇ ਪਾਸੇ ਲਿਖਿਆ ਜਾਂਦਾ ਹੈ, ਕਾਮਿਆਂ ਨਾਲ ਵੱਖ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਹਰੇਕ ਵੇਰੀਏਬਲ ਨੂੰ ਸੱਜੇ-ਹੱਥ ਵਾਲੇ ਪਾਸੇ ਟੂਪਲ ਜਾਂ ਸੂਚੀ ਦਾ ਇੱਕ ਤੱਤ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ। ਇਹ ਟੂਪਲਾਂ ਅਤੇ ਸੂਚੀਆਂ ਦੋਵਾਂ ਲਈ ਸਮਾਨ ਹੈ (ਹੇਠਲੀਆਂ ਉਦਾਹਰਣਾਂ ਟੂਪਲ ਰੂਪ ਵਿੱਚ ਲਿਖੀਆਂ ਗਈਆਂ ਹਨ)।
t = (0, 1, 2)
a, b, c = t
print(a)
print(b)
print(c)
# 0
# 1
# 2
l = [0, 1, 2]
a, b, c = l
print(a)
print(b)
print(c)
# 0
# 1
# 2
ਨੋਟ ਕਰੋ ਕਿ ਕਿਉਂਕਿ ਟੂਪਲ ਗੋਲ ਬਰੈਕਟਾਂ ਨੂੰ ਛੱਡ ਸਕਦੇ ਹਨ, ਇਸਦੀ ਵਰਤੋਂ ਹੇਠ ਲਿਖੇ ਅਨੁਸਾਰ ਇੱਕ ਲਾਈਨ ‘ਤੇ ਮਲਟੀਪਲ ਵੇਰੀਏਬਲਾਂ ਨੂੰ ਕਈ ਮੁੱਲ ਨਿਰਧਾਰਤ ਕਰਨ ਲਈ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ।
a, b = 0, 1
print(a)
print(b)
# 0
# 1
ਜੇਕਰ ਵੇਰੀਏਬਲ ਦੀ ਸੰਖਿਆ ਤੱਤਾਂ ਦੀ ਸੰਖਿਆ ਨਾਲ ਮੇਲ ਨਹੀਂ ਖਾਂਦੀ ਹੈ, ਤਾਂ ਇੱਕ ਗਲਤੀ ਹੁੰਦੀ ਹੈ।
# a, b = t
# ValueError: too many values to unpack (expected 2)
# a, b, c, d = t
# ValueError: not enough values to unpack (expected 4, got 3)
ਜੇਕਰ ਵੇਰੀਏਬਲਾਂ ਦੀ ਸੰਖਿਆ ਐਲੀਮੈਂਟਸ ਦੀ ਸੰਖਿਆ ਤੋਂ ਘੱਟ ਹੈ, ਤਾਂ ਬਾਕੀ ਐਲੀਮੈਂਟਸ ਨੂੰ ਵੇਰੀਏਬਲ ਨਾਮ (ਹੇਠਾਂ ਦੇਖੋ) ਵਿੱਚ ਇੱਕ ਤਾਰਾ ਜੋੜ ਕੇ ਇੱਕ ਸੂਚੀ ਦੇ ਰੂਪ ਵਿੱਚ ਨਿਰਧਾਰਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।
ਨੇਸਟਡ ਟੂਪਲਸ, ਅਨਪੈਕ ਕੀਤੀਆਂ ਸੂਚੀਆਂ
ਨੇਸਟਡ ਟੂਪਲ ਅਤੇ ਸੂਚੀਆਂ ਨੂੰ ਵੀ ਅਨਪੈਕ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ। ਜੇ ਤੁਸੀਂ ਸਮੱਗਰੀ ਨੂੰ ਵੀ ਅਨਪੈਕ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ, ਤਾਂ ਵੇਰੀਏਬਲ ਨੂੰ ਹੇਠਾਂ ਦਿੱਤੇ ਵਿੱਚੋਂ ਇੱਕ ਵਿੱਚ ਨੱਥੀ ਕਰੋ
()
[]
t = (0, 1, (2, 3, 4))
a, b, c = t
print(a)
print(b)
print(c)
# 0
# 1
# (2, 3, 4)
print(type(c))
# <class 'tuple'>
a, b, (c, d, e) = t
print(a)
print(b)
print(c)
print(d)
print(e)
# 0
# 1
# 2
# 3
# 4
_underscore_ ਨਾਲ ਅਨਪੈਕ ਕੀਤਾ ਗਿਆ।
ਪਾਈਥਨ ਵਿੱਚ, ਸਿਰਫ਼ ਅਨਪੈਕ ਕੀਤੇ ਹੀ ਨਹੀਂ, ਮੁੱਲ ਜਿਨ੍ਹਾਂ ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ, ਨੂੰ ਰਵਾਇਤੀ ਤੌਰ ‘ਤੇ ਅੰਡਰਸਕੋਰ (ਅੰਡਰਸਕੋਰ) _ ਨੂੰ ਨਿਰਧਾਰਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਕੋਈ ਵਿਸ਼ੇਸ਼ ਵਿਆਕਰਨਿਕ ਅਰਥ ਨਹੀਂ ਹੈ; ਉਹਨਾਂ ਨੂੰ ਸਿਰਫ਼ _ ਨਾਮਕ ਵੇਰੀਏਬਲ ਨੂੰ ਦਿੱਤਾ ਗਿਆ ਹੈ।
t = (0, 1, 2)
a, b, _ = t
print(a)
print(b)
print(_)
# 0
# 1
# 2
ਤਾਰਿਆਂ ਨਾਲ ਅਨਪੈਕ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ
ਜੇਕਰ ਵੇਰੀਏਬਲਾਂ ਦੀ ਸੰਖਿਆ ਐਲੀਮੈਂਟਸ ਦੀ ਸੰਖਿਆ ਤੋਂ ਘੱਟ ਹੈ, ਤਾਂ ਵੇਰੀਏਬਲ ਨਾਮ ਵਿੱਚ ਇੱਕ ਤਾਰਾ ਇੱਕ ਸੂਚੀ ਦੇ ਰੂਪ ਵਿੱਚ ਐਲੀਮੈਂਟਸ ਨੂੰ ਇਕੱਠੇ ਨਿਰਧਾਰਤ ਕਰਨ ਦਾ ਕਾਰਨ ਬਣੇਗਾ।
ਇਹ ਸੰਟੈਕਸ Python 3 ਤੋਂ ਲਾਗੂ ਕੀਤਾ ਗਿਆ ਹੈ ਅਤੇ Python 2 ਵਿੱਚ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।
ਐਲੀਮੈਂਟਸ ਸ਼ੁਰੂ ਅਤੇ ਅੰਤ ਤੋਂ ਬਿਨਾਂ ਤਾਰਿਆਂ ਦੇ ਵੇਰੀਏਬਲਾਂ ਨੂੰ ਨਿਰਧਾਰਤ ਕੀਤੇ ਜਾਂਦੇ ਹਨ, ਅਤੇ ਬਾਕੀ ਤੱਤ ਤਾਰਿਆਂ ਵਾਲੇ ਵੇਰੀਏਬਲਾਂ ਲਈ ਇੱਕ ਸੂਚੀ ਦੇ ਰੂਪ ਵਿੱਚ ਨਿਰਧਾਰਤ ਕੀਤੇ ਜਾਂਦੇ ਹਨ।
t = (0, 1, 2, 3, 4)
a, b, *c = t
print(a)
print(b)
print(c)
# 0
# 1
# [2, 3, 4]
print(type(c))
# <class 'list'>
a, *b, c = t
print(a)
print(b)
print(c)
# 0
# [1, 2, 3]
# 4
*a, b, c = t
print(a)
print(b)
print(c)
# [0, 1, 2]
# 3
# 4
ਉਦਾਹਰਨ ਲਈ, ਜੇਕਰ ਤੁਸੀਂ ਕਿਸੇ ਵੇਰੀਏਬਲ ਨੂੰ ਟੂਪਲ ਜਾਂ ਸੂਚੀ ਦੇ ਸਿਰਫ਼ ਪਹਿਲੇ ਦੋ ਤੱਤ ਨਿਰਧਾਰਤ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ, ਤਾਂ ਤੁਸੀਂ ਉਪਰੋਕਤ ਅੰਡਰਸਕੋਰ ਦੀ ਵਰਤੋਂ ਉਹਨਾਂ ਹਿੱਸਿਆਂ ਲਈ ਕਰ ਸਕਦੇ ਹੋ ਜਿਨ੍ਹਾਂ ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ।
a, b, *_ = t
print(a)
print(b)
print(_)
# 0
# 1
# [2, 3, 4]
ਇਸ ਤਰ੍ਹਾਂ ਵੀ ਲਿਖਿਆ ਜਾ ਸਕਦਾ ਹੈ
a, b = t[0], t[1]
print(a)
print(b)
# 0
# 1
ਸਿਰਫ਼ ਇੱਕ ਤਾਰਾ ਨੱਥੀ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ। ਜੇਕਰ ਇੱਕ ਤਾਰੇ ਨਾਲ ਚਿੰਨ੍ਹਿਤ ਮਲਟੀਪਲ ਵੇਰੀਏਬਲ ਹਨ, ਤਾਂ ਇੱਕ ਸਿੰਟੈਕਸ ਐਰਰ ਗਲਤੀ ਦਾ ਨਤੀਜਾ ਹੋਵੇਗਾ ਕਿਉਂਕਿ ਇਹ ਨਿਰਧਾਰਤ ਕਰਨਾ ਸੰਭਵ ਨਹੀਂ ਹੈ ਕਿ ਹਰੇਕ ਵੇਰੀਏਬਲ ਨੂੰ ਕਿੰਨੇ ਤੱਤ ਨਿਰਧਾਰਤ ਕੀਤੇ ਗਏ ਹਨ।
# *a, b, *c = t
# SyntaxError: two starred expressions in assignment
ਨੋਟ ਕਰੋ ਕਿ ਇੱਕ ਤਾਰੇ ਦੇ ਨਾਲ ਚਿੰਨ੍ਹਿਤ ਵੇਰੀਏਬਲ ਨੂੰ ਨਿਰਧਾਰਤ ਕੀਤਾ ਇੱਕ ਸਿੰਗਲ ਐਲੀਮੈਂਟ ਵੀ ਇੱਕ ਸੂਚੀ ਦੇ ਰੂਪ ਵਿੱਚ ਨਿਰਧਾਰਤ ਕੀਤਾ ਗਿਆ ਹੈ।
t = (0, 1, 2)
a, b, *c = t
print(a)
print(b)
print(c)
# 0
# 1
# [2]
print(type(c))
# <class 'list'>
ਜੇਕਰ ਕੋਈ ਵਾਧੂ ਤੱਤ ਨਹੀਂ ਹਨ, ਤਾਂ ਇੱਕ ਖਾਲੀ ਸੂਚੀ ਨਿਰਧਾਰਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।
a, b, c, *d = t
print(a)
print(b)
print(c)
print(d)
# 0
# 1
# 2
# []