Python 30分钟入门——数据类型 and 控制结构
Python是一门脚本语言,我也久闻大名,但正真系统的接触学习是在去年(2013)年底到今年(2014)年初的时候。不得不说的是Python的官方文档相当齐全,如果你是在Windows上学习Python,安装包自带的“Python Manuals”就是一份很好的学习资料(基本上不用去找其他资料了);尤其是其中的Tutorial,非常适合初学者。本文一方面总结了python语言的核心——数据类型和控制结构;另一方面,通过与其他语言的对比表达了我对Python的一些拙见。
数据类型
int, long, float, str, complex
- >>> type(123)
- <type 'int'>
- >>> type(-234)
- <type 'int'>
- >>> type(123456123456)
- <type 'long'>
- >>> type(-123456123456)
- <type 'long'>
- >>> type(123.456)
- <type 'float'>
- >>> type('abc')
- <type 'str'>
- >>> type("hello, world")
- <type 'str'>
- >>> type(123456)
- <type 'int'>
- >>> type(123456789)
- <type 'int'>
- >>> type(1234567890)
- <type 'int'>
- >>> type(12345678901)
- <type 'long'>
可以看到1234567890还是int,12345678901就是long了,说明int是有范围的。记得C/C++的int长度(4B)的同学都知道,C/C++里int的取值范围是:[-2^31, 2^31-1]也就是[-2147483648, 2147483647]。据此,我们可以看看Python的int范围:
- >>> type(2147483647)
- <type 'int'>
- >>> type(2147483648)
- <type 'long'>
- >>> type(-2147483648)
- <type 'int'>
- >>> type(-2147483649)
- <type 'long'>
这次试验说明,Python的int范围和C/C++一样。(事实上和long一样,这里只是因为运行的是32位的python解释器,如果是64位python解释器,int是8字节)
- >>> type(1L)
- <type 'long'>
- >>> type(2l)
- <type 'long'>
- >>> type(123.456)
- <type 'float'>
- >>> type(123456123456.123456123456123456123456)
- <type 'float'>
complex(复数)
- >>> type(3+4j)
- <type 'complex'>
- >>> type(3+4J)
- <type 'complex'>
- >>> type(4j)
- <type 'complex'>
- >>> type(j)
- Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
- NameError: name 'j' is not defined
- >>> type(1j)
- <type 'complex'>
但是1j不允许直接写成j,j会被当做name查找,如果没找到就会报错。
tuple, list, set, dict
- >>> type([1, 2, 3])
- <type 'list'>
- >>> type({2, 3, 4})
- <type 'set'>
- >>> type((3, 4, 5))
- <type 'tuple'>
- >>> type({'key1': 'value1', 'key2': 'value2'})
- <type 'dict'>
可以看到(), [], {}和它括起来的一系列元素,分别是表示:元组、列表、集合。而dict则是{key1: value1, [key2: value2, ...]}的形式。
- >>> (1, 'two', 3.0)
- (1, 'two', 3.0)
- >>> [(1, 'two', 3.0), '4', 5]
- [(1, 'two', 3.0), '4', 5]
- >>> {1, 2L, 3.0, 4j}
- set([1, 2L, 3.0, 4j])
- >>> {1: 'one', 'one': 1}
- {1: 'one', 'one': 1}
控制结构
顺序结构
语句
- >>> print "hello, world"
- hello, world
并且Python程序没有所谓的“入口”,这和多数脚本语言类似。
弱类型
- >>> a = 123
- >>> b = "asdf"
- >>> c = [3, 4, 5]
- >>> a
- 123
- >>> b
- 'asdf'
- >>> c
- [3, 4, 5]
- >>> a = b
- >>> b
- 'asdf'
- 使用变量前不用向提前声明变量的类型
- 一个变量初始化为一个类型后还能给他赋其他类型的值
函数
- def sayHello(name):
- print 'Hello, ' + name + '!'
- sayHello('Jack')
这段代码的运行结果为:Hello, Jack!
类
- class Man:
- def __init__(self, name):
- self.name = name
- def hello(self):
- print 'Hello, ' + self.name + '!'
- m = Man('Jack')
- m.hello()
这段代码也会输出:Hello, Jack!
类的更多特性和OOP有关,以后有时间再单独发一篇博文展示。
- >>> type(sayHello)
- <type 'function'>
- >>> type(Man)
- <type 'classobj'>
- >>> type(m)
- <type 'instance'>
- >>> type(m.hello)
- <type 'instancemethod'>
- >>> type(Man.hello)
- <type 'instancemethod'>
可以想象,Python世界里的东西都是”灰色“的,解释器对它们”一视同仁“,从来不以貌取人,只看他们现在身上的标签是什么~
选择结构
Python的选择结构以if开始。
bool
- >>> type(1==1)
- <type 'bool'>
- >>> type(True)
- <type 'bool'>
- >>> type(False)
- <type 'bool'>
对于Number(int, long, float, complex),0在if条件上也是False:
- >>> if 1:
- ... print "true"
- ...
- true
- >>> if 0:
- ... print "true"
- ... else:
- ... print "false"
- ...
- false
- >>> if 0.0:
- ... print "0.0 is true"
- ...
- >>> if 0j:
- ... print "0j is true"
- ...
提示:Python是以代码缩进区分代码块的
除此之外,空的string和空的集合(tuple, list, set)也是False:
- >>> if '':
- ... print 'null string is true'
- ...
- >>> if ():
- ... print 'null tuple is true'
- ...
- >>> if []:
- ... print 'null list is true'
- ...
- >>> if {}:
- ... print 'null set is true'
- ...
if, if-else & if-elif-else
- >>> x = int(raw_input("Please enter an integer: "))
- Please enter an integer: 42
- >>> if x < 0:
- ... x = 0
- ... print 'Negative changed to zero'
- ... elif x == 0:
- ... print 'Zero'
- ... elif x == 1:
- ... print 'Single'
- ... else:
- ... print 'More'
- ...
- More
循环结构
for
- >>> a = [1, 'two', 3.0]
- >>> for i in a:
- ... print i
- ...
- 1
- two
- 3.0
这种for迭代集合很方便。
- >>> for i in range(1, 6):
- ... print i
- ...
- 1
- 2
- 3
- 4
- 5
- >>> for i in range(10, 65, 10):
- ... print i
- ...
- 10
- 20
- 30
- 40
- 50
- 60
这里展示了range的两种调用形式,一种是range(a, b),它将返回一个从a(包含a)到b(不包含)的整数列表(list),另一种range(a, b, s),将返回一个a~b,以s为步长的list:
- >>> range(1, 6)
- [1, 2, 3, 4, 5]
- >>> range(10, 65, 10)
- [10, 20, 30, 40, 50, 60]
while
- >>> i = 1
- >>>
- >>> while i < 5:
- ... i = i+1
- ... print i
- ...
- 2
- 3
- 4
- 5
顺便一提,Python里 i=i+1 不能写成i++,Python不支持这种语法;但可以写成 i += 1:
- >>> i
- 5
- >>> i += 1
- >>> i
- 6
- >>> i++
- File "<stdin>", line 1
- i++
- ^
- SyntaxError: invalid syntax
- >>> ++i
- 6
- >>> i
- 6
各位可能会疑惑,为什么++i可以?因为pyhon支持前置的+(正负号)运算,++被当做两次正运算了;同理,+++i,++++i都是一样的;我们可以顺便测一下负号运算:
- >>> i
- 6
- >>> +++i
- 6
- >>> ++++i
- 6
- >>> -i
- -6
- >>> --i
- 6
- >>> ---i
- -6
和想象的结果一致,Great!
输入输出(IO)
- >>> varA = raw_input('please input:')
- please input:Life is too short, you need Python!
- >>> varA
- 'Life is too short, you need Python!'
- >>> type(raw_input('input something:'))
- input something:asdf
- <type 'str'>
- >>> type(raw_input('input something:'))
- input something:123
- <type 'str'>
A:你看到了,raw_input不论你输入什么都会返回str类型,这也是为什么叫做raw_input的原因。
- >>> type(input('input sth:'))
- input sth:123
- <type 'int'>
- >>> type(input('input sth:'))
- input sth:asdf
- Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
- File "<string>", line 1, in <module>
- NameError: name 'asdf' is not defined
- >>> type(input('input sth:'))
- input sth:varA
- <type 'str'>
- >>> input('sth:')
- sth:varA
- 'Life is too short, you need Python!'
- >>> input('try some input like your code:')
- try some input like your code:[1, 'two', 3.0]
- [1, 'two', 3.0]
- >>> input('try again:')
- try again:'Oh!!!'
- 'Oh!!!'
后记(我的拙见)
Python 30分钟入门——数据类型 and 控制结构的更多相关文章
- Python 30分钟入门——数据类型 & 控制结构
Python是一门脚本语言,我也久闻大名,但正真系统的接触学习是在去年(2013)年底到今年(2014)年初的时候.不得不说的是Python的官方文档相当齐全,假设你是在Windows上学习Pytho ...
- Python 30分钟入门指南
Python 30分钟入门指南 为什么 OIer 要学 Python? Python 语言特性简洁明了,使用 Python 写测试数据生成器和对拍器,比编写 C++ 事半功倍. Python 学习成本 ...
- Python 30分钟快速入门指南
学习地址 中文版:Python 30分钟入门指南 英文版:Learn X in Y minutes 学习时间 2019/03/10 19:00 - 19:32,多用了2分钟.
- Shell脚本编程30分钟入门
Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...
- Objective-C 30分钟入门教程
Objective-C 30分钟入门教程 我第一次看OC觉得这个语言的语法有些怪异,为什么充满了@符号,[]符号,函数调用没有()这个,但是面向对象的高级语言也不外乎类,接口,多态,封装,继承等概念. ...
- 30分钟入门Java8之方法引用
30分钟入门Java8之方法引用 前言 之前两篇文章分别介绍了Java8的lambda表达式和默认方法和静态接口方法.今天我们继续学习Java8的新语言特性--方法引用(Method Referenc ...
- 30分钟入门Java8之默认方法和静态接口方法
30分钟入门Java8之默认方法和静态接口方法 前言 上一篇文章30分钟入门Java8之lambda表达式,我们学习了lambda表达式.现在继续Java8新语言特性的学习,今天,我们要学习的是默认方 ...
- 【原创】30分钟入门 github
很久没更新了,这篇文章重点在github的入门使用,读者可以下载github for windows shell,边看边操作,加深印象. 好了,30分钟的愉快之旅开始吧: 一.github使用的注意事 ...
- 正则表达式30分钟入门教程<转载>
来园子之前写的一篇正则表达式教程,部分翻译自codeproject的The 30 Minute Regex Tutorial. 由于评论里有过长的URL,所以本页排版比较混乱,推荐你到原处查看,看完了 ...
随机推荐
- jQuery 事件方法
事件方法触发器或添加一个函数到被选元素的事件处理程序. 下面的表格列出了所有用于处理事件的 jQuery 方法. 方法 描述 bind() 向匹配元素附加一个或更多事件处理器 blur() 触发.或将 ...
- Java学习笔记(一)
纯属个人学习笔记,有什么不足之处大家留言,谢谢 Java程序打包与JAR运行方法 在Eclipse的"包资源管理器"视图中找到要打包成JAR文件的项目.在项目名称上单击鼠标右键,在 ...
- django 进阶篇
models(模型) 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 import MySQLdb def GetLi ...
- github拉取和推送
登入github 创建一个开源项目 然后打开安装好的git 首先进入一个指定的文件夹 例如: 1)E:\>cd miaov/testGit 回车 进入E盘的testGit文件夹 2)E:\mia ...
- JS,删除数据时候,多次确认后才删除。
function delfun(){ if(window.confirm("请仔细核对无误,删除本数据后不能恢复.")){ if(window.confirm("请再次确 ...
- webapi-crud
- TTTAttributedLabel 富文本小记
- (void)setupTipsLabel:(TTTAttributedLabel *)label { UIColor *red = [UIColor mainColor]; UIColor *gr ...
- 6. web前端开发分享-css,js移动篇
随着移动市场的逐步扩大及相关技术的日趋完善,对前端开发提出了新的岗位要求,在继承前人成果的基础上需要在新的历史条件下有新的创新.移动端的开发,虽然没有IE6众多问题的折磨,但是多平台,多设备的兼容,也 ...
- SQL Server群集如何在线检测
SQL Server群集知识介绍 Windows群集安装 基于iSCSI的SQL Server 2012群集测试 前言 群集的检测是调用dll资源,例如对于共享存储,ip,网络名称与DTC 这类Win ...
- fedora配置163为yum的源
一种方法: 1.下载 http://mirrors.163.com/.help/fedora-163.repo 和 http://mirrors.163.com/.help/fedora-updat ...