设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
楼主: crossin先生
打印 上一主题 下一主题

【Python 第52课】 元组

[复制链接]

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
楼主
发表于 2013-8-26 21:09:29 |显示全部楼层 |倒序浏览
上一次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分钟,轻松学编程



#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

沙发
发表于 2013-8-30 22:38:54 |显示全部楼层
piaoxu 发表于 2013-8-30 15:25
金币

手快有,手慢无啊
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

板凳
发表于 2013-10-12 17:30:04 |显示全部楼层
阿努比斯 发表于 2013-10-12 16:25
想不太明白:既然元组和list这么相似,并且还不能改变元组中元素的值,那么元组主要的用途是什么呢 ...

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

  3. c, d = fn()
复制代码
这种写法更方便
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

地板
发表于 2013-10-12 17:30:11 |显示全部楼层
阿努比斯 发表于 2013-10-12 16:25
想不太明白:既然元组和list这么相似,并且还不能改变元组中元素的值,那么元组主要的用途是什么呢 ...

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

  3. c, d = fn()
复制代码
这种写法更方便
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

5#
发表于 2016-3-3 12:59:50 |显示全部楼层
james23lt 发表于 2016-3-3 04:36
先生,51课到52课怎么突然就跳到pygame去了,是51课就基本上把基础讲完了吗? ...

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

但pygame不影响这个系列往下看
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

6#
发表于 2017-11-2 13:03:39 |显示全部楼层
Aquamarine 发表于 2017-11-2 00:26
若元组的个数多于2个,是不是可以x, y, z = get_pos(50),a, b, c, d = get_pos(50)?

可以
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-5-11 00:17 , Processed in 0.030976 second(s), 22 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部