前言:
现在兄弟们对“python用星号输出字母h”大体比较珍视,各位老铁们都需要知道一些“python用星号输出字母h”的相关文章。那么小编同时在网络上收集了一些有关“python用星号输出字母h””的相关文章,希望小伙伴们能喜欢,大家一起来了解一下吧![浮云]从某个可迭代对象中分解出N个元素,但是这个可迭代元素的长度可能超过了N,这会导致出现“分解值过多的异常”(too many values to unpack)。
解决方法
[太阳]python中星号表达式,“ * 表达式 ” 可以用来解决这个问题。
比如说有一门课程,决定在期末作业成绩中去掉第一个和最后一个,只对中间剩下的成绩做平均统计。如果作业有5个,可以简单的将5个都分解出来。如果有30个呢?是不是计算就变得很复杂了。
采用 * 表达式方法,就会变得很简单。
def drop_first_last(grades): first,*middle,last = grades return avg(middle)
再举一个例子,假设有一些用户记录,记录由姓名和电子邮件地址组成,后面跟着任意数量的电话号码。可以这样分解记录:
>>record = ('Dave','dave@example.com','773-555-1212','847-525-1122')>>name,email,*phone_numbers = record>>name输出:‘Dave’>>email输出:'dave@example.com'>>phone_numbers输出:['773-555-1212','847-525-1122']
分析:不管需要分解出多少个电话号码,变量phone_numbers一直是列表,而这是毫无意义的。如此一来,对于任何用到了变量phone_numbers的代码都不必对它可能是一个列表的情况负责,或者额外做任何形式的类型检查。
[太阳] * 修饰的变量也可以位于列表的第一个位置。
例如,用一系列的值来代表公司过去8个季度的销售额。如果想对最近一个季度的销售额同前7个季度的平均值作比较,可以这样操作:
*trailing_qtrs,current_qtr = sales_recordtrailing_avg = sum(trailing_qtrs) / len(trailing_qtrs)return avg_comparison(trailing_avg,current_qtr)
我们来看一下添加上数据在解释器层面是怎么执行的:
>>*trailing,current = [10,8,7,1,9,5,10,3]>>trailing输出:[10,8,7,1,9,5,10]>>current输出:3
这样就很好理解了。
[中国赞]进阶
对于分解未知或者任意长度的可迭代对象,这种扩展的分解操作可谓是量身定做的工具。
通常,这类可迭代对象中会有一些已知的组件或者模式,利用 *表达式 分解可迭代对象可以轻松利用这些模式。
[太阳]*形式的语法在迭代一个变长的元组序列时尤其好用。
例如,假设有一个带标记的元组序列:
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(':')>>uname输出:'nobody'>>homedir输出:'/var/empty'>>sh输出:'/use/bin/false'
有时候可能想分解出某些值然后再丢弃他们。在分解的时候,不能只是指定一个单独的 * ,
可以使用几个常用的来表示带丢弃的变量名。
>>record = ('ACME',50,123,(12,18,2021))>>name,*_,(*_,year) = record>>name输出:'ACME'>>year输出:2012
[太阳]*分解操作和各种函数式语言中的列表处理功能有着一定的相似性。
例如有一个列表,可以像下面这样轻松的将其分解为头部和尾部:
>>items = [1,10,7,4,5,9]>>head,*tail = items>>head输出:1>>tail输出:[10,7,4,5,9]
[太阳]在编写执行这类拆分功能的函数时,人们可以假设这是为了实现某些精巧的递归算法。
>>def sum(items):... head,*tail = items... return head+sum(tail) if tail else head...>>sum(items)
本文较为详细地讲述了python在可迭代对象中分解元素时 *表示的用法。
学习更多的python小技巧,记得关注哦~[玫瑰]
标签: #python用星号输出字母h