Python常见面试题008. 谈谈python中的解包

科技资讯 投稿 6600 0 评论

Python常见面试题008. 谈谈python中的解包

008. 谈谈python中的解包

    这是个简单的知识点,但有的学员并不理解
  • unpacking解包
  • 解,对应的是*或者**,也有自动解包之说
  • 包对应的可迭代对象

自动解包

    赋值的demo
a,b = [1,2]
print(a # 1
print(b # 2
    将容器里面的元素逐个取出来分别赋值
  • 不一定是列表,可以是元组、字典、字符串等一切可迭代的对象
  • 比如这样
t1,t2 = (1,2
s1,s2 = 'ab'
d1,d2 = {'name':'wuxianfeng','age':18}  # d1 是 name,d2 是age
    不过要注意的是字典的解包,只是个key
  • 也可以这样
a, *b, c = range(5  # b 就是[1,2,3]

数据过多的解包,星号

    有的时候数据可能会过多,那就要用到星号了
  • 比如这样
a,b,c = 1,2,3,4
# 报错了
ValueError                                Traceback (most recent call last
<ipython-input-6-e6e12dfe99e4> in <module>
----> 1 a,b,c = 1,2,3,4

ValueError: too many values to unpack (expected 3
    怎么解决?
a,*b,c = 1,2,3,4
# 此时的b的值为  [2, 3],是个列表

# 如果这样
a,b,*c = 1,2,3,4  # 那么c就是[3,4]
    有点像这样
list1 = [1,2,3,4,5,6,7,8]
first , rest = list1[0],list1[1:]   
first , *rest = list1  # 以上两种写法一样的,都能让rest是 [2,3,4,5,6,7,8]

星号在函数中的使用

    示例代码

    def fun(x,y:
        print(f'x={x}'
        print(f'y={y}'
    
    fun(1,2 
    # 输出如下..
    # x=1
    # y=2
    
    
  • 那如果这样呢

    fun([1,2] 
    # 报错了
    TypeError                                 Traceback (most recent call last
    <ipython-input-8-6924a6444e6f> in <module>
    ----> 1 fun([1,2]
    
    TypeError: fun( missing 1 required positional argument: 'y'
    
  • 但你可以这样

    fun(*[1,2]  # x=1 y=2
    
    fun(*'ab' # x=a y=b
    
    fun(*(3,4 # x=3 y=4
    
    
    
  • 如果这样呢

    fun(*{'name':'wuxianfeng','age':18}  
    # x=name
    # y=age
    
    
    
  • 如果这样写呢?

    for a, *b in [(1, 2, 3, (4, 5, 6, 7]:
        print(b 
    
    
    
    
  • 下面2个语句都对吗?对的话,a的值是啥

    *a, = range(5
    *a  = range(5
    
    
    

两个星号的解包

    换个函数

编程笔记 » Python常见面试题008. 谈谈python中的解包

赞同 (28) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽