python cookbook 学习笔记 第一章 数据结构和算法(1)解压序列赋值给多个变量

  • 解压序列赋值给多个变量
  • 问题:
  • 有一个包含N个元素的元组或者序列,怎样将里面的值解压后同时赋给N个变量
  • 解决方案:
    任何的序列(或可迭代对象)都可以通过一个简单的赋值语句解压并赋值给多个变量。
    唯一的前提是变量的数量必须和序列元素的数量是一样的
p = (4, 5)
x, y = p

print(x)  

print(y)  

data = ["ACME",50,91.1,(2012,12,21)]
name, shares, price, date = data

print(name) 
print(date)  

print(name,shares,price,date)  
  • 字符串,文件对象,迭代器和生成器 都可以用这种方法赋值
s = "hello"
a, b, c, d, e = s
print(a) 
  • 如果只解压一部分,丢弃其他的值,可以用任意变量名去占位,到时候丢掉这个变量就行了。
  • 要保证占位变量名在其他地方没有被使用到
data = ["ACME", 50, 91.1, (2012,12,21)]
_, shares, price, _ = data

print(price)  
  • 解压可迭代对象给多个变量
  • 问题:
  • 如果一个可迭代对象的元素个数超过变量个数时,会抛出一个ValueError。 那么这样才能从这个可迭代对象中解压出N个元素。
  • 解决方案:
  • python的星号表达式可以解决这个问题。
record = ("Dave","dave@example.com","773-555-1212","847-555-1212")
name, email, *phone_numbers = record

print(name)   --->Dave
print(phone_numbers)    ---> ['773-555-1212', '847-555-1212']

**注意:**phone_numbers 这个变量解压出来的永远是列表类型

  • 星号表达式也能用在列表的开始部分
*trailing, current = [10,8,7,1,9,8,10,3]

print(trailing) 
print(current)
  • 扩展的迭代解压语法是专门为解压不确定个数或任意个数元素的可迭代对象涉及的。 通常,这些可迭代对象的元素结构有确定的规则(比如第一个元素后面都是电话号码),星号 表达式让开发人员可以容易的利用这些规则来解压出元素来。
  • 值得注意的是,星号表达式在迭代元素为可变长元组的序列时是很有用的。 比如下面是一个带有标签的元组序列:
records = [
    ("foo", 1, 2),
    ("bar", "hello"),
    ("foo", 3, 4)
]

def do_foo(x, y):
    print("foo", x, y)

def do_bar(s):
    print("bar", s)

for tag, *args in records:
    if tag == "foo":
        do_foo(*args)
    elif tag == "bar":
        do_bar(*args)
  • 星号解压语法在字符串操作的时候也会很有用,比如字符串的分割
line = "nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false"
uname, *fields, homedir, sh = line.split(":")

print(uname)
print(fields)  
print(homedir)  
print(sh)
  • 有时候,解压一些元素后想丢弃它们,不能简单实用*,可以实用一个普通的废弃名称. 比如_或者ign。
record = ("ACME",50,123.45,(12,18,2012))
name, *_, (*_, year) = record

print(name)
print(year)  
  • 可以用分割语法去实现递归算法。递归不是python擅长的。因此对这个不要太认真。
items = [1,10,7,4,5,9]

def sum(items):
    head, *tail = items
    return head + sum(tail) if tail else head

print(sum(items)) 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
疫情居家办公系统管理系统按照操作主体分为管理员和用户。管理员的功能包括办公设备管理、部门信息管理、字典管理、公告信息管理、请假信息管理、签到信息管理、留言管理、外出报备管理、薪资管理、用户管理、公司资料管理、管理员管理。用户的功能等。该系统采用了MySQL数据库,Java语言,Spring Boot框架等技术进行编程实现。 疫情居家办公系统管理系统可以提高疫情居家办公系统信息管理问题的解决效率,优化疫情居家办公系统信息处理流程,保证疫情居家办公系统信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理公告,管理疫情居家办公系统信息,包括外出报备管理,培训管理,签到管理,薪资管理等,可以管理公告。 外出报备管理界面,管理员在外出报备管理界面中可以对界面中显示,可以对外出报备信息的外出报备状态进行查看,可以添加新的外出报备信息等。签到管理界面,管理员在签到管理界面中查看签到种类信息,签到描述信息,新增签到信息等。公告管理界面,管理员在公告管理界面中新增公告,可以删除公告。公告类型管理界面,管理员在公告类型管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值