Crossin的编程教室

标题: 【Python 第52课】 元组 [打印本页]

作者: crossin先生    时间: 2013-8-26 21:09
标题: 【Python 第52课】 元组
上一次pygame的课中有这样一行代码:
  1. x, y = pygame.mouse.get_pos()
复制代码
这个函数返回的其实是一个“元组”,今天我们来讲讲这个东西。

元组(tuple)也是一种序列,和我们用了很多次的list类似,只是元组中的元素在创建之后就不能被修改。

如:
  1. postion = (1, 2)
  2. geeks = ('Sheldon', 'Leonard', 'Rajesh', 'Howard')
复制代码
都是元组的实例。它有和list同样的索引、切片、遍历等操作(参见25~27课):
  1. print postion[0]
  2. for g in geeks:
  3.     print g
  4. print geeks[1:3]
复制代码
其实我们之前一直在用元组,就是在print语句中:
  1. print '%s is %d years old' % ('Mike', 23)
复制代码
('Mike', 23)就是一个元组。这是元组最常见的用处。

再来看一下元组作为函数返回值的例子:
  1. def get_pos(n):
  2.     return (n/2, n*2)
复制代码
得到这个函数的返回值有两种形式,一种是根据返回值元组中元素的个数提供变量:
  1. x, y = get_pos(50)
  2. print x
  3. print y
复制代码
这就是我们在开头那句代码中使用的方式。

还有一种方法是用一个变量记录返回的元组:
  1. pos = get_pos(50)
  2. print pos[0]
  3. print pos[1]
复制代码
#==== Crossin的编程教室 ====#
微信ID:crossincode
论坛:http://crossin.me
QQ群:312723402

面向零基础初学者的编程课
每天5分钟,轻松学编程




作者: xiaotong125    时间: 2013-8-27 11:28
消灭零回复
作者: Victor    时间: 2013-8-29 08:10
我是来挣金币的
作者: piaoxu    时间: 2013-8-30 11:53
看看。。。。。。
作者: piaoxu    时间: 2013-8-30 15:25
金币
作者: crossin先生    时间: 2013-8-30 22:38
piaoxu 发表于 2013-8-30 15:25
金币

手快有,手慢无啊
作者: fl0w    时间: 2013-9-24 10:34
(x, y) = ('hello', ' world!')
作者: 阿努比斯    时间: 2013-10-12 16:25
想不太明白:既然元组和list这么相似,并且还不能改变元组中元素的值,那么元组主要的用途是什么呢
作者: crossin先生    时间: 2013-10-12 17:30
阿努比斯 发表于 2013-10-12 16:25
想不太明白:既然元组和list这么相似,并且还不能改变元组中元素的值,那么元组主要的用途是什么呢 ...

因为没有写权限,tuple比list更快,更安全
有时候你的函数需要返回两个值,就可以使用一个tuple作为返回值,比如
  1. def fn():
  2.     return (1, 2)

  3. c, d = fn()
复制代码
这种写法更方便
作者: crossin先生    时间: 2013-10-12 17:30
阿努比斯 发表于 2013-10-12 16:25
想不太明白:既然元组和list这么相似,并且还不能改变元组中元素的值,那么元组主要的用途是什么呢 ...

因为没有写权限,tuple比list更快,更安全
有时候你的函数需要返回两个值,就可以使用一个tuple作为返回值,比如
  1. def fn():
  2.     return (1, 2)

  3. c, d = fn()
复制代码
这种写法更方便
作者: 阿努比斯    时间: 2013-10-13 09:49
crossin先生 发表于 2013-10-12 17:30
因为没有写权限,tuple比list更快,更安全
有时候你的函数需要返回两个值,就可以使用一个tuple作为返回 ...

明白了,多谢解释
作者: liu-pengfei    时间: 2014-9-27 00:03
以前还没注意到这个,又长知识了。
作者: 草办    时间: 2015-12-11 14:33
get
作者: catherinemic    时间: 2016-2-1 11:18
get it~

作者: james23lt    时间: 2016-3-3 04:36
先生,51课到52课怎么突然就跳到pygame去了,是51课就基本上把基础讲完了吗?
作者: crossin先生    时间: 2016-3-3 12:59
james23lt 发表于 2016-3-3 04:36
先生,51课到52课怎么突然就跳到pygame去了,是51课就基本上把基础讲完了吗? ...

当时发课的时候,这里穿插着讲了pygame
入门基础差不多完了。

但pygame不影响这个系列往下看
作者: MagicalEE    时间: 2016-4-21 13:59
学习中
作者: Aquamarine    时间: 2017-11-2 00:26
若元组的个数多于2个,是不是可以x, y, z = get_pos(50),a, b, c, d = get_pos(50)?
作者: crossin先生    时间: 2017-11-2 13:03
Aquamarine 发表于 2017-11-2 00:26
若元组的个数多于2个,是不是可以x, y, z = get_pos(50),a, b, c, d = get_pos(50)?

可以




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5