python 变量 fields_python3--(变量)

变量:

Python 是动态类型语言, 也就是说不需要预先声明变量的类型。变量是对象的引用,变量只是将指针指向了对象所在的内存地址。变量的类型和值在赋值那一刻被初始化。

变量起名:

1.显式-->通俗易懂

2.nums_of_alex_gf = 19

3.NumsOfAlexGf = 20 驼峰写法

4.中横线不能作为变量的命名字符

5.数字不能作为开头,但可以在中间或者结尾

6.特殊字符不能作为变量名的组成部分

7.不能使用空格

8.关键字不能声明为变量

变量赋值

Python中的变量不需要声明,变量的赋值操作既是变量声明和定义的过程。

每个变量在内存中创建,都包括变量的标识,名称和数据这些信息。

每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。

等号(=)用来给变量赋值。

等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。

多个变量赋值

Python允许你同时为多个变量赋值。例如:

a = b = c = 1

以上实例,创建一个整型对象,值为1,三个变量被分配到相同的内存空间上。

您也可以为多个对象指定多个变量。例如:

a, b, c = 1, 2, "john"

以上实例,两个整型对象1和2的分配给变量a和b,字符串对象"john"分配给变量c。

问题:

现在有一个包含N 个元素的元组或者是序列,怎样将它里面的值解压后同时赋值

给N 个变量?

任何的序列(或者是可迭代对象) 可以通过一个简单的赋值语句解压并赋值给多个

变量。唯一的前提就是变量的数量必须跟序列元素的数量是一样的。

>>> p = (4, 5)>>> x, y =p>>>x4

>>>y5

>>>

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

>>>date

(2012, 12, 21)>>> name, shares, price, (year, mon, day) =data>>>name'ACME'

>>>year2012

>>>mon12

>>>day21

>>>

View Code

这种解压赋值可以用在任何可迭代对象上面,而不仅仅是列表或者元组。

包括字符串,文件对象,迭代器和生成器。

有时候,你可能只想解压一部分,丢弃其他的值。对于这种情况Python 并没有提

供特殊的语法。但是你可以使用任意变量名去占位,到时候丢掉这些变量就行了。

>>> data = [ 'ACME', 50, 91.1, (2012, 12, 21) ]

>>> _, shares, price, _ = data

>>> shares

50

>>> price

91.1

问题:

如果一个可迭代对象的元素个数超过变量个数时,会抛出一个ValueError 。那么

怎样才能从这个可迭代对象中解压出N 个元素出来?

Python 的星号表达式可以用来解决这个问题。

>>> record = ('Dave', 'dave@example.com', '773-555-1212', '847-555-1212')

>>> name, email, *phone_numbers = record

>>> name

'Dave'

>>> email

'dave@example.com'

>>> phone_numbers

['773-555-1212', '847-555-1212']

星号表达式也能用在列表的开始部分。比如,你有一个公司前8 个月销售数据的序

列,但是你想看下最近一个月数据和前面7 个月的平均值的对比。你可以这样做:

*trailing_qtrs, current_qtr = sales_record

trailing_avg = sum(trailing_qtrs) / len(trailing_qtrs)

return avg_comparison(trailing_avg, current_qtr)

下面是在Python 解释器中执行的结果:

>>> *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)

foo 1 2

bar hello

foo 3 4

星号解压语法在字符串操作的时候也会很有用,比如字符串的分割。

代码示例:

>>> line = 'nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false'

>>> uname, *fields, homedir, sh = line.split(':')

>>> uname

'nobody'

>>> homedir

'/var/empty'

>>> sh

'/usr/bin/false'

有时候,你想解压一些元素后丢弃它们,你不能简单就使用* ,但是你可以使用一

个普通的废弃名称,比如或者ign 。

代码示例:

>>> record = ('ACME', 50, 123.45, (12, 18, 2012))

>>> 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)

36

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值